Беручи приманку з відповіді денсслі (де він запитує, чи хтось міг зробити надбудову), я зробив надбудову для VB6. Це трохи грубо (і я поясню, чому незабаром), але це робить свою роботу.
Я створив новий проект надбудови у VB6, який дав мені форму "frmAddin" за замовчуванням (яку я не використовую) та дизайнер "Connect". Я сам додав клас кольорів, який містить наступне:
Варіант явний
Розмір m_iForeColour як цілий
Розмір m_iBackColour як цілий
Розмір m_iIndicatorColour як цілий
Публічна власність нехай ForeColour (ByVal iID As Integer)
m_iForeColour = iID
Кінцева власність
Громадська власність Отримайте ForeColour () як цілісну
ForeColour = m_iForeColour
Кінцева власність
Публічна власність відпустить колорит (ByVal iID As Integer)
m_iBackColour = iID
Кінцева власність
Громадська власність Отримайте BackColour () як цілісність
BackColour = m_iBackColour
Кінцева власність
Публічна власність нехай індикаторне забарвлення (ByVal iID As Integer)
m_iIndicatorColour = iID
Кінцева власність
Громадська власність Отримайте показник кольору () як цілий
IndicatorColour = m_iIndicatorColour
Кінцева власність
А потім я змінив код у "Підключенні" Дизайнера таким чином:
Варіант явний
Публічна форма відображається як булева
Публічний VBInstance як VBIDE.VBE
Dim mcbMenuCommandBar As Office.CommandBarControl
Dim mfrmAddIn як новий frmAddIn
Public WithEvents MenuHandler як обробник подій командного рядка CommandBarEvents
Dim mcbToolbar As Office.CommandBarControl
Public WithEvents MenuHandler2 як CommandBarEvents
Код затемнення кольори () як колір
'*************************************************** ****************************
'RunScript Sub
'------------------------------------------------- ----------------------------
ОПИС:
'Виконує код, який встановлює необхідні кольори для вікна коду в
'активний IDE.
"*** ПРОЕКТ ПОВИНЕН ЗАВАНТАЖИТИ ДО ЦЕГО, ЩО БУДЕ ДІЙСНЕ РОБОТИ ***
'*************************************************** ****************************
Sub RunScript ()
ReadColoursFile
"Виберіть Інструменти> Параметри
SendKeys "% to", 5
"Перейдіть на вкладки, виберіть" Параметри "
SendKeys "+ {TAB}"
SendKeys "{RIGHT}"
"Виберіть список
SendKeys "{TAB}"
Тьмяний колірНалаштування як колір
Дім iColour як цілий
Для iColour = 0 до 9
SetColours iColour, codeColour (iColour)
Наступний iColour
SendKeys "~"
Кінець Під
'*************************************************** ****************************
'Читайте кольориFile Sub
'------------------------------------------------- ----------------------------
ОПИС:
'Читає файл кольору з диска і заповнює масив codeColours, який
'використовується методами SetColour * для вибору правильних кольорів з
'екран опцій.
'*************************************************** ****************************
Sub ReadColoursFile ()
Тьмяний колірLine As String
Темний колірArray () As String
Тьмяний колірНалаштування як колір
Розмір oFSO як FileSystemObject
Встановити oFSO = Новий FileSystemObject
Якщо немає oFSO.FileExists (App.Path & "\ VB6CodeColours.dat"), то
MsgBox "VB6CodeColours.dat не знайдено в" & App.Path, vbOKOnly, "Файл налаштувань VB6CodeColours не знайдено!"
Вихід із суб
Кінець Якщо
Встановити oFSO = Нічого
Відкрийте App.Path & "\ VB6CodeColours.dat" для введення як №1
Код ReDimКольори (9) Як колір
Хоча не EOF (1)
Лінійний ввід №1, colourLine
colourArray = Спліт (colourLine, ",")
Якщо IsNumeric (colourArray (0)), то
Якщо codeColours (colourArray (0)) - то нічого
Встановити colourSetting = Новий колір
Якщо IsNumeric (colourArray (1)), то
colourSetting.ForeColour = CInt (colourArray (1))
Кінець Якщо
Якщо IsNumeric (colourArray (2)), то
colorurSetting.BackColour = CInt (colourArray (2))
Кінець Якщо
Якщо IsNumeric (colourArray (3)), то
colorurSetting.IndicatorColour = CInt (colourArray (3))
Кінець Якщо
Встановити код Colours (colourArray (0)) = colorSetting
Кінець Якщо
Кінець Якщо
Венд
Закрити №1
Встановити colourSetting = Нічого
Кінець Під
'*************************************************** ****************************
'SetColours Sub
'------------------------------------------------- ----------------------------
ОПИС:
'Вибирає кольоровий елемент зі списку, а потім повторює селектор кольорів
'елементи управління, пов'язані з цим елементом, і встановлює їх відповідно до значень
'встановлено у файлі VB6CodeColours.dat.
'*************************************************** ****************************
Sub SetColours (ByVal iColour As Integer, ByRef colorSetting As Colour)
Дім iKey як цілий
SendKeys "{HOME}"
Для iKey = 1 Для iColour
SendKeys "{DOWN}"
Далі iKey
SetColourSelector colorSetting.ForeColour
SetColourSelector colorSetting.BackColour
SetColourSelector colorSetting.IndicatorColour
SendKeys "+ {TAB}"
SendKeys "+ {TAB}"
SendKeys "+ {TAB}"
Кінець Під
'*************************************************** ****************************
'SubColourSelector Sub
'------------------------------------------------- ----------------------------
ОПИС:
'Встановлює колір у комбінації селекторів. Припускає, що зосереджена увага на
', що передує контролю перед запуском коду (вкладки першого рядка до
'взяв на себе контроль).
'*************************************************** ****************************
Sub SetColourSelector (ByVal iColour As Integer)
Дім iKey як цілий
SendKeys "{TAB}"
SendKeys "{HOME}"
Для iKey = 1 Для iColour
SendKeys "{DOWN}"
Далі iKey
Кінець Під
'*************************************************** ****************************
'Підрозділ AddinInstance_OnConnection
'------------------------------------------------- ----------------------------
ОПИС:
'Цей метод працює, коли додаток завантажується IDE
'*************************************************** ****************************
Private Sub AddinInstance_OnConnection (Додаток ByVal як об'єкт, ByVal ConnectMode як AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst як об’єкт, звичайний () як варіант)
On Error GoTo ErrorHandler
'збережіть екземпляр vb
Встановити VBInstance = Додаток
Якщо ConnectMode ext_cm_External тоді
Встановити mcbMenuCommandBar = AddToAddInCommandBar ("Розфарбування коду VB6")
'потопити подію
Встановити Me.MenuHandler = VBInstance.Events.CommandBarEvents (mcbMenuCommandBar)
Дім oStdToolbar як Office.CommandBar
Dim oStdToolbarItem As Office.CommandBarControl
Встановити oStdToolbar = VBInstance.CommandBars ("Стандартний")
Встановити oStdToolbarItem = oStdToolbar.Controls.Add (Тип: = msoControlButton)
oStdToolbarItem.Style = msoButtonCaption
oStdToolbarItem.Caption = "Встановити кольори IDE"
oStdToolbarItem.BeginGroup = Істинно
Встановити Me.MenuHandler2 = VBInstance.Events.CommandBarEvents (oStdToolbarItem)
Кінець Якщо
Вихід із суб
ErrorHandler:
Опис помилки MsgBox
Кінець Під
'*************************************************** ****************************
'Підрозділ AddinInstance_OnDisconnection
'------------------------------------------------- ----------------------------
ОПИС:
'Цей метод працює, коли IDE видаляє IDE і очищує будь-який
'посилання тощо
'*************************************************** ****************************
Приватний Sub AddinInstance_OnDisconnection (ByVal RemoveMode як AddInDesignerObjects.ext_DisconnectMode, custom () як варіант)
Про помилку Відновіть далі
'видалити запис командного рядка
mcbMenuCommandBar.Delete
"вимкнути надбудову
Якщо FormDisplayed then
SaveSetting App.Title, "Налаштування", "DisplayOnConnect", "1"
FormDisplayed = Неправдивий
Інше
SaveSetting App.Title, "Налаштування", "DisplayOnConnect", "0"
Кінець Якщо
Вивантажте mfrmAddIn
Встановити mfrmAddIn = Нічого
Встановіть MenuHandler = Нічого
Встановіть MenuHandler2 = Нічого
Кінець Під
'*************************************************** ****************************
'MenuHandler_Click Sub
'------------------------------------------------- ----------------------------
ОПИС:
"Цей метод виконує завдання, необхідні при натисканні на пункт меню.
'*************************************************** ****************************
Приватне підменюHandler_Click (ByVal CommandBarControl як об’єкт, обробляється як булевий, CancelDefault As Boolean)
RunScript
Кінець Під
'*************************************************** ****************************
'MenuHandler2_Click Sub
'------------------------------------------------- ----------------------------
ОПИС:
"Цей метод виконує завдання, необхідні при натисканні кнопки на панелі інструментів.
'*************************************************** ****************************
Приватне підменюHandler2_Click (ByVal CommandBarControl як об’єкт, обробляється як булевий, CancelDefault As Boolean)
RunScript
Кінець Під
'*************************************************** ****************************
'SubToAddInCommandBar Sub
'------------------------------------------------- ----------------------------
ОПИС:
'Додає вказаний пункт до списку меню.
'*************************************************** ****************************
Функція AddToAddInCommandBar (sCaption As String) як Office.CommandBarControl
Дім cbMenuCommandBar As Office.CommandBarControl ', командний рядок
Dim cbMenu як об’єкт
Про помилку Відновіть далі
'подивіться, чи зможемо ми знайти меню надбудови
Встановити cbMenu = VBInstance.CommandBars ("надбудови")
Якщо cbMenu - то нічого
'недоступно, тому ми не вдається
Вихід з функції
Кінець Якщо
On Error GoTo ErrorHandler
'додайте його до панелі команд
Встановити cbMenuCommandBar = cbMenu.Controls.Add (1)
'встановити підпис
cbMenuCommandBar.Caption = sCaption
Установіть AddToAddInCommandBar = cbMenuCommandBar
Вихід з функції
ErrorHandler:
'Виходьте витончено
Кінцева функція
Цей код дозволяє програмі зчитувати потрібні кольори з файлу, який знаходиться у тому самому каталозі, що і .dll (називається VB6CodeColours.dat). Цей файл містить наступне (і залежатиме від того, які кольори ви заміняєте у VB6.EXE, тому пряма копія та вставка, ймовірно, не працюватимуть.
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
Виглядає химерно, але я поясню. Він має формати "Колір коду", "Передній план", "Фон", індикатор ", тому в верхньому рядку буде встановлено" Звичайний текст "14-му пункту у комбінації для переднього плану, 12-му для фонового та 1-му для індикатора .
Чому я сказав, що це досить грубе рішення: * Він використовує SendKeys. Ніяких додаткових пояснень там не потрібно, я впевнений :) * Користувач повинен натиснути параметр меню / панелі інструментів, щоб він набрав чинності. * Код не найкраще структурований (на мій погляд), але базувався на кількості часу, який я можу присвятити йому на той час. Я маю на меті вдосконалити це в майбутньому, але він працює добре для мене в нинішньому стані (тому я, мабуть, залишу його!)
Можливо, з основою хтось може розширити її далі.