Microsoft VBAエディタでカスタムカラーを使用するには?

microsoft-excel-2007 microsoft-office text-editors vba

仕事で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進数エディタを使用せずにカスタムカラーを使用することができます

ss

こちらからダウンロードできます。https://github.com/gallaux/VBEThemeColorEditor

Enjoy

編集:ソースコードを公開しました

17  gallaux  2016-11-21


TeX HeX はその通りです。しかし、16色の内蔵色を自分の色に変更することは可能です。それにはちょっとした16進数の編集が必要です。ここにステップバイステップのガイドがあります。(注: これは VB6 SP6, ファイルバージョン 6.0.97.82 のためのものです)

  1. VB6.EXEファイルをVB98プログラムフォルダにバックアップします。(オプションですが、推奨)

  2. お気に入りの六角エディタを起動して(HxDに絶賛)、VB6.EXEを開きます

  3. アドレス 0xE22F4 にジャンプします。これがカラーテーブルの開始点です

4つのゼロが表示されているはずです。これは RRGGBBAA 形式の黒を表しています(アルファはサポートされていないので、実際には RRGGBB00 形式です)。次の 4 バイトは次の色を指定し、オフセット 0xE2333 で終了する FFFFFF00 (白) に到達するまで、次の色を指定します

  1. これらの4バイト値のいずれかを選択して編集します。適切な 16 進数の値を RGB 形式で使用し、その後にゼロバイトを付けてください。例えば、RGB(64, 128, 192)は40 80 C0 00となります

  2. 変更内容を 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で選択したすべての色がレジストリに保存され、アプリケーションの再起動後に適用されます。まあ、すべて、しかし、「インジケータ」色。これらは常にデフォルトにリセットされます。注意事項

  1. VBE7.DLL (MSO2010)では、オフセット0x15A98Cでこのように順序づけられたバイト列が1つだけ見つかりました
  2. Bond’s の投稿で述べたように、最初の置換にはいくつかのバイト列があります(基本的な RGBA の値は 0 から 15 までまっすぐに並んでいます)。私は前のノート(0x15A5ACで発見された)からのオフセットに最も近い1つだけを変更しました
  3. 上記のことは全て自己責任で行ってください。)そして、バックアップを忘れないでください

Tex HexBondの初期研究に感謝します

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


タイトルとURLをコピーしました