Prendendo l'esca dalla risposta di dnissley (dove chiede se qualcuno potrebbe creare un componente aggiuntivo), ho creato un componente aggiuntivo per VB6. È un po 'rozzo (e spiegherò perché a breve), ma fa il lavoro.
Ho creato un nuovo progetto di componente aggiuntivo in VB6 che mi ha dato il modulo "frmAddin" predefinito (che non uso) e il designer "Connect". Ho aggiunto una classe di colori che contiene quanto segue:
Opzione esplicita
Dim m_iForeColour As Intero
Dim m_iBackColour As Intero
Dim m_iIndicatorColour As Inger
Proprietà pubblica Let ForeColour (ByVal iID As Inger)
m_iForeColour = iID
Proprietà finale
Proprietà pubblica Ottieni ForeColour () come numero intero
ForeColour = m_iForeColour
Proprietà finale
Proprietà pubblica Let BackColour (ByVal iID As Inger)
m_iBackColour = iID
Proprietà finale
Proprietà pubblica Get BackColour () Come numero intero
BackColour = m_iBackColour
Proprietà finale
Proprietà pubblica Let IndicatorColour (ByVal iID As Inger)
m_iIndicatorColour = iID
Proprietà finale
Proprietà pubblica Get IndicatorColour () Come numero intero
IndicatorColour = m_iIndicatorColour
Proprietà finale
E poi ho modificato il codice nel Designer "Connect" in modo che sia il seguente:
Opzione esplicita
Modulo pubblico visualizzato come booleano
VBInstance pubblica come VBIDE.VBE
Dim mcbMenuCommandBar As Office.CommandBarControl
Dim mfrmAddIn Come nuovo frmAddIn
Public WithEvents MenuHandler Come gestore eventi della barra dei comandi di CommandBarEvents
Dim mcbToolbar Come Office.CommandBarControl
Public WithEvents MenuHandler2 Come CommandBarEvents
Codice fioco Colori () Come colore
'************************************************* ****************************
'RunScript Sub
'------------------------------------------------- ----------------------------
"DESCRIZIONE:
'Esegue il codice che imposta i colori richiesti per la finestra del codice in
'IDE attivo.
"*** UN PROGETTO DEVE ESSERE CARICATO PRIMA CHE QUESTO FUNZIONA REALMENTE ***
'************************************************* ****************************
RunScript secondario ()
ReadColoursFile
'Seleziona Strumenti> Opzioni
SendKeys "% to", 5
"Vai alle schede, seleziona" Opzioni "
SendKeys "+ {TAB}"
SendKeys "{DESTRA}"
'Seleziona la casella di riepilogo
SendKeys "{TAB}"
Colore tenue Impostazione come colore
Dim iColour come numero intero
Per iColour = da 0 a 9
SetColours iColour, codeColours (iColour)
Prossimo iColour
SendKeys "~"
End Sub
'************************************************* ****************************
'ReadColoursFile Sub
'------------------------------------------------- ----------------------------
"DESCRIZIONE:
'Legge il file colore dal disco e popola l'array codeColours che
'viene utilizzato dai metodi SetColour * per selezionare i colori corretti da
'la schermata delle opzioni.
'************************************************* ****************************
Sottotitoli ReadColoursFile ()
Dim colourLine As String
Dim colourArray () As String
Colore tenue Impostazione come colore
Dim oFSO As FileSystemObject
Impostare oFSO = New FileSystemObject
If Not oFSO.FileExists (App.Path & "\ VB6CodeColours.dat") Quindi
MsgBox "VB6CodeColours.dat non trovato in" & App.Path, vbOKOnly, "File delle impostazioni VB6CodeColours non trovato!"
Esci da Sub
Finisci se
Impostare oFSO = Nothing
Apri App.Path e "\ VB6CodeColours.dat" per Input As # 1
Codice ReDimColori (9) Come colore
While Not EOF (1)
Ingresso linea n. 1, colourLine
colourArray = Split (colourLine, ",")
Se IsNumeric (colourArray (0)) Quindi
Se codeColours (colourArray (0)) non è niente, allora
Set colourSetting = New Color
Se IsNumeric (colourArray (1)) Quindi
colourSetting.ForeColour = CInt (colourArray (1))
Finisci se
Se IsNumeric (colourArray (2)) Quindi
colourSetting.BackColour = CInt (colourArray (2))
Finisci se
Se IsNumeric (colourArray (3)) Quindi
colourSetting.IndicatorColour = CInt (colourArray (3))
Finisci se
Set codeColours (colourArray (0)) = colourSetting
Finisci se
Finisci se
Wend
Chiudi # 1
Set colourSetting = Nothing
End Sub
'************************************************* ****************************
'SetColours Sub
'------------------------------------------------- ----------------------------
"DESCRIZIONE:
'Seleziona l'elemento colore dall'elenco e quindi scorre il selettore colore
"controlli associati a quell'elemento e li imposta in base ai valori
'impostato nel file VB6CodeColours.dat.
'************************************************* ****************************
Sub SetColours (ByVal iColour As Integer, ByRef colourSetting As Color)
Dim iKey As Intero
SendKeys "{HOME}"
Per iKey = 1 a iColour
SendKeys "{DOWN}"
Il prossimo iKey
SetColourSelector colourSetting.ForeColour
SetColourSelector colourSetting.BackColour
SetColourSelector colourSetting.IndicatorColour
SendKeys "+ {TAB}"
SendKeys "+ {TAB}"
SendKeys "+ {TAB}"
End Sub
'************************************************* ****************************
'SetColourSelector Sub
'------------------------------------------------- ----------------------------
"DESCRIZIONE:
'Imposta il colore nel combo selettore. Suppone che il focus sia sul
'che precede il controllo prima dell'esecuzione del codice (schede della prima riga su
'assunto controllo).
'************************************************* ****************************
Sub SetColourSelector (ByVal iColour As Inger)
Dim iKey As Intero
SendKeys "{TAB}"
SendKeys "{HOME}"
Per iKey = 1 a iColour
SendKeys "{DOWN}"
Il prossimo iKey
End Sub
'************************************************* ****************************
'AddinInstance_OnConnection Sub
'------------------------------------------------- ----------------------------
"DESCRIZIONE:
'Questo metodo viene eseguito quando il componente aggiuntivo viene caricato dall'IDE
'************************************************* ****************************
Private Sub AddinInstance_OnConnection (Applicazione ByVal come oggetto, ByVal ConnectMode Come AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst Come oggetto, custom () Come variante)
On Error Vai a ErrorHandler
'salva l'istanza vb
Imposta VBInstance = Applicazione
Se ConnectMode ext_cm_External Quindi
Imposta mcbMenuCommandBar = AddToAddInCommandBar ("Colorazione del codice VB6")
'affondare l'evento
Set Me.MenuHandler = VBInstance.Events.CommandBarEvents (mcbMenuCommandBar)
Dim oStdToolbar come Office.CommandBar
Dim oStdToolbarItem As Office.CommandBarControl
Impostare oStdToolbar = VBInstance.CommandBars ("Standard")
Set oStdToolbarItem = oStdToolbar.Controls.Add (Type: = msoControlButton)
oStdToolbarItem.Style = msoButtonCaption
oStdToolbarItem.Caption = "Imposta colori IDE"
oStdToolbarItem.BeginGroup = True
Set Me.MenuHandler2 = VBInstance.Events.CommandBarEvents (oStdToolbarItem)
Finisci se
Esci da Sub
ErrorHandler:
MsgBox Err.Description
End Sub
'************************************************* ****************************
'AddinInstance_OnDisconnection Sub
'------------------------------------------------- ----------------------------
"DESCRIZIONE:
'Questo metodo viene eseguito quando il componente aggiuntivo viene rimosso dall'IDE e ne pulisce uno qualsiasi
"riferimenti ecc.
'************************************************* ****************************
Private AddinInstance_OnDisconnection (ByVal RemoveMode As AddInDesignerObjects.ext_DisconnectMode, custom () As Variant)
In caso di errore Riprendi Successivo
'elimina la voce della barra dei comandi
mcbMenuCommandBar.Delete
'chiudere il componente aggiuntivo
Se viene visualizzato Form quindi
SaveSetting App.Title, "Settings", "DisplayOnConnect", "1"
FormDisplayed = False
Altro
SaveSetting App.Title, "Settings", "DisplayOnConnect", "0"
Finisci se
Scarica mfrmAddIn
Impostare mfrmAddIn = Nothing
Set MenuHandler = Nothing
Set MenuHandler2 = Nothing
End Sub
'************************************************* ****************************
'MenuHandler_Click Sub
'------------------------------------------------- ----------------------------
"DESCRIZIONE:
'Questo metodo esegue le attività necessarie quando si fa clic sulla voce di menu.
'************************************************* ****************************
Sottomenu privatoHandler_Click (ByVal CommandBarControl come oggetto, gestito come booleano, CancelDefault come booleano)
RunScript
End Sub
'************************************************* ****************************
'MenuHandler2_Click Sub
'------------------------------------------------- ----------------------------
"DESCRIZIONE:
'Questo metodo esegue le attività necessarie quando si fa clic sul pulsante della barra degli strumenti.
'************************************************* ****************************
Sottomenu privatoHandler2_Click (ByVal CommandBarControl come oggetto, gestito come booleano, CancelDefault come booleano)
RunScript
End Sub
'************************************************* ****************************
'AddToAddInCommandBar Sub
'------------------------------------------------- ----------------------------
"DESCRIZIONE:
'Aggiunge l'elemento specificato all'elenco dei menu.
'************************************************* ****************************
Funzione AddToAddInCommandBar (sCaption As String) As Office.CommandBarControl
Dim cbMenuCommandBar Come oggetto della barra dei comandi di Office.CommandBarControl '
Dim cbMenu As Object
In caso di errore Riprendi Successivo
'vedere se riusciamo a trovare il menu dei componenti aggiuntivi
Set cbMenu = VBInstance.CommandBars ("Componenti aggiuntivi")
Se cbMenu non è niente allora
'non disponibile, quindi falliamo
Esci dalla funzione
Finisci se
On Error Vai a ErrorHandler
'aggiungilo alla barra dei comandi
Set cbMenuCommandBar = cbMenu.Controls.Add (1)
'imposta la didascalia
cbMenuCommandBar.Caption = sCaption
Impostare AddToAddInCommandBar = cbMenuCommandBar
Esci dalla funzione
ErrorHandler:
'Esci con grazia
Fine funzione
Questo codice consente all'applicazione di leggere i colori che desidero da un file che risiede nella stessa directory del .dll (chiamato VB6CodeColours.dat). Questo file contiene quanto segue (e varierà in base ai colori che sostituisci nel VB6.EXE, quindi una copia e incolla diretta probabilmente non funzioneranno.
0,14,12,0
1,0,0,0
2,16,13,0
3,0,15,15
4,16,5,5
5,7,12,0
6,11,12,0
7,8,12,0
8,16,10,10
9,16,3,3
Sembra incomprensibile, ma ti spiego. Ha il formato "Codice colore", "Primo piano", "Sfondo", Indicatore ", quindi la riga superiore imposterà il" Testo normale "sul 14 ° elemento nella combo per Primo piano, il 12 ° per Sfondo e il 1 ° per l'indicatore .
Perché ho detto che è una soluzione piuttosto grezza: * Utilizza SendKeys. Non ne ho bisogno di ulteriori spiegazioni :) * L'utente deve fare clic sull'opzione menu / barra degli strumenti per rendere effettiva. * Il codice non è meglio strutturato (secondo me) ma era basato sulla quantità di tempo che potevo dedicare ad esso in quel momento. Mi propongo di migliorarlo in futuro, ma funziona bene per me nello stato attuale (quindi probabilmente lo lascerò!)
Forse con una base, qualcuno può espanderci ulteriormente.