Tomando el anzuelo de la respuesta de dnissley (donde pregunta si alguien podría hacer un complemento), hice un complemento para VB6. Es un poco crudo (y explicaré por qué en breve), pero hace el trabajo.
Creé un nuevo proyecto de Complemento en VB6 que me dio la forma predeterminada "frmAddin" (que no uso) y el diseñador "Connect". Yo mismo agregué una clase de Color que contiene lo siguiente:
Opción explícita
Dim m_iForeColour As Integer
Dim m_iBackColour As Integer
Dim m_iIndicatorColour As Integer
Propiedad pública Let ForeColour (ByVal iID As Integer)
m_iForeColour = iID
Terminar propiedad
Propiedad pública Obtenga ForeColour () como entero
ForeColour = m_iForeColour
Terminar propiedad
Propiedad pública Let BackColour (ByVal iID As Integer)
m_iBackColour = iID
Terminar propiedad
Propiedad pública Get BackColour () como entero
Color de fondo = m_iBackColour
Terminar propiedad
Propiedad pública Let IndicaColour (ByVal iID As Integer)
m_iIndicatorColour = iID
Terminar propiedad
Propiedad pública Obtener IndicatorColour () como entero
IndicatorColour = m_iIndicatorColour
Terminar propiedad
Y luego modifiqué el código en el Diseñador "Connect" para que sea el siguiente:
Opción explícita
Formulario público Se muestra como booleano
VBInstance público como VBIDE.VBE
Dim mcbMenuCommandBar As Office.CommandBarControl
Dim mfrmAddIn como nuevo frmAddIn
Public WithEvents MenuHandler como controlador de eventos de la barra de comandos de CommandBarEvents
Dim mcbToolbar As Office.CommandBarControl
Public WithEvents MenuHandler2 As CommandBarEvents
Dim codeColours () As Color
'************************************************* ****************************
'RunScript Sub
'------------------------------------------------- ----------------------------
'DESCRIPCIÓN:
'Ejecuta el código que establece los colores requeridos para la ventana de código en el
'IDE activo.
'*** UN PROYECTO DEBE SER CARGADO ANTES DE QUE REALMENTE FUNCIONE ***
'************************************************* ****************************
Sub RunScript ()
ReadColoursFile
'Seleccione Herramientas> Opciones
SendKeys "% to", 5
'Vaya a pestañas, seleccione "Opciones"
SendKeys "+ {TAB}"
SendKeys "{DERECHA}"
'Seleccionar cuadro de lista
SendKeys "{TAB}"
Color tenue Configuración como color
Dim iColour como entero
Para iColour = 0 a 9
SetColours iColour, codeColours (iColour)
Siguiente iColour
SendKeys "~"
End Sub
'************************************************* ****************************
'ReadColoursFile Sub
'------------------------------------------------- ----------------------------
'DESCRIPCIÓN:
'Lee el archivo de color del disco y llena la matriz codeColours que
'es utilizado por los métodos SetColour * para seleccionar los colores correctos de
'la pantalla de opciones.
'************************************************* ****************************
Sub ReadColoursFile ()
Color tenue Línea como cuerda
Dim colourArray () como cadena
Color tenue Configuración como color
Dim oFSO como FileSystemObject
Establecer oFSO = New FileSystemObject
Si no es oFSO.FileExists (App.Path & "\ VB6CodeColours.dat") Entonces
MsgBox "VB6CodeColours.dat no encontrado en" & App.Path, vbOKOnly, "¡No se encontró el archivo de configuración VB6CodeColours!
Salir Sub
Terminara si
Establecer oFSO = Nada
Abra App.Path y "\ VB6CodeColours.dat" para la entrada como # 1
ReDim codeColours (9) como color
Aunque no es EOF (1)
Entrada de línea n. ° 1, colorLínea
colourArray = Split (colourLine, ",")
If IsNumeric (colourArray (0)) Entonces
Si codeColours (colourArray (0)) no es nada entonces
Establecer colourSetting = Nuevo color
If IsNumeric (colourArray (1)) Entonces
colourSetting.ForeColour = CInt (colourArray (1))
Terminara si
If IsNumeric (colourArray (2)) Entonces
colourSetting.BackColour = CInt (colourArray (2))
Terminara si
If IsNumeric (colourArray (3)) Entonces
colourSetting.IndicatorColour = CInt (colourArray (3))
Terminara si
Establecer codeColours (colourArray (0)) = colourSetting
Terminara si
Terminara si
Encaminarse a
Cerrar # 1
Establecer colourSetting = Nada
End Sub
'************************************************* ****************************
'SetColours Sub
'------------------------------------------------- ----------------------------
'DESCRIPCIÓN:
'Selecciona el elemento de color de la lista y luego itera el selector de color
'controles asociados con ese elemento y los establece de acuerdo con los valores
'establecido en el archivo VB6CodeColours.dat.
'************************************************* ****************************
Sub SetColours (ByVal iColour As Integer, ByRef colourSetting As Color)
Dim iKey como entero
SendKeys "{HOME}"
Para iKey = 1 a iColour
SendKeys "{DOWN}"
Siguiente iKey
SetColourSelector colourSetting.ForeColour
SetColourSelector colourSetting.BackColour
SetColourSelector colourSetting.IndicatorColour
SendKeys "+ {TAB}"
SendKeys "+ {TAB}"
SendKeys "+ {TAB}"
End Sub
'************************************************* ****************************
'SetColourSelector Sub
'------------------------------------------------- ----------------------------
'DESCRIPCIÓN:
'Establece el color en el combo selector. Asume que el foco está en el
'precede al control antes de ejecutar el código (pestañas de primera línea para
'control asumido).
'************************************************* ****************************
Sub SetColourSelector (ByVal iColour As Integer)
Dim iKey como entero
SendKeys "{TAB}"
SendKeys "{HOME}"
Para iKey = 1 a iColour
SendKeys "{DOWN}"
Siguiente iKey
End Sub
'************************************************* ****************************
'AddinInstance_OnConnection Sub
'------------------------------------------------- ----------------------------
'DESCRIPCIÓN:
'Este método se ejecuta cuando el complemento es cargado por el IDE
'************************************************* ****************************
Private Sub AddinInstance_OnConnection (aplicación ByVal como objeto, ByVal ConnectMode como AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst como objeto, personalizado () como variante)
En error GoTo ErrorHandler
'guardar la instancia de vb
Establecer VBInstance = Aplicación
Si ConnectMode ext_cm_External entonces
Establecer mcbMenuCommandBar = AddToAddInCommandBar ("Coloración de código VB6")
'hundir el evento
Establecer Me.MenuHandler = VBInstance.Events.CommandBarEvents (mcbMenuCommandBar)
Dim oStdToolbar As Office.CommandBar
Dim oStdToolbarItem As Office.CommandBarControl
Establecer oStdToolbar = VBInstance.CommandBars ("Estándar")
Establecer oStdToolbarItem = oStdToolbar.Controls.Add (Tipo: = msoControlButton)
oStdToolbarItem.Style = msoButtonCaption
oStdToolbarItem.Caption = "Establecer colores IDE"
oStdToolbarItem.BeginGroup = True
Establecer Me.MenuHandler2 = VBInstance.Events.CommandBarEvents (oStdToolbarItem)
Terminara si
Salir Sub
ErrorHandler:
MsgBox Err.Description
End Sub
'************************************************* ****************************
'AddinInstance_OnDisconnection Sub
'------------------------------------------------- ----------------------------
'DESCRIPCIÓN:
'Este método se ejecuta cuando el complemento es eliminado por el IDE y limpia cualquier
'referencias etc.
'************************************************* ****************************
Private Sub AddinInstance_OnDisconnection (ByVal RemoveMode As AddInDesignerObjects.ext_DisconnectMode, custom () Como Variante)
En error Reanudar a continuación
'eliminar la entrada de la barra de comandos
mcbMenuCommandBar.Delete
'apague el complemento
Si se muestra el formulario entonces
SaveSetting App.Title, "Configuración", "DisplayOnConnect", "1"
FormDisplayed = False
Más
SaveSetting App.Title, "Configuración", "DisplayOnConnect", "0"
Terminara si
Descargar mfrmAddIn
Establecer mfrmAddIn = Nada
Establecer MenuHandler = Nada
Establecer MenuHandler2 = Nada
End Sub
'************************************************* ****************************
'MenuHandler_Click Sub
'------------------------------------------------- ----------------------------
'DESCRIPCIÓN:
'Este método realiza las tareas necesarias cuando se hace clic en el elemento del menú.
'************************************************* ****************************
Private Sub MenuHandler_Click (ByVal CommandBarControl As Object, manejado como Boolean, CancelDefault As Boolean)
Ejecutar guión
End Sub
'************************************************* ****************************
'MenuHandler2_Click Sub
'------------------------------------------------- ----------------------------
'DESCRIPCIÓN:
'Este método realiza las tareas necesarias cuando se hace clic en el botón de la barra de herramientas.
'************************************************* ****************************
Private Sub MenuHandler2_Click (ByVal CommandBarControl As Object, manejado como Boolean, CancelDefault As Boolean)
Ejecutar guión
End Sub
'************************************************* ****************************
'AddToAddInCommandBar Sub
'------------------------------------------------- ----------------------------
'DESCRIPCIÓN:
'Agrega el elemento especificado a la lista del menú.
'************************************************* ****************************
Función AddToAddInCommandBar (sCaption As String) como Office.CommandBarControl
Dim cbMenuCommandBar como objeto de barra de comandos de Office.CommandBarControl
Dim cbMenu As Object
En error Reanudar a continuación
'ver si podemos encontrar el menú Complementos
Establecer cbMenu = VBInstance.CommandBars ("Complementos")
Si cbMenu no es nada entonces
'no disponible así que fallamos
Función de salida
Terminara si
En error GoTo ErrorHandler
'agregarlo a la barra de comandos
Establecer cbMenuCommandBar = cbMenu.Controls.Add (1)
'establecer el título
cbMenuCommandBar.Caption = sCaption
Establecer AddToAddInCommandBar = cbMenuCommandBar
Función de salida
ErrorHandler:
'Salir con gracia
Función final
Este código permite que la aplicación lea los colores que quiero de un archivo que reside en el mismo directorio que el .dll (llamado VB6CodeColours.dat). Este archivo contiene lo siguiente (y variará según los colores que reemplace en el VB6.EXE, por lo que una copia y pegado directo probablemente no funcione.
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 galimatías, pero te lo explicaré. Tiene el formato "Código de color", "Primer plano", "Fondo", Indicador ", por lo que la fila superior establecerá el" Texto normal "en el 14º elemento del combo para Primer plano, el 12º para Fondo y el 1º para el Indicador .
Por qué dije que es una solución bastante cruda: * Utiliza SendKeys. No necesito más explicaciones allí, estoy seguro :) * El usuario debe hacer clic en la opción del menú / barra de herramientas para que surta efecto. * El código no está mejor estructurado (en mi opinión) pero se basó en la cantidad de tiempo que podía dedicarle en ese momento. Mi objetivo es mejorarlo en el futuro, pero funciona bien para mí en el estado actual (¡así que probablemente lo dejaré!)
Quizás con una base, alguien puede ampliarlo aún más.