En prenant l'appât de la réponse de dnissley (où il demande si quelqu'un pourrait faire un complément), j'ai fait un complément pour VB6. C'est un peu grossier (et je vais vous expliquer pourquoi sous peu), mais ça fait l'affaire.
J'ai créé un nouveau projet de complément dans VB6 qui m'a donné le formulaire par défaut "frmAddin" (que je n'utilise pas) et le concepteur "Connect". J'ai moi-même ajouté une classe Color qui contient les éléments suivants:
Option explicite
Dim m_iForeColour As Integer
Dim m_iBackColour As Integer
Dim m_iIndicatorColour As Integer
Propriété publique Let ForeColour (ByVal iID As Integer)
m_iForeColour = iID
Propriété de fin
Propriété publique Get ForeColour () As Integer
ForeColour = m_iForeColour
Propriété de fin
Propriété publique Let BackColour (ByVal iID As Integer)
m_iBackColour = iID
Propriété de fin
Propriété publique Get BackColour () As Integer
BackColour = m_iBackColour
Propriété de fin
Propriété publique Let IndicatorColour (ByVal iID As Integer)
m_iIndicatorColour = iID
Propriété de fin
Propriété publique Get IndicatorColour () As Integer
IndicatorColour = m_iIndicatorColour
Propriété de fin
Et puis j'ai modifié le code dans le concepteur "Connect" comme suit:
Option explicite
Formulaire public affiché comme booléen
VBInstance publique comme VBIDE.VBE
Dim mcbMenuCommandBar As Office.CommandBarControl
Dim mfrmAddIn As New frmAddIn
Public WithEvents MenuHandler As CommandBarEvents: gestionnaire d'événements de la barre de commandes
Dim mcbToolbar As Office.CommandBarControl
Public WithEvents MenuHandler2 As CommandBarEvents
Dim codeCouleurs () comme couleur
«************************************************* ****************************
«RunScript Sub
«------------------------------------------------- ----------------------------
' LA DESCRIPTION:
'Exécute le code qui définit les couleurs requises pour la fenêtre de code dans le
'IDE actif.
'*** UN PROJET DOIT ÊTRE CHARGÉ AVANT QUE CELA FONCTIONNE RÉELLEMENT ***
«************************************************* ****************************
Sous RunScript ()
ReadColoursFile
'Sélectionnez Outils> Options
SendKeys "% to", 5
'Allez dans les onglets, sélectionnez "Options"
SendKeys "+ {TAB}"
SendKeys "{RIGHT}"
'Sélectionner la zone de liste
SendKeys "{TAB}"
Couleur sombreDéfinir comme couleur
Dim iColour As Integer
Pour iColour = 0 à 9
SetColours iColour, codeColours (iColour)
Next iColour
SendKeys "~"
End Sub
«************************************************* ****************************
'ReadColoursFile Sub
«------------------------------------------------- ----------------------------
' LA DESCRIPTION:
'Lit le fichier couleur à partir du disque et remplit le tableau codeColours qui
'est utilisé par les méthodes SetColour * pour sélectionner les bonnes couleurs
'l'écran des options.
«************************************************* ****************************
Sub ReadColoursFile ()
Dim colourLine As String
Dim colourArray () As String
Couleur sombreDéfinir comme couleur
Dim oFSO As FileSystemObject
Définir oFSO = New FileSystemObject
Si non oFSO.FileExists (App.Path & "\ VB6CodeColours.dat") Alors
MsgBox "VB6CodeColours.dat introuvable dans" & App.Path, vbOKOnly, "Fichier de paramètres VB6CodeColours introuvable!"
Quitter sous
Fin si
Définir oFSO = rien
Ouvrez App.Path & "\ VB6CodeColours.dat" pour l'entrée As # 1
Code ReDim Couleurs (9) Comme couleur
Bien que pas EOF (1)
Entrée ligne # 1, colourLine
colourArray = Split (colourLine, ",")
Si IsNumeric (colourArray (0)) Then
Si codeColours (colourArray (0)) n'est rien alors
Définir colourSetting = Nouvelle couleur
Si IsNumeric (colourArray (1)) Alors
colourSetting.ForeColour = CInt (colourArray (1))
Fin si
Si IsNumeric (colourArray (2)) Alors
colourSetting.BackColour = CInt (colourArray (2))
Fin si
Si IsNumeric (colourArray (3)) Alors
colourSetting.IndicatorColour = CInt (colourArray (3))
Fin si
Définir codeColours (colourArray (0)) = colourSetting
Fin si
Fin si
Wend
Fermer # 1
Définir colourSetting = Rien
End Sub
«************************************************* ****************************
«SetColours Sub
«------------------------------------------------- ----------------------------
' LA DESCRIPTION:
'Sélectionne l'élément de couleur dans la liste, puis itère le sélecteur de couleur
'contrôles associés à cet élément et les définit en fonction des valeurs
'défini dans le fichier VB6CodeColours.dat.
«************************************************* ****************************
Sub SetColours (ByVal iColour As Integer, ByRef colourSetting As Color)
Dim iKey As Integer
SendKeys "{HOME}"
Pour iKey = 1 à iColour
SendKeys "{DOWN}"
Suivant iKey
SetColourSelector colourSetting.ForeColour
SetColourSelector colourSetting.BackColour
SetColourSelector colourSetting.IndicatorColour
SendKeys "+ {TAB}"
SendKeys "+ {TAB}"
SendKeys "+ {TAB}"
End Sub
«************************************************* ****************************
'SetColourSelector Sub
«------------------------------------------------- ----------------------------
' LA DESCRIPTION:
'Définit la couleur dans le combo de sélecteur. Suppose que l'accent est mis sur
'précédant le contrôle avant l'exécution du code (onglets de la première ligne
'contrôle supposé).
«************************************************* ****************************
Sub SetColourSelector (ByVal iColour As Integer)
Dim iKey As Integer
SendKeys "{TAB}"
SendKeys "{HOME}"
Pour iKey = 1 à iColour
SendKeys "{DOWN}"
Suivant iKey
End Sub
«************************************************* ****************************
'AddinInstance_OnConnection Sub
«------------------------------------------------- ----------------------------
' LA DESCRIPTION:
'Cette méthode s'exécute lorsque le complément est chargé par l'IDE
«************************************************* ****************************
Private Sub AddinInstance_OnConnection (ByVal Application As Object, ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst As Object, custom () As Variant)
En cas d'erreur GoTo ErrorHandler
'enregistrer l'instance vb
Définir VBInstance = Application
Si ConnectMode ext_cm_External Alors
Définir mcbMenuCommandBar = AddToAddInCommandBar ("Coloration du code VB6")
'couler l'événement
Définissez Me.MenuHandler = VBInstance.Events.CommandBarEvents (mcbMenuCommandBar)
Dim oStdToolbar As Office.CommandBar
Dim oStdToolbarItem As Office.CommandBarControl
Définissez oStdToolbar = VBInstance.CommandBars ("Standard")
Définissez oStdToolbarItem = oStdToolbar.Controls.Add (Type: = msoControlButton)
oStdToolbarItem.Style = msoButtonCaption
oStdToolbarItem.Caption = "Définir les couleurs IDE"
oStdToolbarItem.BeginGroup = True
Définissez Me.MenuHandler2 = VBInstance.Events.CommandBarEvents (oStdToolbarItem)
Fin si
Quitter sous
ErrorHandler:
MsgBox Err.Description
End Sub
«************************************************* ****************************
'AddinInstance_OnDisconnection Sub
«------------------------------------------------- ----------------------------
' LA DESCRIPTION:
«Cette méthode s'exécute lorsque l'add-in est supprimé par l'IDE et nettoie tout
«références etc.
«************************************************* ****************************
Private Sub AddinInstance_OnDisconnection (ByVal RemoveMode As AddInDesignerObjects.ext_DisconnectMode, custom () As Variant)
En cas d'erreur Reprendre ensuite
'supprimer l'entrée de la barre de commandes
mcbMenuCommandBar.Delete
'fermez le complément
Si FormDisplayed Alors
SaveSetting App.Title, "Paramètres", "DisplayOnConnect", "1"
FormDisplayed = False
Autre
SaveSetting App.Title, "Paramètres", "DisplayOnConnect", "0"
Fin si
Décharger mfrmAddIn
Set mfrmAddIn = Nothing
Set MenuHandler = Nothing
Set MenuHandler2 = Nothing
End Sub
«************************************************* ****************************
'MenuHandler_Click Sub
«------------------------------------------------- ----------------------------
' LA DESCRIPTION:
'Cette méthode effectue les tâches nécessaires lorsque l'utilisateur clique sur l'élément de menu.
«************************************************* ****************************
Private Sub MenuHandler_Click (ByVal CommandBarControl As Object, géré comme booléen, CancelDefault comme booléen)
Script de lancement
End Sub
«************************************************* ****************************
'MenuHandler2_Click Sub
«------------------------------------------------- ----------------------------
' LA DESCRIPTION:
'Cette méthode effectue les tâches nécessaires lorsque vous cliquez sur le bouton de la barre d'outils.
«************************************************* ****************************
Private Sub MenuHandler2_Click (ByVal CommandBarControl As Object, géré comme booléen, CancelDefault comme booléen)
Script de lancement
End Sub
«************************************************* ****************************
'AddToAddInCommandBar Sub
«------------------------------------------------- ----------------------------
' LA DESCRIPTION:
'Ajoute l'élément spécifié à la liste des menus.
«************************************************* ****************************
Fonction AddToAddInCommandBar (sCaption As String) As Office.CommandBarControl
Dim cbMenuCommandBar As Office.CommandBarControl 'objet de barre de commandes
Dim cbMenu As Object
En cas d'erreur Reprendre ensuite
'voir si nous pouvons trouver le menu des compléments
Définissez cbMenu = VBInstance.CommandBars ("compléments")
Si cbMenu n'est rien alors
'non disponible donc nous échouons
Fonction de sortie
Fin si
En cas d'erreur GoTo ErrorHandler
'ajoutez-le à la barre de commandes
Définissez cbMenuCommandBar = cbMenu.Controls.Add (1)
'mettre la légende
cbMenuCommandBar.Caption = sCaption
Définissez AddToAddInCommandBar = cbMenuCommandBar
Fonction de sortie
ErrorHandler:
«Sortez gracieusement
Fonction de fin
Ce code permet à l'application de lire les couleurs que je veux à partir d'un fichier qui réside dans le même répertoire que le .dll (appelé VB6CodeColours.dat). Ce fichier contient les éléments suivants (et il variera en fonction des couleurs que vous remplacez dans le VB6.EXE, donc un simple copier-coller ne fonctionnera probablement pas.
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
On dirait du charabia, mais je vais t'expliquer. Il a le format "Code Color", "Foreground", "Background", Indicator "de sorte que la ligne supérieure définira le" Normal Text "sur le 14ème élément du combo pour le premier plan, le 12 pour le fond et le 1er pour l'indicateur .
Pourquoi j'ai dit que c'était une solution assez brute: * Il utilise SendKeys. Aucune autre explication n'est nécessaire là, je suis sûr :) * L'utilisateur doit cliquer sur l'option menu / barre d'outils pour qu'elle prenne effet. * Le code n'est pas le mieux structuré (à mon avis) mais était basé sur le temps que je pouvais y consacrer à l'époque. Je vise à l'améliorer à l'avenir, mais cela fonctionne bien pour moi dans l'état actuel (donc je vais probablement le laisser!)
Peut-être avec une base, quelqu'un peut-il développer davantage.