Взяв приманку из ответа Днисли (где он спрашивает, может ли кто-нибудь сделать надстройку), я сделал надстройку для VB6. Это немного грубо (и я объясню почему в ближайшее время), но это делает работу.
Я создал новый проект надстройки в VB6, который дал мне стандартную форму "frmAddin" (которую я не использую) и конструктор "Connect". Я сам добавил класс Color, который содержит следующее:
Вариант Явный
Dim m_iForeColour As Integer
Dim m_iBackColour As Integer
Dim m_iIndicatorColour As Integer
Открытое свойство Let ForeColour (ByVal iID As Integer)
m_iForeColour = iID
Конечная недвижимость
Открытое свойство Get ForeColour () как целое число
ForeColour = m_iForeColour
Конечная недвижимость
Открытое свойство Let BackColour (ByVal iID As Integer)
m_iBackColour = iID
Конечная недвижимость
Открытое свойство Get BackColour () As Integer
BackColour = m_iBackColour
Конечная недвижимость
Открытое свойство Let IndicatorColour (ByVal iID As Integer)
m_iIndicatorColour = iID
Конечная недвижимость
Открытое свойство Get IndicatorColour () As Integer
IndicatorColour = m_iIndicatorColour
Конечная недвижимость
А затем я изменил код в конструкторе «Соединение» следующим образом:
Вариант Явный
Публичная форма отображается как логическое
Публичный VBInstance As VBIDE.VBE
Dim mcbMenuCommandBar As Office.CommandBarControl
Dim mfrmAddIn As New frmAddIn
Public WithEvents MenuHandler As Обработчик событий панели команд CommandBarEvents
Dim mcbToolbar As Office.CommandBarControl
Public WithEvents MenuHandler2 As CommandBarEvents
Dim codeColours () как цвет
«************************************************* ****************************
RunScript Sub
«------------------------------------------------- ----------------------------
' ОПИСАНИЕ:
'Запускает код, который устанавливает требуемые цвета для окна кода в
Активная IDE.
*** ПРОЕКТ ДОЛЖЕН БЫТЬ ЗАГРУЖЕН, ДО ЭТОГО БУДЕТ ДЕЙСТВИТЕЛЬНО РАБОТАТЬ
«************************************************* ****************************
Sub RunScript ()
ReadColoursFile
'Выберите Инструменты> Параметры
SendKeys "% to", 5
«Перейти на вкладки, выберите« Параметры »
SendKeys "+ {TAB}"
SendKeys "{RIGHT}"
Выберите список
SendKeys "{TAB}"
Dim colourSetting As Color
Dim iColour As Integer
Для iColour = 0 до 9
SetColours iColour, codeColours (iColour)
Next iColour
SendKeys "~"
End Sub
«************************************************* ****************************
'ReadColoursFile Sub
«------------------------------------------------- ----------------------------
' ОПИСАНИЕ:
'Считывает файл цвета с диска и заполняет массив codeColours, который
'используется методами SetColour * для выбора правильных цветов из
экран настроек.
«************************************************* ****************************
Sub ReadColoursFile ()
Dim ColourLine As String
Dim colourArray () As String
Dim colourSetting As Color
Dim oFSO As FileSystemObject
Установить oFSO = Новый FileSystemObject
Если не oFSO.FileExists (App.Path & "\ VB6CodeColours.dat"), то
MsgBox "VB6CodeColours.dat не найден в" & App.Path, vbOKOnly, "Файл настроек VB6CodeColours не найден!"
Exit Sub
End If
Установить oFSO = ничего
Откройте App.Path & "\ VB6CodeColours.dat" для ввода в качестве # 1
ReDim codeColours (9) как цвет
Пока не EOF (1)
Линейный вход № 1, colourLine
colourArray = Split (colourLine, ",")
Если IsNumeric (colourArray (0)), то
Если codeColours (colourArray (0)) - это ничто, то
Set colourSetting = New Color
Если IsNumeric (colourArray (1)), то
colourSetting.ForeColour = CInt (colourArray (1))
End If
Если IsNumeric (colourArray (2)), то
colourSetting.BackColour = CInt (colourArray (2))
End If
Если IsNumeric (colourArray (3)), то
colourSetting.IndicatorColour = CInt (colourArray (3))
End If
Set codeColours (colourArray (0)) = colourSetting
End If
End If
венед
Закрыть № 1
Set colourSetting = Nothing
End Sub
«************************************************* ****************************
'SetColours Sub
«------------------------------------------------- ----------------------------
' ОПИСАНИЕ:
'Выбирает элемент цвета из списка, а затем повторяет селектор цвета
'управления, связанные с этим элементом и устанавливает их в соответствии со значениями
'установлено в файле VB6CodeColours.dat.
«************************************************* ****************************
Sub SetColours (ByVal iColour As Integer, ByRef colourSetting As Color)
Dim iKey As Integer
SendKeys "{HOME}"
Для iKey = 1 К iColour
SendKeys "{DOWN}"
Next iKey
SetColourSelector colourSetting.ForeColour
SetColourSelector colourSetting.BackColour
SetColourSelector colourSetting.IndicatorColour
SendKeys "+ {TAB}"
SendKeys "+ {TAB}"
SendKeys "+ {TAB}"
End Sub
«************************************************* ****************************
'SetColourSelector Sub
«------------------------------------------------- ----------------------------
' ОПИСАНИЕ:
'Устанавливает цвет в комбо селектора. Предполагается, что основное внимание уделяется
'предшествующий элемент управления перед выполнением кода (вкладки первой строки
'взял на себя контроль).
«************************************************* ****************************
Sub SetColourSelector (ByVal iColour As Integer)
Dim iKey As Integer
SendKeys "{TAB}"
SendKeys "{HOME}"
Для iKey = 1 К iColour
SendKeys "{DOWN}"
Next iKey
End Sub
«************************************************* ****************************
'AddinInstance_OnConnection Sub
«------------------------------------------------- ----------------------------
' ОПИСАНИЕ:
'Этот метод запускается, когда надстройка загружается в IDE
«************************************************* ****************************
Private Sub AddinInstance_OnConnection (приложение ByVal как объект, ByVal ConnectMode как объект AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst как объект, custom () как вариант)
При ошибке Перейти к ErrorHandler
'сохранить экземпляр VB
Установить VBInstance = приложение
Если ConnectMode ext_cm_External, то
Установите mcbMenuCommandBar = AddToAddInCommandBar («Раскраска кода VB6»)
потопить событие
Установите Me.MenuHandler = VBInstance.Events.CommandBarEvents (mcbMenuCommandBar)
Dim oStdToolbar As Office.CommandBar
Dim oStdToolbarItem As Office.CommandBarControl
Установите oStdToolbar = VBInstance.CommandBars ("Стандартный")
Установите oStdToolbarItem = oStdToolbar.Controls.Add (Тип: = msoControlButton)
oStdToolbarItem.Style = msoButtonCaption
oStdToolbarItem.Caption = "Установить цвета IDE"
oStdToolbarItem.BeginGroup = True
Установите Me.MenuHandler2 = VBInstance.Events.CommandBarEvents (oStdToolbarItem)
End If
Exit Sub
ErrorHandler:
MsgBox Err.Description
End Sub
«************************************************* ****************************
'AddinInstance_OnDisconnection Sub
«------------------------------------------------- ----------------------------
' ОПИСАНИЕ:
«Этот метод запускается, когда надстройка удаляется IDE и очищает все
ссылки и т. д.
«************************************************* ****************************
Private Sub AddinInstance_OnDisconnection (ByVal RemoveMode As AddInDesignerObjects.ext_DisconnectMode, custom () Как вариант)
При ошибке возобновить следующее
'удалить запись командной строки
mcbMenuCommandBar.Delete
выключить надстройку
Если FormDisplayed, то
SaveSetting App.Title, «Настройки», «DisplayOnConnect», «1»
FormDisplayed = False
еще
SaveSetting App.Title, «Настройки», «DisplayOnConnect», «0»
End If
Выгрузить mfrmAddIn
Set mfrmAddIn = Nothing
Установить MenuHandler = ничего
Установить MenuHandler2 = ничего
End Sub
«************************************************* ****************************
MenuHandler_Click Sub
«------------------------------------------------- ----------------------------
' ОПИСАНИЕ:
«Этот метод выполняет задачи, необходимые при нажатии на пункт меню.
«************************************************* ****************************
Private Sub MenuHandler_Click (ByVal CommandBarControl As Object, обрабатывается как Boolean, CancelDefault As Boolean)
RunScript
End Sub
«************************************************* ****************************
MenuHandler2_Click Sub
«------------------------------------------------- ----------------------------
' ОПИСАНИЕ:
«Этот метод выполняет задачи, необходимые при нажатии кнопки на панели инструментов.
«************************************************* ****************************
Private Sub MenuHandler2_Click (ByVal CommandBarControl As Object, обрабатывается как Boolean, CancelDefault As Boolean)
RunScript
End Sub
«************************************************* ****************************
SubToAddInCommandBar Sub
«------------------------------------------------- ----------------------------
' ОПИСАНИЕ:
'Добавляет указанный элемент в список меню.
«************************************************* ****************************
Функция AddToAddInCommandBar (sCaption As String) в качестве Office.CommandBarControl
Dim cbMenuCommandBar As Office.CommandBarControl 'объект панели команд
Dim cbMenu As Object
При ошибке возобновить следующее
посмотрим, сможем ли мы найти меню надстроек
Установите cbMenu = VBInstance.CommandBars («Надстройки»)
Если cbMenu - ничто, тогда
'не доступно, поэтому мы терпим неудачу
Функция выхода
End If
При ошибке Перейти к 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. Я уверен, что дальнейших объяснений здесь не требуется :) * Пользователь должен нажать на опцию меню / панели инструментов, чтобы она вступила в силу. * Код, на мой взгляд, не очень хорошо структурирован, но основан на количестве времени, которое я мог бы посвятить ему в то время. Я стремлюсь улучшить его в будущем, но он отлично работает для меня в текущем состоянии (поэтому я, вероятно, оставлю это!)
Возможно, с основой, кто-то может расширить это дальше.