我正在使用Excel和VBA处理一些项目,因此除了使用Microsoft Visual Basic编辑器外别无选择。我通常不介意,但是我不知道如何为编辑器设置自定义颜色(我只能从默认调色板中选择)。
要更改当前的颜色,我转到Tools -> Options -> Editor Format
...。但是,您的选择仅限于默认(和基本)16种颜色-当我说基本时,我的意思是基本,例如粉红色,蓝色,黑色,白色等。 ..
有谁知道如何指定自定义颜色,或者至少更改默认调色板中显示的某些颜色?
我正在使用Excel和VBA处理一些项目,因此除了使用Microsoft Visual Basic编辑器外别无选择。我通常不介意,但是我不知道如何为编辑器设置自定义颜色(我只能从默认调色板中选择)。
要更改当前的颜色,我转到Tools -> Options -> Editor Format
...。但是,您的选择仅限于默认(和基本)16种颜色-当我说基本时,我的意思是基本,例如粉红色,蓝色,黑色,白色等。 ..
有谁知道如何指定自定义颜色,或者至少更改默认调色板中显示的某些颜色?
Answers:
VBA从以下注册表项中读取颜色的设置:
HKEY_CURRENT_USER \ Software \ Microsoft \ VBA \ 6.0 \ Common \ CodeForeColors HKEY_CURRENT_USER \ Software \ Microsoft \ VBA \ 6.0 \ Common \ CodeBackColors
这些键中的每个键都包含“工具”->“选项”->“编辑器格式”中每个条目的值列表(以空格分隔)。例如,CodeBackColors内部的第一个值是背景色,而CodeForeColors内部的第一个值是普通文本的前景色。值是颜色的内部ID,0表示自动着色,11表示青色,5表示红色等。
尝试一下:关闭Excel,将CodeBackColors的第一个值更改为5,然后重新启动Excel。现在,代码编辑器的背景将变为红色。
问题在于,VBA编辑器仅支持这些内部值,并且可以理解的最大数字为16。其他任何值都将不被接受,并且默认返回到AUTO。
我尝试了几种输入不同值的选项(例如128255128、16777215,#aaffee,255或“ 170,255,238”),但它们都不起作用。
因此,我认为在技术上不可能分配其他颜色。
我根据此处找到的信息创建了一个应用程序:https : //github.com/dimitropoulos/VBECustomColors
它基本上备份了VBE6 / VBE7 .dll文件,并允许使用自定义颜色,而无需使用十六进制编辑器。
您可以在这里下载:https : //github.com/gallaux/VBEThemeColorEditor
请享用
编辑:源代码现已可用!
HKEY_CURRENT_USER\Software\Microsoft\VBA\7.1\Common
。[2]更改CodeBackColors
为:2 7 1 13 15 2 2 2 11 9 0 0 0 0 0 0
。[3]更改CodeForeColors
为:13 5 12 1 6 15 8 5 1 1 0 0 0 0 0 0
。[4]更改FontFace
为:Consolas
。
TeX HeX已被发现。但是,可以自行更改16种内置颜色。它只需要一点十六进制编辑。这是逐步指南。(注意:这适用于VB6 SP6,文件版本6.0.97.82)。
备份您的VB98程序文件夹中的VB6.EXE文件。(可选,但建议)。
启动您最喜欢的十六进制编辑器(喊出到HxD)并打开VB6.EXE。
跳转至地址0xE22F4。这是颜色表的开始。
您应该看到四个零。这代表RRGGBBAA格式的黑色(不支持alpha,因此实际上只是RRGGBB00格式)。接下来的四个字节指定下一个颜色,依此类推,直到获得以偏移量0xE2333结尾的FFFFFF00(白色)。
编辑这些四个字节的值中的任何一个供您选择。只需使用RGB格式的适当十六进制值,然后使用零字节即可。例如,RGB(64,128,192)将为40 80 C0 00。
将所做的更改保存到EXE并启动VB6。您应该在以前由内置VB颜色占用的插槽中看到新颜色。
正如许多人所指出的那样,Bond的解决方案(在VB6.exe中十六进制编辑颜色表)可以使用,但是每次启动VB6时,您都必须进入并在选项对话框中重置颜色。我创建了一个AutoIt脚本,它将为您完成所有工作,只需在进行对SetSyntaxColoring()的所有调用的地方进行必要的编辑即可:
Opt("WinTitleMatchMode", 2)
Opt("MouseClickDelay", 1)
Opt("MouseClickDownDelay", 1)
Opt("MouseClickDragDelay", 1)
Opt("SendKeyDelay", 1)
Opt("SendKeyDownDelay", 1)
Const $NORMALTEXT = 0
Const $SELECTIONTEXT = 1
Const $SYNTAXERRORTEXT = 2
Const $EXECUTIONPOINTTEXT = 3
Const $BREAKPOINTTEXT = 4
Const $COMMENTTEXT = 5
Const $KEYWORDTEXT = 6
Const $IDENTIFIERTEXT = 7
Const $BOOKMARKTEXT = 8
Const $CALLRETURNTEXT = 9
Const $AUTO = 0
Const $BLACK = 1
Const $DARKBLUE = 2
Const $DARKGREEN = 3
Const $DARKRED = 4
Const $DARKBABYBLUE = 5
Const $DARKPINK = 6
Const $DARKYELLOW = 7
Const $LIGHTGRAY = 8
Const $DARKGRAY = 9
Const $BLUE = 10
Const $GREEN = 11
Const $BABYBLUE = 12
Const $RED = 13
Const $PINK = 14
Const $YELLOW = 15
Const $WHITE = 16
If WinExists( "Microsoft Visual Basic" ) Then
WinActivate("Microsoft Visual Basic") ; activates the visual basic window
Send("!+to") ; opens the options menu
Sleep(10)
WinMove("Options", "", 0, 0) ; moves the options menu to the upper left corner of the screen
MouseClick("primary", 100, 50, 1, 0) ; clicks the editor tab
SetSyntaxColoring($NORMALTEXT, $WHITE, $BLACK)
SetSyntaxColoring($SELECTIONTEXT, $AUTO, $AUTO)
SetSyntaxColoring($SYNTAXERRORTEXT, $BLACK, $YELLOW)
SetSyntaxColoring($EXECUTIONPOINTTEXT, $AUTO, $YELLOW)
SetSyntaxColoring($BREAKPOINTTEXT, $WHITE, $DARKRED)
SetSyntaxColoring($COMMENTTEXT, $DARKGREEN, $BLACK)
SetSyntaxColoring($KEYWORDTEXT, $GREEN, $BLACK)
SetSyntaxColoring($IDENTIFIERTEXT, $WHITE, $BLACK)
SetSyntaxColoring($BOOKMARKTEXT, $WHITE, $BLACK)
SetSyntaxColoring($CALLRETURNTEXT, $WHITE, $GREEN)
MouseClick("primary", 210, 340, 1, 0) ; hit the ok button to apply the changes
EndIf
Func SetSyntaxColoring($syntax, $forecolor, $backcolor)
SelectSyntax($syntax)
SelectForecolor($forecolor)
SelectBackcolor($backcolor)
EndFunc
Func SelectSyntax($syntax)
ResetSyntaxList()
RptSend("{DOWN}", $syntax)
EndFunc
Func SelectForecolor($color)
ResetForecolorCbo()
RptSend("{DOWN}", $color)
EndFunc
Func SelectBackcolor($color)
ResetBackcolorCbo()
RptSend("{DOWN}", $color)
EndFunc
Func ResetSyntaxList()
MouseClick("primary", 50, 95, 1, 0)
RptSend("{UP}", 9)
EndFunc
Func ResetForecolorCbo()
MouseClick("primary", 50, 235, 1, 0)
MouseClick("primary", 50, 235, 1, 0)
RptSend("{UP}", 16)
EndFunc
Func ResetBackcolorCbo()
MouseClick("primary", 125, 235, 1, 0)
MouseClick("primary", 125, 235, 1, 0)
RptSend("{UP}", 16)
EndFunc
Func RptSend($text, $rpt)
For $i = 1 To $rpt
Send($text)
Next
EndFunc
我只是将其保留在桌面上,现在每当必须打开vb6时,我都双击它,就像语法颜色在我的控制之下。
编辑1:对脚本进行了一些优化,以使其运行更快。我正在考虑建立一个程序,该程序将自动为您编辑VB6.EXE,以使颜色选择更加容易。我想知道是否有办法通过为VS创建插件来放弃AutoIt脚本?
编辑2:创建了一个实用程序,使您无需使用十六进制编辑器VbClassicColorEditor即可在exe中编辑颜色。该链接将转到bitbucket上的公共存储库。
我只想发布以前答案的摘要,因为尚不完全清楚在Excel VBA编辑器中更改颜色需要做什么。
在下面的示例中,我添加了Solarized的配色方案,并假设使用Office 2010
步骤0:在修改VBE7.dll之前先对其进行备份-已被警告!
步骤1:在十六进制编辑器中,打开位于@的VBE7.dll
"C:\Program Files\Common Files\microsoft shared\VBA\VBA7\VBE7.DLL"
对于64位
要么
"C:\Program Files( x86)\Common Files\microsoft shared\VBA\VBA7\VBE7.DLL"
对于32位
第2步:找到的第一次出现
ff ff ff 00 c0 c0 c0 00 80 80 80 00 00 00 00 00
ff 00 00 00 80 00 00 00 ff ff 00 00 80 80 00 00
00 ff 00 00 00 80 00 00 00 ff ff 00 00 80 80 00
00 00 ff 00 00 00 80 00 ff 00 ff 00 80 00 80 00`
并替换为
00 2b 36 00 07 36 42 00 58 6e 75 00 65 7b 83 00
83 94 96 00 93 a1 a1 00 ee e8 d5 00 fd f6 e3 00
b5 89 00 00 cb 4b 16 00 dc 32 2f 00 d3 36 82 00
6c 71 c4 00 26 8b d2 00 2a a1 98 00 85 99 00 00
步骤3:找到这种情况的第二次出现(确保从文件顶部开始搜索)
00 00 00 00 00 00 80 00 00 80 00 00 00 80 80 00
80 00 00 00 80 00 80 00 80 80 00 00 c0 c0 c0 00
80 80 80 00 00 00 ff 00 00 ff 00 00 00 ff ff 00
ff 00 00 00 ff 00 ff 00 ff ff 00 00 ff ff ff 00
并替换为
00 2b 36 00 07 36 42 00 58 6e 75 00 65 7b 83 00
83 94 96 00 93 a1 a1 00 ee e8 d5 00 fd f6 e3 00
b5 89 00 00 cb 4b 16 00 dc 32 2f 00 d3 36 82 00
6c 71 c4 00 26 8b d2 00 2a a1 98 00 85 99 00 00
步骤4:保存dll文件,然后打开Excel> VBA编辑器>工具>选项>编辑器格式并设置代码颜色。
更改两个字符串是必要的,因为它可以在关闭时正确保存颜色,并允许打开颜色编辑器而不会导致excel崩溃。
感谢所有以前的回答者花时间解决这个问题!
我创建了一个程序来自动化所有这些,花了太长时间,在创建拾色器方面很有趣。在VB6中制作,因为为什么不这样做。此处提供了已编译的程序和源代码。仅在我的DLL和VB6版本上进行了测试,请在进行任何更改之前先进行备份-代码中的位置已固定。
这是一个非常老的问题,但是我想为完整性考虑一下
对于VBA或VB6 IDE中的VS2012颜色:在以下位置打开VBE6.DLL / VBE7.DLL或VBA6.DLL
C:\Program Files (x86)\Common Files\microsoft shared\VBA\
or
C:\Program Files (x86)\VB98\ (Your VB6 install location)
与您的十六进制编辑器一起
替换第一次出现的
ff ff ff 00 c0 c0 c0 00 80 80 80 00 00 00 00 00
ff 00 00 00 80 00 00 00 ff ff 00 00 80 80 00 00
00 ff 00 00 00 80 00 00 00 ff ff 00 00 80 80 00
00 00 ff 00 00 00 80 00 ff 00 ff 00 80 00 80 00
用
ff ff ff 00 1e 1e 1e 00 d4 d4 d4 00 00 00 00 00
ff 00 00 00 26 4f 78 00 ff ff 00 00 d6 9d 85 00
00 ff 00 00 60 8b 4e 00 00 ff ff 00 00 80 80 00
00 00 ff 00 56 9c d6 00 ff 00 ff 00 9f 74 b1 00
然后返回顶部并替换第二次出现的
00 00 00 00 00 00 80 00 00 80 00 00 00 80 80 00
80 00 00 00 80 00 80 00 80 80 00 00 c0 c0 c0 00
80 80 80 00 00 00 ff 00 00 ff 00 00 00 ff ff 00
ff 00 00 00 ff 00 ff 00 ff ff 00 00 ff ff ff 00
与
00 00 00 00 56 9c d6 00 60 8b 4e 00 d6 9d 85 00
26 4f 78 00 9f 74 b1 00 d6 9d 85 00 1e 1e 1e 00
d4 d4 d4 00 00 00 ff 00 00 ff 00 00 00 ff ff 00
ff 00 00 00 ff 00 ff 00 ff ff 00 00 ff ff ff 00
然后在注册表中修改以下内容
(For VBA)
HKEY_CURRENT_USER\Software\Microsoft\VBA\6.0\Common
HKEY_CURRENT_USER\Software\Microsoft\VBA\7.1\Common
(For VB6)
HKEY_CURRENT_USER\Software\Microsoft\VBA\Microsoft Visual Basic
FontFace = 'Consolas'
CodeForeColors = '8 3 5 4 1 10 14 3 4 4 0 0 0 0 0 0 '
CodeBackColors = '2 6 4 8 10 2 2 2 16 10 11 12 13 14 15 0 '
如果您要为VBA进行修改,则已经完成,对于VB6,现在在Hex编辑器中打开“ VB6.exe”并修改第一次出现的
00 00 00 00 00 00 80 00 00 80 00 00 00 80 80 00
80 00 00 00 80 00 80 00 80 80 00 00 c0 c0 c0 00
80 80 80 00 00 00 ff 00 00 ff 00 00 00 ff ff 00
ff 00 00 00 ff 00 ff 00 ff ff 00 00 ff ff ff 00
与
00 00 00 00 56 9c d6 00 60 8b 4e 00 d6 9d 85 00
26 4f 78 00 9f 74 b1 00 d6 9d 85 00 1e 1e 1e 00
d4 d4 d4 00 00 00 ff 00 00 ff 00 00 00 ff ff 00
ff 00 00 00 ff 00 ff 00 ff ff 00 00 ff ff ff 00
这样可以校正VB6界面中显示的颜色,以便您可以对颜色进行其他更改。
谢谢所有其他答案,我自己并没有提出这个建议,只是认为将所有所需的信息都放在一个帖子中很有用(我看不到一起修改VB6.exe和VBA6.dll)。使用这种方法,您应该可以自由选择可用的颜色。
我还从其他一些答案中重新排列了颜色,因此不要更改vbRed,vbBlue,vbWhite等,因此您仍然应该在代码中获得所需的结果。这尚未经过全面测试,因此修改程序的风险自负。
组装一个可以为您完成此任务的小程序会很好(就像Gallaux一样),我在使用该程序写入注册表和VB6 IDE时遇到了问题,并且预览窗口会很不错。
我发现的局限性:这不会改变指示器图标的颜色,您必须自己进行操作。
从dnissley的响应中诱饵(他问有人是否可以添加一个插件),我为VB6添加了一个插件。这有点粗糙(稍后我将解释原因),但确实可以完成工作。
我在VB6中创建了一个新的外接程序项目,该项目为我提供了默认的“ frmAddin”表单(我不使用)和“连接”设计器。我自己添加了一个Color类,其中包含以下内容:
显式期权 昏暗的m_iForeColour作为整数 昏暗的m_iBackColour作为整数 昏暗的m_iIndicatorColour As Integer 公共属性Let ForeColour(ByVal iID为整数) m_iForeColour = iID 最终财产 公共属性获取ForeColour()为整数 ForeColour = m_iForeColour 最终财产 公共属性Let BackColour(ByVal iID为整数) m_iBackColour = iID 最终财产 公共属性获取BackColour()为整数 BackColour = m_iBackColour 最终财产 公共属性让IndicatorColour(ByVal iID作为整数) m_iIndicatorColour = iID 最终财产 公共属性以整数获取IndicatorColour() IndicatorColour = m_iIndicatorColour 最终财产
然后,我将“连接”设计器中的代码修改如下:
显式期权 公共表单显示为布尔值 公开VBInstance为VBIDE.VBE 昏暗mcbMenuCommandBar作为Office.CommandBarControl Dim mfrmAddIn作为新的frmAddIn 公共WithEvents MenuHandler As CommandBarEvents'命令栏事件处理程序 Dim mcbToolbar如Office.CommandBarControl 公共WithEvents MenuHandler2作为CommandBarEvents 暗淡的codeColours()作为颜色 '***************************************************** **************************** 'RunScript子 '------------------------------------------------- ---------------------------- 描述: '运行在代码窗口中设置代码窗口所需颜色的代码 活动的IDE。 '***必须先加载项目,然后才能正常工作*** '***************************************************** **************************** 子RunScript() ReadColoursFile '选择工具>选项 SendKeys“%to”,5 '转到标签,选择“选项” SendKeys“ + {TAB}” SendKeys“ {RIGHT}” '选择列表框 SendKeys“ {TAB}” 昏暗的颜色设置为颜色 Dim iColour作为整数 对于iColour = 0到9 SetColours iColour,codeColours(iColour) 下一个iColour SendKeys“〜” 结束子 '***************************************************** **************************** 'ReadColoursFile子 '------------------------------------------------- ---------------------------- 描述: '从磁盘读取颜色文件并填充codeColours数组 由SetColour *方法使用'从中选择正确的颜色 在选项屏幕上。 '***************************************************** **************************** 子ReadColoursFile() 暗色colourLine作为字符串 昏暗colourArray()作为字符串 昏暗的颜色设置为颜色 DiFoFSO作为FileSystemObject 设置oFSO = New FileSystemObject 如果不是oFSO.FileExists(App.Path&“ \ VB6CodeColours.dat”)然后 MsgBox“在&&App.Path,vbOKOnly中找不到” VB6CodeColours.dat“,”找不到VB6CodeColours设置文件!“ 退出子 万一 设置oFSO =否 打开App.Path和“ \ VB6CodeColours.dat”作为输入为#1 ReDim codeColours(9)作为颜色 虽然不是EOF(1) 线输入1,色线 colourArray = Split(colourLine,“,”) 如果IsNumeric(colourArray(0))然后 如果codeColours(colourArray(0))无效 设置颜色设置=新颜色 如果IsNumeric(colourArray(1))然后 colourSetting.ForeColour = CInt(colourArray(1)) 万一 如果IsNumeric(colourArray(2))然后 colourSetting.BackColour = CInt(colourArray(2)) 万一 如果是IsNumeric(colourArray(3)),则 colourSetting.IndicatorColour = CInt(colourArray(3)) 万一 设置codeColours(colourArray(0))= colourSetting 万一 万一 温德 关闭#1 设置颜色Setting = Nothing 结束子 '***************************************************** **************************** SetColours子 '------------------------------------------------- ---------------------------- 描述: '从列表中选择颜色项目,然后迭代颜色选择器 '与该项目关联的控件,并根据值进行设置 在VB6CodeColours.dat文件中设置。 '***************************************************** **************************** Sub SetColours(ByVal iColour为整数,ByRef colourSetting为颜色) Dim iKey作为整数 SendKeys“ {HOME}” 对于iKey = 1至iColour SendKeys“ {DOWN}” 下一个iKey SetColourSelector colourSetting.ForeColour SetColourSelector colourSetting.BackColour SetColourSelector colourSetting.IndicatorColour SendKeys“ + {TAB}” SendKeys“ + {TAB}” SendKeys“ + {TAB}” 结束子 '***************************************************** **************************** 'SetColourSelector子 '------------------------------------------------- ---------------------------- 描述: '在选择器组合中设置颜色。假设重点是 '在运行代码之前先进行控制( '承担控制权)。 '***************************************************** **************************** Sub SetColourSelector(ByVal iColour As Integer) Dim 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作为对象,custom()作为变体) 在错误转到To ErrorHandler '保存vb实例 设置VBInstance =应用 如果使用ConnectMode ext_cm_External然后 设置mcbMenuCommandBar = AddToAddInCommandBar(“ VB6代码颜色”) '认为事件 设置Me.MenuHandler = VBInstance.Events.CommandBarEvents(mcbMenuCommandBar) Dim oStdToolbar作为Office.CommandBar 将oStdToolbarItem设置为Office.CommandBarControl 设置oStdToolbar = VBInstance.CommandBars(“ Standard”) 设置oStdToolbarItem = oStdToolbar.Controls.Add(Type:= msoControlButton) oStdToolbarItem.Style = msoButtonCaption oStdToolbarItem.Caption =“设置IDE颜色” oStdToolbarItem.BeginGroup = True 设置Me.MenuHandler2 = VBInstance.Events.CommandBarEvents(oStdToolbarItem) 万一 退出子 ErrorHandler: MsgBox错误说明 结束子 '***************************************************** **************************** 'AddinInstance_OnDisconnection子 '------------------------------------------------- ---------------------------- 描述: '当IDE删除插件并清理所有插件时,此方法将运行 '参考等 '***************************************************** **************************** 私人子AddinInstance_OnDisconnection(ByVal RemoveMode为AddInDesignerObjects.ext_DisconnectMode,custom()为变体) 关于错误继续 '删除命令栏条目 mcbMenuCommandBar.Delete '关闭加载项 如果FormDisplayed然后 SaveSetting App.Title,“设置”,“ DisplayOnConnect”,“ 1” FormDisplayed =假 其他 SaveSetting App.Title,“设置”,“ DisplayOnConnect”,“ 0” 万一 卸载mfrmAddIn 设置mfrmAddIn = Nothing 设置MenuHandler = Nothing 设置MenuHandler2 =无 结束子 '***************************************************** **************************** 'MenuHandler_Click子 '------------------------------------------------- ---------------------------- 描述: '该方法执行单击菜单项时所需的任务。 '***************************************************** **************************** 私有子MenuHandler_Click(ByVal CommandBarControl作为对象,作为布尔处理,CancelDefault作为布尔) 运行脚本 结束子 '***************************************************** **************************** 'MenuHandler2_Click子 '------------------------------------------------- ---------------------------- 描述: '单击工具栏按钮时,此方法执行所需的任务。 '***************************************************** **************************** 私有子MenuHandler2_Click(ByVal CommandBarControl作为对象,作为布尔处理,CancelDefault作为布尔) 运行脚本 结束子 '***************************************************** **************************** 'AddToAddInCommandBar子 '------------------------------------------------- ---------------------------- 描述: '将指定的项目添加到菜单列表。 '***************************************************** **************************** 函数AddToAddInCommandBar(sCaption As String)作为Office.CommandBarControl Dim cbMenuCommandBar As Office.CommandBarControl'命令栏对象 昏暗的cbMenu作为对象 关于错误继续 '看看是否可以找到“加载项”菜单 设置cbMenu = VBInstance.CommandBars(“外接程序”) 如果cbMenu什么都没有,那么 '不可用,所以我们失败了 退出功能 万一 在错误转到To 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。我敢肯定,这里不需要进一步的解释:) *用户必须单击菜单/工具栏选项才能使其生效。*该代码的结构不是最好的(我认为),但是基于我当时可以投入的时间。我的目标是将来进行改进,但是在当前状态下对我来说效果很好(所以我可能会放弃!)
也许有基础,有人可以在此基础上进一步扩展。
这是保持颜色选择永久性的技巧。更多十六进制编辑。如果您进行了邦德建议的更换,则手边应该有以下几点:16种基本(经典)颜色的RGBA值从0到15进行索引,而自定义颜色的RGBA值以相同的方式进行索引。现在,在VBEx.DLL中搜索从“经典” RGBA值构建的字节序列,这些“ RGB”值按以下索引顺序排序:15、7、8、0、12、4、14、6、10、2、11、3、9、1 ,13、5(即白色,灰色,深灰色,黑色,红色,深红色等)。模式不是随机的,它是从值派生的,存储在注册表中,请参见Tex Hex的文章。搜索的十六进制字符串应类似于“ FFFFFF00C0C0C0008080800000000000FF000000 ...”,依此类推。总共为64个字节。用相同顺序排列的“自定义”颜色的RGBA值替换找到的字节序列,例如15、7、8等。现在,在VS UI中选择的所有颜色都将存储在注册表中,并在应用程序重新启动后应用。好吧,除了“指示器”颜色以外,所有颜色。这些总是重置为默认值。笔记:
UPD:已通过MSO2007(VBE6.DLL)和MSO2013(VBE7.DLL)进行测试。像魅力一样工作。
Bond的解决方案(在VB6.exe中编辑颜色表)非常适合在VB6 IDE中修改颜色表。但是,我发现,当选择一种修改的颜色并关闭VB6时,VB6无法将修改后的颜色正确保存到注册表中。
通常,对于每个可以修改其颜色的文本项,VB6会将索引写入16值颜色表。
颜色索引在此处写入注册表:
HKEY_CURRENT_USER\Software\Microsoft\VBA\Microsoft Visual Basic\CodeForeColors
HKEY_CURRENT_USER\Software\Microsoft\VBA\Microsoft Visual Basic\CodeBackColors
例如,CodeForeColors值将如下所示:
6 14 5 0 1 3 13 4 15 0 0 0 0 0 0 0
从1到16的值表示颜色表中的颜色,0表示“自动”。
但是,当选择修改的颜色时,VB6会将超出索引范围的数字写入注册表,并且CodeForeColors值将如下所示:
5245006 14 5 0 1 3 13 4 15 0 0 0 0 0 0 0
下次启动VB6时,将无法为已设置为修改后的颜色的项目设置正确的颜色。
我仍在尝试找出解决方案,但想发布到目前为止找到的内容。