Biorąc przynętę z odpowiedzi dnissleya (gdzie pyta, czy ktoś mógłby zrobić dodatek), stworzyłem dodatek do VB6. Jest trochę prymitywny (a wkrótce wyjaśnię dlaczego), ale spełnia swoje zadanie.
W VB6 utworzyłem nowy projekt dodatku, który dał mi domyślny formularz „frmAddin” (którego nie używam) i projektanta „Connect”. Sam dodałem klasę kolorów, która zawiera:
Opcja Jawna
Dim m_iForeColour As Integer
Dim m_iBackColour As Integer
Dim m_iIndicatorColour As Integer
Właściwość publiczna Let ForeColour (ByVal iID As Integer)
m_iForeColour = iID
Zakończ właściwość
Właściwość publiczna Get ForeColour () as Integer
ForeColour = m_iForeColour
Zakończ właściwość
Właściwość publiczna Let BackColour (ByVal iID As Integer)
m_iBackColour = iID
Zakończ właściwość
Właściwość publiczna Get BackColour () as Integer
BackColour = m_iBackColour
Zakończ właściwość
Właściwość publiczna Let IndicatorColour (ByVal iID As Integer)
m_iIndicatorColour = iID
Zakończ właściwość
Właściwość publiczna Uzyskaj IndicatorColour () jako liczba całkowita
IndicatorColour = m_iIndicatorColour
Zakończ właściwość
A następnie zmieniłem kod w Projektancie „Połącz” w następujący sposób:
Opcja Jawna
Forma publiczna wyświetlana jako logiczna
Publiczny VBInstance jako VBIDE.VBE
Dim mcbMenuCommandBar As Office.CommandBarControl
Dim mfrmAddIn as New frmAddIn
Public WithEvents MenuHandler Jako moduł obsługi zdarzeń paska poleceń CommandBarEvents
Dim mcbToolbar As Office.CommandBarControl
Public WithEvents MenuHandler2 As CommandBarEvents
Dim codeColours () As Color
„************************************************* ****************************
„RunScript Sub
„------------------------------------------------- ----------------------------
„OPIS:
Uruchamia kod, który ustawia wymagane kolory dla okna kodu w
„aktywne IDE.
„*** PROJEKT MUSI BYĆ ZAŁADOWANY, ABY TO BĘDZIE faktycznie działało ***
„************************************************* ****************************
Sub RunScript ()
ReadColoursFile
„Wybierz Narzędzia> Opcje
SendKeys „% do”, 5
„Przejdź do kart, wybierz„ Opcje ”
SendKeys „+ {TAB}”
SendKeys „{RIGHT}”
„Wybierz pole listy
SendKeys „{TAB}”
Przyciemnij kolor Ustaw jako kolor
Dim iColour As Integer
Dla iColour = 0 do 9
SetColours iColour, codeColours (iColour)
Następny iColour
SendKeys „~”
Napis końcowy
„************************************************* ****************************
„ReadColoursFile Sub
„------------------------------------------------- ----------------------------
„OPIS:
„Odczytuje plik koloru z dysku i zapełnia tablicę codeColours, która
”jest używany przez metody SetColour * do wybierania prawidłowych kolorów
„ekran opcji.
„************************************************* ****************************
Sub ReadColoursFile ()
Dim colour Line As String
Dim colourArray () As String
Przyciemnij kolor Ustaw jako kolor
Dim oFSO As FileSystemObject
Ustaw oFSO = Nowy FileSystemObject
Jeśli nie oFSO.FileExists (App.Path & "\ VB6CodeColours.dat"), to
MsgBox „Nie znaleziono VB6CodeColours.dat w” i App.Path, vbOKOnly, „Nie znaleziono pliku ustawień VB6CodeColours!”
Wyjdź z Sub
End If
Ustaw oFSO = Nic
Otwórz App.Path & „\ VB6CodeColours.dat” dla danych wejściowych jako nr 1
Kod ReDim Kolory (9) W kolorze
Chociaż nie jest EOF (1)
Wejście liniowe nr 1, colourLine
colourArray = Split (colourLine, „,”)
Jeśli IsNumeric (colourArray (0)), to
Jeśli codeColours (colourArray (0)) nie jest niczym
Ustaw colourSetting = Nowy kolor
Jeśli IsNumeric (colourArray (1)), to
colourSetting.ForeColour = CInt (colourArray (1))
End If
Jeśli IsNumeric (colourArray (2)), to
colourSetting.BackColour = CInt (colourArray (2))
End If
Jeśli IsNumeric (colourArray (3)), to
colourSetting.IndicatorColour = CInt (colourArray (3))
End If
Ustaw kod Kolory (colorArray (0)) = colorSetting
End If
End If
Wend
Zamknij # 1
Ustaw colourSetting = Nic
Napis końcowy
„************************************************* ****************************
„SetColours Sub
„------------------------------------------------- ----------------------------
„OPIS:
„Wybiera element koloru z listy, a następnie iteruje selektor kolorów
„kontrolki powiązane z tym elementem i ustawia je zgodnie z wartościami
”ustawiony w pliku VB6CodeColours.dat.
„************************************************* ****************************
Sub SetColours (ByVal iColour As Integer, ByRef colourSetting As Color)
Dim iKey As Integer
SendKeys „{HOME}”
Dla iKey = 1 Do iColour
SendKeys „{DOWN}”
Następnie iKey
SetColourSelector colourSetting.ForeColour
SetColourSelector colourSetting.BackColour
SetColourSelector colourSetting.IndicatorColour
SendKeys „+ {TAB}”
SendKeys „+ {TAB}”
SendKeys „+ {TAB}”
Napis końcowy
„************************************************* ****************************
„SetColourSelector Sub
„------------------------------------------------- ----------------------------
„OPIS:
„Ustawia kolor w kombinacji selektora. Zakłada, że koncentruje się na
'poprzednia kontrola przed uruchomieniem kodu (tabulatory pierwszego wiersza do
„przejęła kontrolę).
„************************************************* ****************************
Sub SetColourSelector (ByVal iColour As Integer)
Dim iKey As Integer
SendKeys „{TAB}”
SendKeys „{HOME}”
Dla iKey = 1 Do iColour
SendKeys „{DOWN}”
Następnie iKey
Napis końcowy
„************************************************* ****************************
„AddinInstance_OnConnection Sub
„------------------------------------------------- ----------------------------
„OPIS:
„Ta metoda działa, gdy dodatek jest ładowany przez IDE
„************************************************* ****************************
Private Sub AddinInstance_OnConnection (Aplikacja ByVal jako obiekt, ByVal ConnectMode jako AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst jako obiekt, custom () jako wariant)
On Error GoTo ErrorHandler
„zapisz instancję vb
Ustaw VBInstance = Aplikacja
Jeśli ConnectMode ext_cm_External Wtedy
Ustaw mcbMenuCommandBar = AddToAddInCommandBar („Kolorowanie kodu VB6”)
zatopić wydarzenie
Ustaw Me.MenuHandler = VBInstance.Events.CommandBarEvents (mcbMenuCommandBar)
Dim oStdToolbar As Office.CommandBar
Dim oStdToolbarItem As Office.CommandBarControl
Ustaw oStdToolbar = VBInstance.CommandBars („Standard”)
Ustaw oStdToolbarItem = oStdToolbar.Controls.Add (Typ: = msoControlButton)
oStdToolbarItem.Style = msoButtonCaption
oStdToolbarItem.Caption = "Ustaw kolory IDE"
oStdToolbarItem.BeginGroup = True
Ustaw Me.MenuHandler2 = VBInstance.Events.CommandBarEvents (oStdToolbarItem)
End If
Wyjdź z Sub
ErrorHandler:
Błąd MsgBox Opis
Napis końcowy
„************************************************* ****************************
„AddinInstance_OnDisconnection Sub
„------------------------------------------------- ----------------------------
„OPIS:
„Ta metoda działa, gdy dodatek jest usuwany przez IDE i czyści dowolne
„referencje itp.
„************************************************* ****************************
Private Sub AddinInstance_OnDisconnection (ByVal RemoveMode jako AddInDesignerObjects.ext_DisconnectMode, custom () jako wariant)
Po błędzie Wznów dalej
„usuń pozycję paska poleceń
mcbMenuCommandBar.Delete
„zamknij dodatek
Jeśli zostanie wyświetlony formularz FormDisplay
SaveSetting App.Title, „Ustawienia”, „DisplayOnConnect”, „1”
FormDisplayed = False
Jeszcze
SaveSetting App.Title, „Ustawienia”, „DisplayOnConnect”, „0”
End If
Zwolnij mfrmAddIn
Ustaw mfrmAddIn = Nic
Ustaw MenuHandler = Nic
Ustaw MenuHandler2 = Nic
Napis końcowy
„************************************************* ****************************
„MenuHandler_Click Sub
„------------------------------------------------- ----------------------------
„OPIS:
„Ta metoda wykonuje zadania potrzebne po kliknięciu elementu menu.
„************************************************* ****************************
Private Sub MenuHandler_Click (ByVal CommandBarControl As Object, obsługiwane jako Boolean, CancelDefault As Boolean)
RunScript
Napis końcowy
„************************************************* ****************************
„MenuHandler2_Click Sub
„------------------------------------------------- ----------------------------
„OPIS:
„Ta metoda wykonuje zadania wymagane po kliknięciu przycisku paska narzędzi.
„************************************************* ****************************
Private Sub MenuHandler2_Click (ByVal CommandBarControl As Object, obsługiwane jako Boolean, CancelDefault As Boolean)
RunScript
Napis końcowy
„************************************************* ****************************
„AddToAddInCommandBar Sub
„------------------------------------------------- ----------------------------
„OPIS:
„Dodaje określony element do listy menu.
„************************************************* ****************************
Funkcja AddToAddInCommandBar (sCaption As String) As Office.CommandBarControl
Dim cbMenuCommandBar As Object.CommandBarControl 'obiekt paska poleceń
Dim cbMenu As Object
Po błędzie Wznów dalej
zobacz, czy możemy znaleźć menu Dodatki
Ustaw cbMenu = VBInstance.CommandBars („Dodatki”)
Jeśli cbMenu jest niczym, to
„niedostępne, więc ponosimy porażkę
Wyjdź z funkcji
End If
On Error GoTo ErrorHandler
'dodaj go do paska poleceń
Ustaw cbMenuCommandBar = cbMenu.Controls.Add (1)
„ustaw podpis
cbMenuCommandBar.Caption = sCaption
Ustaw AddToAddInCommandBar = cbMenuCommandBar
Wyjdź z funkcji
ErrorHandler:
„Wyjdź z wdziękiem
Funkcja zakończenia
Ten kod pozwala aplikacji na odczyt żądanych kolorów z pliku, który znajduje się w tym samym katalogu co .dll (o nazwie VB6CodeColours.dat). Ten plik zawiera następujące elementy (będą się różnić w zależności od kolorów, które zamienisz w VB6.EXE, więc proste kopiowanie i wklejanie prawdopodobnie nie będzie działać).
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
Wygląda bełkotliwie, ale wyjaśnię. Ma format „Kolor kodu”, „Pierwszy plan”, „Tło”, Wskaźnik ”, więc górny wiersz ustawi„ Normalny tekst ”na 14. pozycję w zestawie dla pierwszego planu, 12. na tło i 1. na wskaźnik .
Dlaczego powiedziałem, że jest to dość prymitywne rozwiązanie: * Używa SendKeys. Jestem pewien, że nie jest potrzebne żadne dodatkowe wyjaśnienie :) * Użytkownik musi kliknąć opcję menu / paska narzędzi, aby zadziałało. * Kod nie jest najlepiej ustrukturyzowany (moim zdaniem), ale opierał się na ilości czasu, jaki mogłem w tym czasie poświęcić. Staram się go poprawić w przyszłości, ale w obecnym stanie działa dla mnie dobrze (więc prawdopodobnie go zostawię!)
Być może na podstawie ktoś może dalej to rozwinąć.