Ausgehend von Dnissleys Antwort (wo er fragt, ob jemand ein Add-In erstellen könnte) habe ich ein Add-In für VB6 erstellt. Es ist ein bisschen grob (und ich erkläre gleich, warum), aber es macht den Job.
Ich habe in VB6 ein neues Add-In-Projekt erstellt, das mir das Standardformular "frmAddin" (das ich nicht verwende) und den Designer "Connect" gab. Ich habe selbst eine Farbklasse hinzugefügt, die Folgendes enthält:
Option explizit
Dim m_iForeColour As Integer
Dim m_iBackColour As Integer
Dim m_iIndicatorColour As Integer
Öffentliche Eigenschaft Let ForeColour (ByVal iID As Integer)
m_iForeColour = iID
Eigenschaft beenden
Öffentliche Eigenschaft Get ForeColour () As Integer
ForeColour = m_iForeColour
Eigenschaft beenden
Öffentliche Eigenschaft Let BackColour (ByVal iID As Integer)
m_iBackColour = iID
Eigenschaft beenden
Öffentliche Eigenschaft Get BackColour () As Integer
BackColour = m_iBackColour
Eigenschaft beenden
Öffentliche Eigenschaft Let IndicatorColour (ByVal iID As Integer)
m_iIndicatorColour = iID
Eigenschaft beenden
Öffentliche Eigenschaft Get IndicatorColour () As Integer
IndicatorColour = m_iIndicatorColour
Eigenschaft beenden
Und dann habe ich den Code im "Connect" -Designer folgendermaßen geändert:
Option explizit
Öffentliches FormDisplayed As Boolean
Öffentliche VBInstance As VBIDE.VBE
Dim mcbMenuCommandBar As Office.CommandBarControl
Dim mfrmAddIn As New frmAddIn
Public WithEvents MenuHandler Als CommandBarEvents-Ereignisbehandlungsroutine für die Befehlsleiste
Dim mcbToolbar As Office.CommandBarControl
Public WithEvents MenuHandler2 As CommandBarEvents
Dim codeColours () As Color
'************************************************** ****************************
'RunScript Sub
'------------------------------------------------- ----------------------------
' BESCHREIBUNG:
'Führt den Code aus, mit dem die erforderlichen Farben für das Codefenster in der festgelegt werden
'aktive IDE.
"*** EIN PROJEKT MUSS GELADEN WERDEN, BEVOR ES WIRKLICH FUNKTIONIERT ***
'************************************************** ****************************
Sub RunScript ()
ReadColoursFile
'Wählen Sie Extras> Optionen
SendKeys "% to", 5
'Gehe zu den Registerkarten, wähle "Optionen"
SendKeys "+ {TAB}"
SendKeys "{RIGHT}"
'Listbox auswählen
SendKeys "{TAB}"
Dim colourSetting As Color
IColour As Integer dimen
Für iColour = 0 bis 9
SetColours iColour, CodeColours (iColour)
Nächste iColour
SendKeys "~"
End Sub
'************************************************** ****************************
'ReadColoursFile Sub
'------------------------------------------------- ----------------------------
' BESCHREIBUNG:
'Liest die Farbdatei von der Festplatte und füllt das codeColours-Array, das
'wird von den SetColour * -Methoden zur Auswahl der richtigen Farben aus verwendet
'den Optionsbildschirm.
'************************************************** ****************************
Unter ReadColoursFile ()
Dimmen Sie colourLine As String ab
Dim colourArray () As String
Dim colourSetting As Color
OFSO als FileSystemObject dimmen
Setzen Sie oFSO = New FileSystemObject
Wenn nicht, oFSO.FileExists (App.Path & "\ VB6CodeColours.dat") Then
MsgBox "VB6CodeColours.dat nicht gefunden in" & App.Path, vbOKOnly, "VB6CodeColours-Einstellungsdatei nicht gefunden!"
Sub beenden
End If
Setze oFSO = Nothing
Öffnen Sie App.Path & "\ VB6CodeColours.dat" für Eingabe als # 1
ReDim codeColours (9) Als Farbe
Während nicht EOF (1)
Line Input # 1, colourLine
colourArray = Split (colourLine, ",")
If IsNumeric (colourArray (0)) Then
Wenn codeColours (colourArray (0)) nichts ist, dann
Stellen Sie colourSetting = New Color ein
If IsNumeric (colourArray (1)) Then
colourSetting.ForeColour = CInt (colourArray (1))
End If
If IsNumeric (colourArray (2)) Then
colourSetting.BackColour = CInt (colourArray (2))
End If
If IsNumeric (colourArray (3)) Then
colourSetting.IndicatorColour = CInt (colourArray (3))
End If
Setze codeColours (colourArray (0)) = colourSetting
End If
End If
Wend
Schließen Sie # 1
Set colourSetting = Nothing
End Sub
'************************************************** ****************************
'SetColours Sub
'------------------------------------------------- ----------------------------
' BESCHREIBUNG:
'Wählt das Farbelement aus der Liste aus und iteriert dann die Farbauswahl
'steuert dieses Element und legt sie gemäß den Werten fest
'in der Datei VB6CodeColours.dat einstellen.
'************************************************** ****************************
Sub SetColours (ByVal iColour As Integer, ByRef colourSetting As Color)
IKey als Ganzzahl dimmen
SendKeys "{HOME}"
Für iKey = 1 bis iColour
SendKeys "{DOWN}"
Nächster iKey
SetColourSelector colourSetting.ForeColour
SetColourSelector colourSetting.BackColour
SetColourSelector colourSetting.IndicatorColour
SendKeys "+ {TAB}"
SendKeys "+ {TAB}"
SendKeys "+ {TAB}"
End Sub
'************************************************** ****************************
'SetColourSelector Sub
'------------------------------------------------- ----------------------------
' BESCHREIBUNG:
'Legt die Farbe in der Auswahlkombination fest. Angenommen, der Fokus liegt auf der
'vor der Kontrolle, bevor der Code ausgeführt wird (Tabulatoren in der ersten Zeile bis zum
übernommene Kontrolle).
'************************************************** ****************************
Sub SetColourSelector (ByVal iColour As Integer)
IKey als Ganzzahl dimmen
SendKeys "{TAB}"
SendKeys "{HOME}"
Für iKey = 1 bis iColour
SendKeys "{DOWN}"
Nächster iKey
End Sub
'************************************************** ****************************
'AddinInstance_OnConnection Sub
'------------------------------------------------- ----------------------------
' BESCHREIBUNG:
'Diese Methode wird ausgeführt, wenn das Add-In von der IDE geladen wird
'************************************************** ****************************
Private Sub AddinInstance_OnConnection (ByVal-Anwendung als Objekt, ByVal ConnectMode als AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst As Object, custom () als Variante)
On Error Gehe zu ErrorHandler
'speichere die vb instanz
Setzen Sie VBInstance = Application
Wenn ConnectMode ext_cm_External Dann
Set mcbMenuCommandBar = AddToAddInCommandBar ("VB6-Codefarbe")
versenken die Veranstaltung
Set Me.MenuHandler = VBInstance.Events.CommandBarEvents (mcbMenuCommandBar)
OStdToolbar abdunkeln Als Office.CommandBar
OStdToolbarItem als Office.CommandBarControl dimen
Set oStdToolbar = VBInstance.CommandBars ("Standard")
Setze oStdToolbarItem = oStdToolbar.Controls.Add (Typ: = msoControlButton)
oStdToolbarItem.Style = msoButtonCaption
oStdToolbarItem.Caption = "IDE-Farben festlegen"
oStdToolbarItem.BeginGroup = True
Set Me.MenuHandler2 = VBInstance.Events.CommandBarEvents (oStdToolbarItem)
End If
Sub beenden
ErrorHandler:
MsgBox Err.Description
End Sub
'************************************************** ****************************
'AddinInstance_OnDisconnection Sub
'------------------------------------------------- ----------------------------
' BESCHREIBUNG:
'Diese Methode wird ausgeführt, wenn das Add-In von der IDE entfernt und alle entfernt werden
Referenzen etc.
'************************************************** ****************************
Private Sub AddinInstance_OnDisconnection (ByVal RemoveMode As AddInDesignerObjects.ext_DisconnectMode, custom () As Variant)
On Error Resume Weiter
'Löschen Sie den Befehlsleisteneintrag
mcbMenuCommandBar.Delete
Fahren Sie das Add-In herunter
Wenn dann FormDisplayed
SaveSetting App.Title, "Einstellungen", "DisplayOnConnect", "1"
FormDisplayed = False
Sonst
SaveSetting App.Title, "Einstellungen", "DisplayOnConnect", "0"
End If
Entladen Sie mfrmAddIn
Setzen Sie mfrmAddIn = Nothing
Setzen Sie MenuHandler = Nothing
Set MenuHandler2 = Nothing
End Sub
'************************************************** ****************************
'MenuHandler_Click Sub
'------------------------------------------------- ----------------------------
' BESCHREIBUNG:
'Diese Methode führt die erforderlichen Aufgaben aus, wenn auf den Menüpunkt geklickt wird.
'************************************************** ****************************
Private Sub MenuHandler_Click (ByVal CommandBarControl As Object, behandelt als Boolean, CancelDefault As Boolean)
Skript ausführen
End Sub
'************************************************** ****************************
'MenuHandler2_Click Sub
'------------------------------------------------- ----------------------------
' BESCHREIBUNG:
'Diese Methode führt die erforderlichen Aufgaben aus, wenn auf die Symbolleistenschaltfläche geklickt wird.
'************************************************** ****************************
Private Sub MenuHandler2_Click (ByVal CommandBarControl As Object, behandelt als Boolean, CancelDefault As Boolean)
Skript ausführen
End Sub
'************************************************** ****************************
'AddToAddInCommandBar Sub
'------------------------------------------------- ----------------------------
' BESCHREIBUNG:
'Fügt das angegebene Element der Menüliste hinzu.
'************************************************** ****************************
Funktion AddToAddInCommandBar (sCaption As String) As Office.CommandBarControl
Dim cbMenuCommandBar As Office.CommandBarControl 'Befehlsleistenobjekt
Dim cbMenu As Object
On Error Resume Weiter
Überprüfen Sie, ob das Menü "Add-Ins" angezeigt wird
Set cbMenu = VBInstance.CommandBars ("Add-Ins")
Wenn cbMenu nichts ist, dann
'nicht verfügbar, also scheitern wir
Funktion beenden
End If
On Error Gehe zu ErrorHandler
'füge es der Befehlsleiste hinzu
Setze cbMenuCommandBar = cbMenu.Controls.Add (1)
'setze die Überschrift
cbMenuCommandBar.Caption = sCaption
Setzen Sie AddToAddInCommandBar = cbMenuCommandBar
Funktion beenden
ErrorHandler:
'Beende anmutig
Funktion beenden
Mit diesem Code kann die Anwendung die gewünschten Farben aus einer Datei lesen, die sich im selben Verzeichnis befindet wie die DLL (VB6CodeColours.dat). Diese Datei enthält Folgendes (und hängt davon ab, welche Farben Sie in der Datei VB6.EXE ersetzen), sodass ein direktes Kopieren und Einfügen wahrscheinlich nicht funktioniert.
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
Sieht Kauderwelsch aus, aber ich werde es erklären. Es hat das Format "Codefarbe", "Vordergrund", "Hintergrund", Indikator ", so dass in der oberen Reihe der" Normale Text "auf das 14. Element in der Kombination für den Vordergrund, das 12. für den Hintergrund und das 1. für den Indikator gesetzt wird .
Warum habe ich gesagt, es ist eine ziemlich grobe Lösung: * Es verwendet SendKeys. Keine weiteren Erklärungen erforderlich, da bin ich mir sicher :) * Der Benutzer muss auf die Menü- / Symbolleistenoption klicken, damit sie wirksam wird. * Der Code ist (meiner Meinung nach) nicht am besten strukturiert, basierte jedoch auf der Zeit, die ich ihm zu diesem Zeitpunkt widmen konnte. Ich versuche, es in Zukunft zu verbessern, aber es funktioniert im aktuellen Zustand einwandfrei (also werde ich es wahrscheinlich lassen!)
Vielleicht kann jemand auf dieser Grundlage weiter darauf eingehen.