Tomando a isca da resposta de dnissley (onde ele pergunta se alguém poderia criar um suplemento), eu criei um suplemento para o VB6. É um pouco grosseiro (e vou explicar o porquê em breve), mas faz o trabalho.
Criei um novo projeto de suplemento no VB6, que me forneceu o formulário "frmAddin" padrão (que não uso) e o designer "Connect". Eu adicionei uma classe Color, que contém o seguinte:
Opção explícita
Dim m_iForeColour As Inteiro
Dim m_iBackColour As Inteiro
Dim m_iIndicatorColour As Inteiro
Propriedade pública Let ForeColour (ByVal iID como Inteiro)
m_iForeColour = iID
Propriedade final
Propriedade pública Get ForeColour () As Inteiro
ForeColour = m_iForeColour
Propriedade final
Propriedade pública Let BackColour (ByVal iID como inteiro)
m_iBackColour = IDI
Propriedade final
Propriedade pública Get BackColour () As Inteiro
BackColour = m_iBackColour
Propriedade final
Propriedade pública Let IndicatorColour (ByVal iID como Inteiro)
m_iIndicatorColour = iID
Propriedade final
Propriedade pública Get IndicatorColour () As Inteiro
IndicatorColour = m_iIndicatorColour
Propriedade final
E então alterei o código no Designer "Connect" da seguinte forma:
Opção explícita
Public FormDisplayed As Boolean
VBInstance público como VBIDE.VBE
Dim mcbMenuCommandBar As Office.CommandBarControl
Dim mfrmAddIn As New frmAddIn
Public WithEvents MenuHandler Como o manipulador de eventos da barra de comandos CommandBarEvents
Dim mcbToolbar As Office.CommandBarControl
Public WithEvents MenuHandler2 Como CommandBarEvents
Dim colorColours () As Color
'************************************************* ****************************
'RunScript Sub
'------------------------------------------------- ----------------------------
' DESCRIÇÃO:
'Executa o código que define as cores necessárias para a janela de código no
'IDE ativo.
'*** UM PROJETO DEVE SER CARREGADO ANTES DE DAR TRABALHO REALMENTE ***
'************************************************* ****************************
Sub RunScript ()
ReadColoursFile
'Selecione Ferramentas> Opções
Teclas Send "% para", 5
'Vá para as guias, selecione "Opções"
Teclas de envio "+ {TAB}"
Teclas de envio "{DIREITA}"
'Selecionar caixa de listagem
Teclas de envio "{TAB}"
Dimensionar como cor
Dim iColour As Inteiro
Para iColour = 0 a 9
SetColours iColour, codeColours (iColour)
Próximo iColour
Teclas de envio "~"
End Sub
'************************************************* ****************************
'ReadColoursFile Sub
'------------------------------------------------- ----------------------------
' DESCRIÇÃO:
'Lê o arquivo colorido do disco e preenche a matriz codeColours que
'é usado pelos métodos SetColour * para selecionar as cores corretas
'a tela de opções.
'************************************************* ****************************
Sub ReadColoursFile ()
Linha As String
Dim colourArray () como String
Dimensionar como cor
Dim oFSO As FileSystemObject
Defina oFSO = New FileSystemObject
Caso contrário, oFSO.FileExists (App.Path & "\ VB6CodeColours.dat")
MsgBox "VB6CodeColours.dat não encontrado em" & App.Path, vbOKOnly, "Arquivo de configurações do VB6CodeColours não encontrado!"
Sair do Sub
Fim se
Definir oFSO = Nothing
Abra App.Path e "\ VB6CodeColours.dat" para entrada como nº 1
Código ReDimCores (9) Como Cor
Embora não seja EOF (1)
Entrada de linha # 1, colourLine
colourArray = Dividir (colourLine, ",")
Se IsNumeric (colourArray (0)), então
Se codeColours (colourArray (0)) for Nothing Then
Definir colourSetting = Nova cor
Se IsNumeric (colourArray (1)), então
colourSetting.ForeColour = CInt (colourArray (1))
Fim se
Se IsNumeric (colourArray (2)), então
colourSetting.BackColour = CInt (colourArray (2))
Fim se
Se IsNumeric (colourArray (3)), então
colourSetting.IndicatorColour = CInt (colourArray (3))
Fim se
Definir codeColours (colourArray (0)) = colourSetting
Fim se
Fim se
Wend
Fechar # 1
Definir colourSetting = Nothing
End Sub
'************************************************* ****************************
'SetColours Sub
'------------------------------------------------- ----------------------------
' DESCRIÇÃO:
'Seleciona o item de cor da lista e itera o seletor de cores
'controla associado a esse item e os define de acordo com os valores
definido no arquivo VB6CodeColours.dat.
'************************************************* ****************************
Sub SetColours (ByVal iColour As Inteiro, ByRef colourSetting As Color)
Dim iKey As Inteiro
Teclas de envio "{HOME}"
Para iKey = 1 Para iColour
Teclas de envio "{DOWN}"
Próximo iKey
SetColourSelector colourSetting.ForeColour
SetColourSelector colourSetting.BackColour
SetColourSelector colourSetting.IndicatorColour
Teclas de envio "+ {TAB}"
Teclas de envio "+ {TAB}"
Teclas de envio "+ {TAB}"
End Sub
'************************************************* ****************************
'SetColourSelector Sub
'------------------------------------------------- ----------------------------
' DESCRIÇÃO:
'Define a cor no combo do seletor. Assume que o foco está no
'precede o controle antes da execução do código (guias da primeira linha do
controle assumido).
'************************************************* ****************************
Sub SetColourSelector (ByVal iColour As Inteiro)
Dim iKey As Inteiro
Teclas de envio "{TAB}"
Teclas de envio "{HOME}"
Para iKey = 1 Para iColour
Teclas de envio "{DOWN}"
Próximo iKey
End Sub
'************************************************* ****************************
'AddinInstance_OnConnection Sub
'------------------------------------------------- ----------------------------
' DESCRIÇÃO:
'Este método é executado quando o suplemento é carregado pelo IDE
'************************************************* ****************************
Sub privado AddinInstance_OnConnection (aplicativo ByVal como objeto, ByVal ConnectMode como AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst como objeto, custom () como variante)
Em erro GoTo ErrorHandler
'salve a instância vb
Defina VBInstance = Aplicativo
Se o ConnectMode ext_cm_External Then
Definir mcbMenuCommandBar = AddToAddInCommandBar ("Coloração de código VB6")
afundar o evento
Defina Me.MenuHandler = VBInstance.Events.CommandBarEvents (mcbMenuCommandBar)
Dim oStdToolbar As Office.CommandBar
Dim oStdToolbarItem As Office.CommandBarControl
Defina oStdToolbar = VBInstance.CommandBars ("Standard")
Defina oStdToolbarItem = oStdToolbar.Controls.Add (Tipo: = msoControlButton)
oStdToolbarItem.Style = msoButtonCaption
oStdToolbarItem.Caption = "Definir cores do IDE"
oStdToolbarItem.BeginGroup = True
Defina Me.MenuHandler2 = VBInstance.Events.CommandBarEvents (oStdToolbarItem)
Fim se
Sair do Sub
ErrorHandler:
MsgBox Err.Description
End Sub
'************************************************* ****************************
'AddinInstance_OnDisconnection Sub
'------------------------------------------------- ----------------------------
' DESCRIÇÃO:
'Este método é executado quando o suplemento é removido pelo IDE e limpa qualquer
'referências etc.
'************************************************* ****************************
Sub privado AddinInstance_OnDisconnection (ByVal RemoveMode As AddInDesignerObjects.ext_DisconnectMode, custom () As Variant)
Em erro, retomar em seguida
'exclua a entrada da barra de comando
mcbMenuCommandBar.Delete
'desligue o suplemento
Se FormDisplayed Then
Título do aplicativo SaveSetting, "Configurações", "DisplayOnConnect", "1"
FormDisplayed = False
Outro
SaveSetting App.Title, "Configurações", "DisplayOnConnect", "0"
Fim se
Descarregar mfrmAddIn
Defina mfrmAddIn = Nothing
Definir MenuHandler = Nada
Definir MenuHandler2 = Nada
End Sub
'************************************************* ****************************
'MenuHandler_Click Sub
'------------------------------------------------- ----------------------------
' DESCRIÇÃO:
'Este método executa as tarefas necessárias quando o item de menu é clicado.
'************************************************* ****************************
Private Sub MenuHandler_Click (ByVal CommandBarControl como objeto, manipulado como booleano, CancelDefault como booleano)
RunScript
End Sub
'************************************************* ****************************
'MenuHandler2_Click Sub
'------------------------------------------------- ----------------------------
' DESCRIÇÃO:
'Este método executa as tarefas necessárias quando o botão da barra de ferramentas é clicado.
'************************************************* ****************************
Sub-MenuHandler2_Click privado (ByVal CommandBarControl como objeto, tratado como booleano, CancelDefault como booleano)
RunScript
End Sub
'************************************************* ****************************
'AddToAddInCommandBar Sub
'------------------------------------------------- ----------------------------
' DESCRIÇÃO:
'Adiciona o item especificado à lista de menus.
'************************************************* ****************************
Função AddToAddInCommandBar (sCaption As String) Como Office.CommandBarControl
Dim cbMenuCommandBar As Office.CommandBarControl 'objeto da barra de comando
Dim cbMenu como objeto
Em erro, retomar em seguida
'veja se conseguimos encontrar o menu Add-Ins
Defina cbMenu = VBInstance.CommandBars ("Suplementos")
Se cbMenu não for nada, então
'não disponível, então falhamos
Função de saída
Fim se
Em erro GoTo ErrorHandler
'adicione-o à barra de comando
Definir cbMenuCommandBar = cbMenu.Controls.Add (1)
'defina a legenda
cbMenuCommandBar.Caption = sCaption
Definir AddToAddInCommandBar = cbMenuCommandBar
Função de saída
ErrorHandler:
Saia graciosamente
Função final
Esse código permite que o aplicativo leia as cores que eu quero de um arquivo que reside no mesmo diretório que o .dll (chamado VB6CodeColours.dat). Este arquivo contém o seguinte (e variará de acordo com as cores que você substituir no VB6.EXE, portanto, uma cópia e colagem direta provavelmente não funcionará.
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
Parece bobagem, mas eu vou explicar. Ele tem o formato "Cor do código", "Primeiro plano", "Plano de fundo", Indicador ", de modo que a linha superior defina o" Texto normal "para o 14º item do combo em Primeiro plano, o 12º para segundo plano e o 1º para o indicador .
Por que eu disse que é uma solução bastante grosseira: * Ele usa SendKeys. Não há mais explicações necessárias, tenho certeza :) * O usuário precisa clicar na opção de menu / barra de ferramentas para que ela entre em vigor. * O código não está melhor estruturado (na minha opinião), mas foi baseado na quantidade de tempo que eu poderia dedicar a ele no momento. Pretendo melhorá-lo no futuro, mas funciona bem para mim no estado atual (então provavelmente o deixarei!)
Talvez, com base, alguém possa expandir ainda mais.