仕事でExcelやVBAを使ったプロジェクトをいくつかやっているので、仕方なくMicrosoft Visual Basicのエディタを使っています。普通なら気にしないのですが、エディタにカスタムカラーを設定する方法がわかりません(デフォルトのパレットからしか選択できません)
現在の色を変更するには、私はTools -> Options -> Editor Format
に行きます…しかし、あなたの選択はデフォルトの(そして基本的な)16色に限定されています – そして、私が基本と言ったとき、私はピンク、青、黒、白などのような基本的なことを意味します
誰もがどちらかのカスタムカラーを指定したり、少なくとも、デフォルトのパレットに表示される色のいくつかを変更する方法を知っていますか?
35 None 2011-07-21
VBAは、これらのレジストリ・キーから色の設定を読み込みます
HKEY_CURRENT_USER\Software\Microsoft\VBA\6.0\Common\CodeForeColors HKEY_CURRENT_USER\Software\Microsoft\VBA\6.0\Common\CodeBackColors
これらのキーには、Tools -> Options -> Editor Format内の各エントリの値のリスト(スペースで区切られています)が含まれています。例えば、CodeBackColors内の最初の値は背景色であり、CodeForeColors内の最初の値は通常のテキストの前景色である。値は色の内部IDで、0はAUTOカラーリング、11はシアン、5は赤などを表します
試してみるにはExcelを閉じ、CodeBackColorsの最初の値を5に変更し、Excelを再起動します。これでコードエディタの背景が赤になります
問題は、VBAエディタがこれらの内部値しかサポートしておらず、理解できる最大値は16です。それ以外の値は受け入れられず、デフォルトはAUTOに戻ります
異なる値を入力するオプション(例:128255128、16777215、#aaffee、255、”170,255,238″)をいくつか試してみましたが、どれもうまくいきませんでした
そのため、技術的には他の色を割り当てることはできないと思います
20 Tex Hex 2011-07-27
こちらの情報を元にアプリを作成してみました。https://github.com/dimitropoulos/VBECustomColors
これは基本的にはVBE6/VBE7の.dllファイルをバックアップし、16進数エディタを使用せずにカスタムカラーを使用することができます
こちらからダウンロードできます。https://github.com/gallaux/VBEThemeColorEditor
Enjoy
編集:ソースコードを公開しました
17 gallaux 2016-11-21
TeX HeX はその通りです。しかし、16色の内蔵色を自分の色に変更することは可能です。それにはちょっとした16進数の編集が必要です。ここにステップバイステップのガイドがあります。(注: これは VB6 SP6, ファイルバージョン 6.0.97.82 のためのものです)
VB6.EXEファイルをVB98プログラムフォルダにバックアップします。(オプションですが、推奨)
お気に入りの六角エディタを起動して(HxDに絶賛)、VB6.EXEを開きます
アドレス 0xE22F4 にジャンプします。これがカラーテーブルの開始点です
4つのゼロが表示されているはずです。これは RRGGBBAA 形式の黒を表しています(アルファはサポートされていないので、実際には RRGGBB00 形式です)。次の 4 バイトは次の色を指定し、オフセット 0xE2333 で終了する FFFFFF00 (白) に到達するまで、次の色を指定します
これらの4バイト値のいずれかを選択して編集します。適切な 16 進数の値を RGB 形式で使用し、その後にゼロバイトを付けてください。例えば、RGB(64, 128, 192)は40 80 C0 00となります
変更内容を EXE に保存し、VB6 を起動します。新しい色が、以前はビルトインVBの色で占められていたスロットに表示されているはずです
7 Bond 2013-02-06
多くの人が指摘しているように、ボンドの解決策(VB6.exeのカラーテーブルを16進数で編集する)は機能しますが、VB6を起動するたびにオプションダイアログで色をリセットしなければなりません。AutoIt スクリプトを作成しました
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: 16進エディタを使わずにexe内の色を編集できるユーティリティを作成しました。VbClassicColorEditor です。このリンクは bitbucket の公開リポジトリにあります
6 Dylan Nissley 2013-06-24
ただ、Excel VBAエディタで色を変更するには何をすればいいのかがよくわからないので、以前の回答をまとめて投稿したいと思いました
以下の例では、Solarizedの配色を追加しています
ステップ0: 変更する前にVBE7.dllのバックアップを作成してください
ステップ1: Hex Editorで、@にあるVBE7.dllを開きます
"C:\Program Files\Common Files\microsoft shared\VBA\VBA7\VBE7.DLL"
64bit版
or
32bit版では<++1
ステップ2:1回目のオカズを探す
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: 2回目の検索(ファイルの上から検索することを確認してください)
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 Editor> Tools> Options> Editor Formatを開き、コードの色を設定します
それはシャットダウン時に正しく保存する色を可能にし、カラーエディタがクラッシュせずに開くことができますので、両方の文字列を変更することはnessecaryです
以前の回答者の皆様、時間をかけてこの問題を解決してくれてありがとうございます
4 Steven Martin 2016-01-09
このすべてを自動化するプログラムを作って、それにあまりにも長い時間を費やして、カラーピッカーを作って楽しんでいました。なぜならば、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)
を使用して、16進数エディタを使用してください
の最初の出現を置き換えます
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
With
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
そしてトップに戻り、2回目の発生を入れ替えます
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
with
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
with
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のインターフェイスに表示されている色が修正されますので、他の色に変更を加えたい場合には変更が可能です
他の回答者の皆様、ありがとうございます。私自身はこれを思いついたわけではなく、必要なすべての情報を1つの投稿にまとめておくことが便利だと思っただけです(VB6.exeとVBA6.dllを一緒に修正しているところはどこにも見当たりませんでした)。この方法を使えば、利用可能な色から自由に選択できるはずです
私はまた、他の回答のいくつかから色を並べ替えましたので、vbRed, vbBlue, vbWhiteなどを変更しないようにしてください。これは完全にテストされていないので、常に自己責任でプログラムを変更してください
それはあなたのためにこれを行う小さなプログラムを一緒に置くには良いだろう(gallauxがやったように)、私はレジストリとそのプログラムを使用してVB6 IDEへの書き込みに問題があったし、プレビューウィンドウの並べ替えに来るのは良いだろう
私が見つけた制限:これはインジケータのアイコンの色を変更することはできません、あなたは自分でこれを行う必要があります
4 Sam 2018-02-20
dnissleyさんの回答(誰かアドインを作ってくれないかという質問)を参考にして、VB6用のアドインを作ってみました。少し粗雑ですが(理由は後ほど説明します)、仕事をしてくれます
私はVB6で新しいアドインプロジェクトを作成し、デフォルトの “frmAddin “フォーム(これは私が使用していません)と “Connect “デザイナーを与えてくれました。私は以下を含むカラークラスを自分で追加しました
Option Explicit Dim m_iForeColour As Integer Dim m_iBackColour As Integer Dim m_iIndicatorColour As Integer Public Property Let ForeColour(ByVal iID As Integer) m_iForeColour = iID End Property Public Property Get ForeColour() As Integer ForeColour = m_iForeColour End Property Public Property Let BackColour(ByVal iID As Integer) m_iBackColour = iID End Property Public Property Get BackColour() As Integer BackColour = m_iBackColour End Property Public Property Let IndicatorColour(ByVal iID As Integer) m_iIndicatorColour = iID End Property Public Property Get IndicatorColour() As Integer IndicatorColour = m_iIndicatorColour End Property
そして、「Connect」デザイナーのコードを以下のように修正しました
Option Explicit Public FormDisplayed As Boolean Public VBInstance As VBIDE.VBE Dim mcbMenuCommandBar As Office.CommandBarControl Dim mfrmAddIn As New frmAddIn Public WithEvents MenuHandler As CommandBarEvents 'command bar event handler Dim mcbToolbar As Office.CommandBarControl Public WithEvents MenuHandler2 As CommandBarEvents Dim codeColours() As Colour '***************************************************************************** ' RunScript Sub '----------------------------------------------------------------------------- ' DESCRIPTION: ' Runs the code that sets the required colours for the code window in the ' active IDE. ' *** A PROJECT MUST BE LOADED BEFORE THIS WILL ACTUALLY WORK *** '***************************************************************************** Sub RunScript() ReadColoursFile ' Select Tools > Options SendKeys "%to", 5 ' Go to tabs, select "Options" SendKeys "+{TAB}" SendKeys "{RIGHT}" ' Select listbox SendKeys "{TAB}" Dim colourSetting As Colour Dim iColour As Integer For iColour = 0 To 9 SetColours iColour, codeColours(iColour) Next iColour SendKeys "~" End Sub '***************************************************************************** ' ReadColoursFile Sub '----------------------------------------------------------------------------- ' DESCRIPTION: ' Reads the colour file from disk and populates the codeColours array which ' is used by the SetColour* methods for selecting the correct colours from ' the options screen. '***************************************************************************** Sub ReadColoursFile() Dim colourLine As String Dim colourArray() As String Dim colourSetting As Colour Dim oFSO As FileSystemObject Set oFSO = New FileSystemObject If Not oFSO.FileExists(App.Path & "\VB6CodeColours.dat") Then MsgBox "VB6CodeColours.dat not found in " & App.Path, vbOKOnly, "VB6CodeColours Settings file not found!" Exit Sub End If Set oFSO = Nothing Open App.Path & "\VB6CodeColours.dat" For Input As #1 ReDim codeColours(9) As Colour While Not EOF(1) Line Input #1, colourLine colourArray = Split(colourLine, ",") If IsNumeric(colourArray(0)) Then If codeColours(colourArray(0)) Is Nothing Then Set colourSetting = New Colour 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 Set codeColours(colourArray(0)) = colourSetting End If End If Wend Close #1 Set colourSetting = Nothing End Sub '***************************************************************************** ' SetColours Sub '----------------------------------------------------------------------------- ' DESCRIPTION: ' Selects the colour item from the list and then iterates the colour selector ' controls associated with that item and sets them according to the values ' set in the VB6CodeColours.dat file. '***************************************************************************** Sub SetColours(ByVal iColour As Integer, ByRef colourSetting As Colour) Dim iKey As Integer SendKeys "{HOME}" For iKey = 1 To iColour SendKeys "{DOWN}" Next iKey SetColourSelector colourSetting.ForeColour SetColourSelector colourSetting.BackColour SetColourSelector colourSetting.IndicatorColour SendKeys "+{TAB}" SendKeys "+{TAB}" SendKeys "+{TAB}" End Sub '***************************************************************************** ' SetColourSelector Sub '----------------------------------------------------------------------------- ' DESCRIPTION: ' Sets the colour in the selector combo. Assumes the focus is on the ' preceeding control before the code is run (first line tabs to the ' assumed control). '***************************************************************************** Sub SetColourSelector(ByVal iColour As Integer) Dim iKey As Integer SendKeys "{TAB}" SendKeys "{HOME}" For iKey = 1 To iColour SendKeys "{DOWN}" Next iKey End Sub '***************************************************************************** ' AddinInstance_OnConnection Sub '----------------------------------------------------------------------------- ' DESCRIPTION: ' This method runs when the addin is loaded by the IDE '***************************************************************************** Private Sub AddinInstance_OnConnection(ByVal Application As Object, ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst As Object, custom() As Variant) On Error GoTo ErrorHandler 'save the vb instance Set VBInstance = Application If ConnectMode ext_cm_External Then Set mcbMenuCommandBar = AddToAddInCommandBar("VB6 Code Colouring") 'sink the event Set Me.MenuHandler = VBInstance.Events.CommandBarEvents(mcbMenuCommandBar) Dim oStdToolbar As Office.CommandBar Dim oStdToolbarItem As Office.CommandBarControl Set oStdToolbar = VBInstance.CommandBars("Standard") Set oStdToolbarItem = oStdToolbar.Controls.Add(Type:=msoControlButton) oStdToolbarItem.Style = msoButtonCaption oStdToolbarItem.Caption = "Set IDE Colours" oStdToolbarItem.BeginGroup = True Set Me.MenuHandler2 = VBInstance.Events.CommandBarEvents(oStdToolbarItem) End If Exit Sub ErrorHandler: MsgBox Err.Description End Sub '***************************************************************************** ' AddinInstance_OnDisconnection Sub '----------------------------------------------------------------------------- ' DESCRIPTION: ' This method runs when the addin is removed by the IDE and cleans up any ' references etc. '***************************************************************************** Private Sub AddinInstance_OnDisconnection(ByVal RemoveMode As AddInDesignerObjects.ext_DisconnectMode, custom() As Variant) On Error Resume Next 'delete the command bar entry mcbMenuCommandBar.Delete 'shut down the Add-In If FormDisplayed Then SaveSetting App.Title, "Settings", "DisplayOnConnect", "1" FormDisplayed = False Else SaveSetting App.Title, "Settings", "DisplayOnConnect", "0" End If Unload mfrmAddIn Set mfrmAddIn = Nothing Set MenuHandler = Nothing Set MenuHandler2 = Nothing End Sub '***************************************************************************** ' MenuHandler_Click Sub '----------------------------------------------------------------------------- ' DESCRIPTION: ' This method performs the tasks needed when the menu item is clicked. '***************************************************************************** Private Sub MenuHandler_Click(ByVal CommandBarControl As Object, handled As Boolean, CancelDefault As Boolean) RunScript End Sub '***************************************************************************** ' MenuHandler2_Click Sub '----------------------------------------------------------------------------- ' DESCRIPTION: ' This method performs the tasks needed when the toolbar button is clicked. '***************************************************************************** Private Sub MenuHandler2_Click(ByVal CommandBarControl As Object, handled As Boolean, CancelDefault As Boolean) RunScript End Sub '***************************************************************************** ' AddToAddInCommandBar Sub '----------------------------------------------------------------------------- ' DESCRIPTION: ' Adds the specified item to the menu list. '***************************************************************************** Function AddToAddInCommandBar(sCaption As String) As Office.CommandBarControl Dim cbMenuCommandBar As Office.CommandBarControl 'command bar object Dim cbMenu As Object On Error Resume Next 'see if we can find the Add-Ins menu Set cbMenu = VBInstance.CommandBars("Add-Ins") If cbMenu Is Nothing Then 'not available so we fail Exit Function End If On Error GoTo ErrorHandler 'add it to the command bar Set cbMenuCommandBar = cbMenu.Controls.Add(1) 'set the caption cbMenuCommandBar.Caption = sCaption Set AddToAddInCommandBar = cbMenuCommandBar Exit Function ErrorHandler: ' Exit gracefully End Function
このコードは、アプリケーションが.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
意味不明なようですが、説明します。Code Colour”, “Foreground”, “Background”,Indicator “というフォーマットになっているので、上段の「通常のテキスト」は、前景は14番目、背景は12番目、Indicatorは1番目のコンボの項目に設定されています
下品な解決策だと言った理由は?* SendKeysを使用しています。これ以上の説明は必要ありません。)* 有効にするためには、ユーザーはメニューやツールバーのオプションをクリックしなければなりません。* このコードは(私の考えでは)最良の構造ではありませんが、私がその時にそれに捧げることができる時間の量に基づいています。将来的には改善することを目指していますが、現在の状態では私にとっては問題なく動作しています(なので、おそらくそのままにしておきます!)
おそらく、根拠があれば、誰かがそれをさらに拡大することができます
3 jonifen 2014-01-03
色の選択をパーマネントにするコツをご紹介します。もう少し16進数の編集。Bondで提案されている置換を行った場合、あなたの手元には次のようなものがあるはずです。基本的な (古典的な) 16 色の RGBA 値は 0 から 15 までインデックス化されており、カスタム色の RGBA 値も同じようにインデックス化されています。ここで VBEx.DLL を検索して、次のインデックスのシーケンスで順序付けされた「古典的な」RGBA 値から構築されたバイトシーケンスを求めます:15、7、8、0、12、4、14、6、10、2、11、3、9、1、13、5(すなわち、白、灰色、濃い灰色、黒、赤、濃い赤など)。パターンはランダムではなく、それはレジストリに格納されている値から派生したもので、テックスヘックスのポストを参照してください。検索用の16進数文字列は’FFFFF00C0C0C0C0008080800000000000FF000000…’などのようになります。合計64バイト。見つかったバイト列を、同じように順序づけられた「カスタム」カラーの RGBA 値で置き換えます(例:15、7、8、など)。これで、VS UIで選択したすべての色がレジストリに保存され、アプリケーションの再起動後に適用されます。まあ、すべて、しかし、「インジケータ」色。これらは常にデフォルトにリセットされます。注意事項
- VBE7.DLL (MSO2010)では、オフセット0x15A98Cでこのように順序づけられたバイト列が1つだけ見つかりました
- Bond’s の投稿で述べたように、最初の置換にはいくつかのバイト列があります(基本的な RGBA の値は 0 から 15 までまっすぐに並んでいます)。私は前のノート(0x15A5ACで発見された)からのオフセットに最も近い1つだけを変更しました
- 上記のことは全て自己責任で行ってください。)そして、バックアップを忘れないでください
UPD: MSO2007 (VBE6.DLL)とMSO2013 (VBE7.DLL)でテストしました。魅力のように動作します
2 dias 2015-08-14
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を起動すると、修正色に設定していた項目に正しい色を設定できなくなります
私はまだ解決策を見つけようとしていますが、私がこれまでに見つけたものを投稿したいと思いました
2 ravanbak 2013-03-28