Özel renkleri Microsoft VBA editöründe nasıl kullanabilirim?


33

Excel ve VBA kullanarak birkaç proje üzerinde çalışıyorum, bu yüzden Microsoft Visual Basic editörünü kullanmaktan başka çarem yok. Normalde umursamazdım, ama editör için nasıl özel bir rengin ayarlanacağını çözemiyorum (yalnızca varsayılan paletten seçebilirim).

Şu anda rengi değiştirmek için, gidiyorum Tools -> Options -> Editor Format... Ancak, seçimleriniz yalnızca varsayılan (ve temel) 16 renkle sınırlıdır - ve temel derken, basit , pembe, mavi, siyah, beyaz vb. ..

Özel bir rengin nasıl belirleneceğini bilen veya en azından varsayılan palette görünen renklerin bazılarını değiştiren kimse var mı?


Microsoft'un bize anlatmaya çalıştığı şeyin, insanların VBA'da programlanmasını istemedikleri olduğunu düşünüyorum. Ya da belki Bill Gates, ağrı kesici üreticilerine ağır.
Holene

Yanıtlar:


19

VBA, renklerin ayarlarını şu kayıt defteri anahtarlarından okur:

HKEY_CURRENT_USER \ Yazılım \ Microsoft \ VBA \ 6.0 \ Ortak \ CodeForeColors HKEY_CURRENT_USER \ Yazılım \ Microsoft \ VBA \ 6.0 \ Ortak \ CodeBackColors

Bu tuşların her biri, Araçlar -> Seçenekler -> Editör Formatı içindeki her giriş için bir değer listesi (boşlukla ayrılmış) içerir. Örneğin, CodeBackColors içindeki ilk değer arka plan rengidir ve CodeForeColors içindeki ilk değer normal metin için ön plan rengidir. Değerler rengin iç kimliğidir, 0 AUTO renklendirmesi, 11 mavi, 5 kırmızı vb. Anlamına gelir.

Denemek için: Excel'i kapatın, ilk CodeBackColors değerini 5 olarak değiştirin ve Excel'i yeniden başlatın. Kod editörünün arka planı şimdi kırmızı olacaktır.

Sorun, VBA Editörünün sadece bu dahili değerleri desteklemesi ve anladığı en yüksek sayı 16 olmasıdır.

Farklı değerler girmek için çeşitli seçenekler denedim (örneğin 128255128, 16777215, #aaffee, 255 veya "170,255,238") ve hiçbiri işe yaramadı.

Bu nedenle teknik olarak başka renkleri atamanın mümkün olmadığını düşünüyorum.


1
Cevap için teşekkürler. IIRC, bir ödül geri alamazsınız, ancak bunu tam anlamıyla yapamazsanız, o zaman en doğru cevabı size vereceğim. Başka cevapların gönderilip gönderilmediğini görmek için biraz daha beklemek istiyorum, ancak cevabınız için teşekkür ederiz +1.
Atılım

1
İtiraf etmeliyim ki, bu daha da iyi geliyor :)
Tex Hex

FMS'den "Toplam Görsel Kod Araçları" ( fmsinc.com/vb6/CodingTools.html ), "Editörünüzün renklerini kolayca görmek ve ayarlamak için" VBE Renk Düzeni yöneticisi "aracına sahiptir. Kullanım kılavuzunu (PDF) indirirseniz, renkleri ayarlamayı kolaylaştırırken 16 renk paleti ile sınırlandırılmış ekran görüntülerini gösterir. Özel renkler kullanmanın doğrudan bir yolu olsaydı, bu araca dahil edeceklerini düşünürdüm. Tex Hex doğru gibi görünüyor.
Brian

Aşağıda verilen cevaplarla mümkün olduğu gösterildiği için bu cevap değiştirilmelidir. Bir HEX editörü kullanarak VBA Editöründeki renkleri güvenilir bir şekilde değiştirmek mümkündür.
Steven Martin

16

Burada bulunan bilgilere dayanarak bir uygulama oluşturdum: https://github.com/dimitropoulos/VBECustomColors

Temelde VBE6 / VBE7 .dll dosyasını yedekler ve bir hex editörü kullanmak zorunda kalmadan özel renk kullanımına izin verir.

ss

Buradan indirebilirsiniz: https://github.com/gallaux/VBEThemeColorEditor

Keyfini çıkarın

Düzenleme: Kaynak kodu şimdi mevcuttur!


Vay süper cool, @ gallaux paylaştığınız için teşekkür ederiz - Kesinlikle bu kontrol edeceğim. Kaynak kodunu meraktan çıkarmayı mı planlıyorsunuz?
Atılım

Evet yakında, biraz temizlemem gerekecek;)
gallaux

Teşekkürler Gallaux, ben de aynı şeyi yapmayı düşünüyordum, ancak bir kez vba editörümü sevdiğim renk şemasına getirdiğimde, bu motivasyonu kaybettim çünkü artık "16 renkli göz yorgunluğu kırılmış" değildim!
Steven Martin

1
Bunu nasıl
yaptığım için

1
@YouCrackedMeUp regedit'i kullanarak kayıt defteri anahtarını güncellemeniz gerekir ( github.com/dimitropoulos/VBECustomColors'a dayanarak ): [1] Regedit'e gidin HKEY_CURRENT_USER\Software\Microsoft\VBA\7.1\Common. [2] bir değişiklik CodeBackColorsiçin: 2 7 1 13 15 2 2 2 11 9 0 0 0 0 0 0. [3] bir değişiklik CodeForeColorsiçin: 13 5 12 1 6 15 8 5 1 1 0 0 0 0 0 0. [4] bir değişiklik FontFaceiçin: Consolas.
Tigregalis

7

TeX HeX açıktır. Bununla birlikte, 16 yerleşik rengi kendinizle değiştirmek mümkündür. Sadece biraz hex düzenleme gerektiriyor. İşte adım adım kılavuz. (Not: Bu VB6 SP6 içindir, dosya sürümü 6.0.97.82).

  1. VB6.EXE dosyanızı VB98 program klasörünüzde yedekleyin. (İsteğe bağlı, ancak önerilir).

  2. En sevdiğin hex editörünü ateşle (HxD'ye bağır) ve VB6.EXE'yi aç.

  3. 0xE22F4 adresine atla. Bu renk tablosunun başlangıcıdır.

Dört tane sıfır görmelisin. Bu, RRGGBBAA biçiminde siyah rengi temsil eder (alfa desteklenmiyor, bu yüzden gerçekten sadece RRGGBB00 biçiminde). Sonraki dört bayt, 0xE2333 ofsetinde biten FFFFFF00'e (beyaz) ulaşana kadar bir sonraki rengi belirtir.

  1. Bu dört baytlık değerlerden istediklerinizi düzenleyin. Sadece RGB formatındaki uygun hex değerlerini kullanın, ardından sıfır bayt kullanın. Örneğin, RGB (64, 128, 192) 40 80 C0 00 olacaktır.

  2. Değişikliklerinizi EXE'ye kaydedin ve VB6'yı ateşleyin. Yeni renginizi daha önce yerleşik VB renklerinin kapladığı yuvalarda görmelisiniz.


1
Hmm, aracıyla 2003 ofisindeki bir sistemdeki her şeyi aradım ve VB6.exe veya VB98 adlı bir dosyayı bulamıyor. Bu yanıt sadece OP'nin sahip olduğu Office 2007 için mi? Ancak 6.0.97.82 sürümü Office 2003 ile birlikte benimkilerden daha eski.
nixda

1
@ nixda Benim sistemimde de bir şey yok - Sanırım Bond, Excel'deki VBA'dan değil, sistemindeki VB6 uygulamasından bahsediyor. Excel'de çalıştırılabilir dosyalara ve VBA DLL dosyalarından bazılarına göz atacağım ve herhangi bir renk tablosu bulabilecek miyim bir bakacağım.
Atılım

1
Bilgisayarımda Office 2010 var, bu yüzden VBE7.DLL, VBE6.DLL değil, aynı işlem olmalı. Renkler aynı. Renklere görüntülendikleri sırayla bakarsanız, bunlar: Siyah = 00 00 00 00 Donanma = 00 00 80 00 Yeşil = 00 80 00 00 Turkuaz = 00 80 80 00 Macenta = 80 00 00 00 Mor = 80 00 80 00 Zeytin = 80 80 00 00 Lgt Gri = C0 C0 C0 00 Drk Gri = 80 80 80 00 ... Her birinin yanına onaltılık renk kodları ekledim. Bu yüzden sadece bir hex editör VBE6.DLL açın ve aşağıdaki hex dizesini arayın:
Bond

1
00000000000080000080000000808000800000008000800080800000C0C0C00080808000 Birden çok kez oluşabilir, ancak ilk renk tablosunun değiştirilmesi gereken tek şey olduğunu buldum. Bunun senin için işe yarayıp yaramadığına bak.
Bond

1
Müthiş cevap Bond. Gelecekteki okuyucular için, değiştirmem gereken anahtar, Hex Edit (Bayt No. 1.200.308)
Andy Terra

5

Birçok kişinin belirttiği gibi, Bond'un çözümü (VB6.exe'deki renkler tablosunu düzenleyen hex) işe yarayacak ancak VB6'yı her başlattığınızda seçenekler iletişim kutusunda renklerinizi girmeniz ve sıfırlamanız gerekecek. Tüm işi sizin için yapacak bir AutoIt betiği hazırladım , SetSyntaxColoring () işlevine yapılan tüm çağrıların yapılacağı yeri gerektiği gibi düzenleyin:

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

Ben sadece masaüstümde tutuyorum ve şimdi ne zaman vb6'yı açmak zorunda kalsam, onu çift tıklıyorum ve tıpkı sözdizimi renklendirmesi benim kontrolüm altında.

Düzenleme 1: Betiği daha hızlı çalışması için biraz optimize etti. Renk seçimini kolaylaştırmak için VB6.EXE dosyasını sizin için otomatik olarak düzenleyecek bir program hazırlamayı düşünüyorum. VS için bir eklenti oluşturarak AutoIt betiğini atmanın bir yolu olup olmadığını merak ediyorum?

Düzenleme 2: Bir exe editörü kullanmanıza gerek kalmadan exe içindeki renkleri düzenlemenizi sağlayan bir yardımcı program yarattı : VbClassicColorEditor . Bu bağlantı bitbucket'teki kamu havuzuna gider.


Senaryo ve katkı için teşekkür ederiz! VbClassicColorEditor'da güncellenmiş bir bağlantı alma şansımız var mı? Yayınladığınız bir ... 404d sahiptir
Andy terra

3

Sadece önceki cevapların bir özetini yayınlamak istedim çünkü Excel VBA Editor'da renkleri değiştirmek için ne yapılması gerektiği tam olarak açık değildi.

Aşağıdaki örnekte Solarized için renk şemasını ekliyorum ve Office 2010'un kullanımını varsayıyorum

Adım 0: VBE7.dll dosyasını değiştirmeden önce bir yedeğini alın - uyardınız !!!

Adım 1: Bir Hex Editor'da, @ içinde bulunan VBE7.dll dosyasını açın.

"C:\Program Files\Common Files\microsoft shared\VBA\VBA7\VBE7.DLL" 64bit için

veya

"C:\Program Files( x86)\Common Files\microsoft shared\VBA\VBA7\VBE7.DLL" 32bit için

Adım 2: 1. oluşumunu bulun

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`

ve ile değiştirin

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. Adım: Bunun 2. oluşumunu bulun (dosyanın üstünden aradığınızdan emin olun)

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

ve ile değiştirin

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

Adım 4: dll dosyasını kaydedin ve ardından Excel> VBA Editor> Araçlar> Seçenekler> Editör Formatı'nı açın ve kod renklerini ayarlayın.

Her iki dizenin de değiştirilmesi, renklerin kapanırken doğru şekilde kaydedilmesine izin verdiği ve renk düzenleyicinin mükemmel bir şekilde çökmesini sağlayarak açmasına izin verdiği için gereklidir.

Bunu bulmak için zaman ayırdığınız için önceki tüm cevaplayıcılara teşekkürler!


3

Bunların hepsini otomatikleştiren, üzerinde çok uzun zaman harcayan, renk seçici yaratan bir program yarattım. VB6'da yapıldı, çünkü neden olmasın. Derlenmiş program ve kaynak kodu burada mevcut . Yalnızca DLL ve VB6 sürümlerimde test edildi, lütfen bir şey değiştirmeden önce yedekleme yapın - konumlar kodda sabitlenir.



Bu çok eski bir soru ama bütünlük için tartmak istiyorum

VBA veya VB6 IDE'deki VS2012 Renkleri için: içinde VBE6.DLL / VBE7.DLL veya VBA6.DLL dosyasını açın.

C:\Program Files (x86)\Common Files\microsoft shared\VBA\
or
C:\Program Files (x86)\VB98\ (Your VB6 install location)

hex editörünle

İlk oluşumunu değiştirin

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

İle

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

Sonra en başa dön ve ikinci oluşumunu değiştir

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

ile

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

Sonra kayıt defterinde aşağıdakileri değiştirin

(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 '

Eğer VBA için değişiklik yapıyorsanız, bitirdiniz, VB6 için şimdi Hex editörünüzde 'VB6.exe'yi açın ve ilk oluşumunu değiştirin.

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

ile

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

Bu, VB6 arayüzünde görüntülenen rengi düzeltir, böylece renkler üzerinde başka değişiklikler yapmak isterseniz.

Diğer cevapların hepsine teşekkür ederim, kendim gelmedim, sadece tek bir gönderide gerekli tüm bilgileri almanın yararlı olduğunu düşündüm (hiçbir yerde birlikte VB6.exe ve VBA6.dll değiştirmeyi gördüm). Bu yöntemi kullanarak mevcut renkler arasından özgürce seçim yapabilmelisiniz.

Ben de diğer cevapların bazılarından renkleri yeniden sıraladım, bu yüzden vbRed, vbBlue, vbWhite vb değişmedi, bu yüzden hala kodda istenen sonucu almalısınız. Bu tamamen test edilmemiştir, bu nedenle programları daima kendi sorumluluğunuzda değiştirirsiniz.

Bunu sizin için yapacak küçük bir programı bir araya getirmek güzel olurdu (gallaux gibi), kayıt defterini ve VB6 IDE'yi bu programı kullanarak yazmakla ilgili sorunlarım vardı ve önizleme penceresinin bir nevi güzel olurdu.

Bulduğum Sınırlamalar: Bu, gösterge simgelerinin rengini değiştirmez, bunu kendiniz yapmanız gerekir.


2

Yemini dnissley'nin cevabından alarak (birinin bir eklenti yapıp yapamayacağını sorduğunu), VB6 için bir eklenti yaptım. Biraz kaba (ve nedenini kısaca açıklayacağım), ama işi yapıyor.

VB6'da bana varsayılan "frmAddin" formunu (kullanmadığım) ve "Connect" tasarımcısını veren yeni bir Eklenti projesi oluşturdum. Aşağıdakileri içeren bir Color sınıfını kendim ekledim:

Seçenek Açık

Dim m_iForeColour Tamsayı Olarak
Dim m_iBackColour Tamsayı Olarak
Dim m_iIndicatorColour Tamsayı Olarak

Genel Mülkiyet ForeColour Let (Tam Sayı olarak ByVal iID)
    m_iForeColour = iID
Mülkiyet Son
Genel Mülkiyet ForeColour () Tamsayı Olarak Al
    ForeColour = m_iForeColour
Mülkiyet Son

Genel Mülkiyet BackColour Let (Tam Sayı olarak ByVal iID)
    m_iBackColour = iID
Mülkiyet Son
Kamu Mülkiyet BackColour () Tamsayı
    BackColour = m_iBackColour
Mülkiyet Son

Genel Mülkiyet GöstergesiColour (Tam Sayı Olarak ByVal iID)
    m_iIndicatorColour = iID
Mülkiyet Son
Genel Mülkiyet Gösterge Değerini Al (Tam Sayı Olarak)
    IndicatorColour = m_iIndicatorColour
Mülkiyet Son

Sonra "Bağlan" Tasarımcısı'ndaki kodu aşağıdaki gibi değiştirdim:

Seçenek Açık

Genel Form Boolean Olarak Gösterildi
VBIDE.VBE olarak halka açık VBInstance
Dim mcbMenuCommandBar As Office.CommandBarControl
Dim mfrmAddIn Yeni frmAddIn
Genel WithEvents MenuHandler CommandBarEvents 'komut çubuğu olay işleyicisi olarak

Dim mcbToolbar Office.CommandBarControl Olarak
Genel WithEvents MenuHandler2 CommandBarEvents Olarak

Dim codeColours () Renk Olarak

'************************************************* ****************************
'RunScript Sub
'------------------------------------------------- ----------------------------
' AÇIKLAMA:
'Kod penceresi için gerekli renkleri ayarlayan kodu çalıştırır.
etkin IDE.
'*** GERÇEKTEN ÇALIŞTIRMADAN ÖNCE BİR PROJE YÜKLENMELİDİR ***
'************************************************* ****************************
Alt RunScript ()
    ReadColoursFile

    'Araçlar> Seçenekler'i seçin
    "% To" gönder 5
    'Sekmelere gidin, "Seçenekler" i seçin
    Gönderme Tuşları "+ {TAB}"
    Gönderme Tuşları "{RIGHT}"

    'Liste kutusu seç
    "{TAB}" Gönderme Tuşları

    Dim rengi Renk olarak ayarlama
    Tam Sayı Olarak Dim iColour

    İColour için = 0 - 9
        SetRenkler iColour, codeColours (iColour)
    Sonraki iColour

    Gönder "Tuşları"
Son Alt

'************************************************* ****************************
'ReadColoursFile Sub
'------------------------------------------------- ----------------------------
' AÇIKLAMA:
'Renk dosyasını diskten okur ve hangi codeColours dizisini doldurur?
'SetColour * metotları ile doğru renkleri seçmek için kullanılır.
'seçenekler ekranı.
'************************************************* ****************************
Alt ReadColoursFile ()
    Dize olarak Dim colourLine
    Dim colourArray () Dize Olarak
    Dim rengi Renk olarak ayarlama
    DimSoFSO olarak FileSystemObject

    Set oFSO = Yeni FileSystemObject

    OFSO.FileExists (App.Path & "\ VB6CodeColours.dat") Değilse Sonra
        MsgBox "VB6CodeColours.dat bulunamadı" & App.Path, vbOKOnly, "VB6CodeColours Ayarlar dosyası bulunamadı!"
        Alttan Çık
    Bittiğinde

    Set oFSO = Hiçbir şey

    1 numaralı girişi yapmak için App.Path & "\ VB6CodeColours.dat" dosyasını açın.
    ReDim codeColours (9) Renk Olarak

    EOF Olmasa da (1)
        Satır Girişi # 1, colourLine
        colourArray = Bölünmüş (colourLine, ",")

        IsNumeric ise (colourArray (0)) O zaman
            CodeColours (colourArray (0)) Sonra Bir Şey Olmazsa
                Renk Ayarla = Ayarla = Yeni Renk

                Eğer IsNumeric (colourArray (1)) ise
                    colourSetting.ForeColour = CInt (renkArray (1))
                Bittiğinde

                Eğer IsNumeric (colourArray (2)) ise
                    colourSetting.BackColour = CInt (renk array (2))
                Bittiğinde

                IsNumeric ise (colourArray (3)) O zaman
                    colourSetting.IndicatorColour = CInt (renk array (3))
                Bittiğinde

                CodeColours'u ayarlayın (colourArray (0)) = colourSetting
            Bittiğinde
        Bittiğinde
    Wend

    Kapat # 1

    Set colourSetting = Hiçbir şey
Son Alt

'************************************************* ****************************
'SetColours Sub
'------------------------------------------------- ----------------------------
' AÇIKLAMA:
'Listeden renk öğesini seçer ve ardından renk seçiciyi yineler
'o maddeyle ilgili kontroller ve değerleri değerlere göre ayarlar.
'VB6CodeColours.dat dosyasında ayarlayın.
'************************************************* ****************************
Alt SetColours (Tam Sayı olarak ByVal iColour, ByRef colourSetting olarak Ayarlama)
    Tam Sayı Olarak Dim iKey

    "{HOME}" Gönderme Tuşları

    İKey = 1 iColour'a
        "{DOWN}" Tuşunu Gönder
    Sonraki iKey

    SetRenkSeçici renkAyar
    SetColourSelector colourSetting.BackColour
    SetColourSelector colourSetting.IndicaCCour

    Gönderme Tuşları "+ {TAB}"
    Gönderme Tuşları "+ {TAB}"
    Gönderme Tuşları "+ {TAB}"
Son Alt

'************************************************* ****************************
'SetRenkSürücü Alt
'------------------------------------------------- ----------------------------
' AÇIKLAMA:
Seçici seçiminde rengi ayarlar. Odağın üzerinde olduğunu varsayalım
'Kod çalıştırılmadan önceki kontrol öncesi (ilk satır sekmeye
'kontrol devraldı).
'************************************************* ****************************
Alt SetColourSelector (Tam Sayı olarak ByVal iColour)
    Tam Sayı Olarak Dim iKey

    "{TAB}" Gönderme Tuşları
    "{HOME}" Gönderme Tuşları

    İKey = 1 iColour'a
        "{DOWN}" Tuşunu Gönder
    Sonraki iKey
Son Alt

'************************************************* ****************************
'AddinInstance_OnConnection Sub
'------------------------------------------------- ----------------------------
' AÇIKLAMA:
'Bu yöntem, eklenti IDE tarafından yüklendiğinde çalışır
'************************************************* ****************************
Özel Alt AddinInstance_OnConnection (Nesne Olarak ByVal Uygulaması, AddInDesignerObjects.ext_ConnectMode Olarak ByVal ConnectMode, Nesne Olarak ByVal Eklentisi, custom () Variant Olarak)
    Hatada GoTo ErrorHandler

    'vb örneğini kaydet
    VBInstance = Uygulama Ayarla

    Eğer ConnectMode ext_cm_External O zaman
        Set mcbMenuCommandBar = AddToAddInCommandBar ("VB6 Kod Renklendirme")
        'etkinliği batır
        Set Me.MenuHandler = VBInstance.Events.CommandBarEvents (mcbMenuCommandBar)

        Dim oStdToolbar Office.CommandBar Olarak
        Dim oStdToolbarItem Office.CommandBarControl Olarak

        Set oStdToolbar = VBInstance.CommandBars ("Standart")
        Set oStdToolbarItem = oStdToolbar.Controls.Add (Tür: = msoControlButton)
        oStdToolbarItem.Style = msoButtonCaption
        oStdToolbarItem.Caption = "IDE Renklerini Ayarla"
        oStdToolbarItem.BeginGroup = Doğru
        Set Me.MenuHandler2 = VBInstance.Events.CommandBarEvents (oStdToolbarItem)
    Bittiğinde

    Alttan Çık
errorHandler:
    MsgBox Err.Açıklama
Son Alt

'************************************************* ****************************
'AddinInstance_OnDisconnection Sub
'------------------------------------------------- ----------------------------
' AÇIKLAMA:
'Bu yöntem, eklenti IDE tarafından kaldırıldığında ve herhangi birini temizlediğinde çalışır
referanslar vs.
'************************************************* ****************************
Özel Alt AddinInstance_OnDisconnection (AddInDesignerObjects.ext_DisconnectMode Olarak ByVal RemoveMode, custom () As Variant)
    Hatada Devam Devam Et

    'komut çubuğu girişini sil
    mcbMenuCommandBar.Delete

    'Eklentiyi kapat
    FormDisplayse O zaman
        SaveSetting App.Title, "Ayarlar", "DisplayOnConnect", "1"
        FormDisplayed = Yanlış
    Başka
        SaveSetting App.Title, "Ayarlar", "DisplayOnConnect", "0"
    Bittiğinde

    MfrmAddIn öğesini kaldır
    Set mfrmAddIn = Hiçbir şey

    MenuHandler Ayarla = Hiçbirşey
    MenuHandler2'yi Ayarla = Hiçbirşey
Son Alt

'************************************************* ****************************
'MenuHandler_Click Sub
'------------------------------------------------- ----------------------------
' AÇIKLAMA:
'Bu yöntem, menü öğesi tıklatıldığında gereken görevleri yerine getirir.
'************************************************* ****************************
Özel Alt MenuHandler_Click (ByVal CommandBarControl Nesne Olarak, Boolean olarak işlenir, CancelDefault Boolean olarak)
    RUNSCRIPT
Son Alt

'************************************************* ****************************
'MenuHandler2_Click Sub
'------------------------------------------------- ----------------------------
' AÇIKLAMA:
'Bu yöntem, araç çubuğu düğmesine tıklandığında gereken görevleri gerçekleştirir.
'************************************************* ****************************
Özel Alt MenüHandler2_Click (ByVal CommandBarControl Nesne Olarak, Boolean olarak işlenir, CancelDefault Boolean olarak)
    RUNSCRIPT
Son Alt

'************************************************* ****************************
'AddToAddInCommandBar Sub
'------------------------------------------------- ----------------------------
' AÇIKLAMA:
Belirtilen öğeyi menü listesine ekler.
'************************************************* ****************************
İşlev AddToAddInCommandBar (sCaption As String) Office.CommandBarControl Olarak
    Dim cbMenuCommandBar As Office.CommandBarControl 'komut çubuğu nesnesi
    Dim cbMenu Nesne Olarak

    Hatada Devam Devam Et

    'Eklentiler menüsünü bulabilecek miyiz
    Set cbMenu = VBInstance.CommandBars ("Eklentiler")
    CbMenu O zaman bir şey değilse
        müsait değil bu yüzden başarısızız
        Çıkış Fonksiyonu
    Bittiğinde

    Hatada GoTo ErrorHandler

    'komut çubuğuna ekle
    Set cbMenuCommandBar = cbMenu.Controls.Add (1)
    'başlığı ayarla
    cbMenuCommandBar.Caption = sCaption

    AddToAddInCommandBar = cbMenuCommandBar olarak ayarlayın

    Çıkış Fonksiyonu
errorHandler:
    'İncelikle çıkın
Son İşlev

Bu kod, uygulamanın, .dll (VB6CodeColours.dat adı verilen) ile aynı dizinde bulunan bir dosyadan istediğim renkleri okumasına izin verir. Bu dosya aşağıdakileri içerir (ve VB6.EXE içinde hangi renkleri değiştirdiğinize bağlı olarak değişir, bu nedenle düz bir kopyala ve yapıştır işlemi muhtemelen çalışmayacaktır.

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

Saçma sapan görünüyor, ama açıklayacağım. "Kod Rengi", "Ön Plan", "Arka Plan", Gösterge "biçimine sahiptir, bu nedenle en üstteki satır" Normal Metin "i, Ön Plan için açılan listedeki 14. öğeye, Arka Plan için 12. ve Gösterge için 1. .

Neden çok kaba bir çözüm olduğunu söyledim: * SendKeys kullanıyor. Başka bir açıklama yapmanıza gerek yok eminim :) * Kullanıcının etkin olması için menü / araç çubuğu seçeneğini tıklatması gerekir. * Kod en iyi şekilde yapılandırılmamış (benim görüşüme göre), ancak o zaman kendisine ayırabileceğim zaman miktarına dayanıyordu. Gelecekte onu iyileştirmeyi amaçlıyorum, ancak şu anki durumda benim için iyi çalışıyor (bu yüzden muhtemelen bırakacağım!)

Belki bir temelde, birileri daha da genişletebilir.


2

Renk seçiminizi kalıcı kılmanın püf noktası burada. Biraz daha hex düzenleme. Bond tarafından önerilen bir değişiklik yaptıysanız , elinizde aşağıdakilerin olması gerekir: 0 - 15 arasında dizine eklenmiş temel (klasik) 16 renk için RGBA değerleri ve özel renkleriniz için RGBA değerleri aynı şekilde dizine eklenir. Şimdi VBEx.DLL dosyasını aşağıdaki dizinler sırasına göre "klasik" RGBA değerlerinden oluşturulmuş bayt dizisi için arayın: 15, 7, 8, 0, 12, 4, 14, 6, 10, 2, 11, 3, 9, 1 , 13, 5 (yani beyaz, gri, koyu gri, siyah, kırmızı, koyu kırmızı vb.). Rastgele olmayan desen, kayıtlarda depolanan değerlerden elde edilir, bkz. Tex Hex'in gönderisi. Arama için onaltılı dize 'FFFFFF00C0C0C0008080800000000000FF000000 ...' vb. Toplam 64 bayt gibi görünmelidir. Bulunan bayt sırasını RGBA değerleriyle "özel" renklerin aynı şekilde, örneğin 15, 7, 8, vb. Siparişleri ile değiştirin. Hepsi, ama "gösterge" renkleri. Bunlar her zaman varsayılanlara sıfırlanır. Notlar:

  1. VBE7.DLL (MSO2010) içinde, yalnızca 0x15A98C ofset biçiminde sipariş edilen yalnızca bir bayt dizisi buldum.
  2. Bond'un gönderisinde de belirtildiği gibi , ilk değiştirme için birkaç bayt dizisi var (doğrudan 0'dan 15'e sipariş edilen temel RGBA değerleri). Sadece bir tanesini değiştirdim, önceki notadaki ofsete en yakın olanı (0x15A5AC'de bulundu).
  3. Her şeyden önce kendi sorumluluğunuzdadır :) Ve yedeklemeyi unutma.

İlk araştırma için Tex Hex ve Bond'a teşekkürler .

UPD: MSO2007 (VBE6.DLL) ve MSO2013 (VBE7.DLL) ile test edilmiştir. Cazibe gibi çalış.


2

Bond'un çözümü (VB6.exe'deki renk tablosunu düzenleme) VB6 IDE'deki renk tablosunu değiştirmek için mükemmel çalışıyor. Ancak, değiştirilmiş bir renk seçildiğinde ve VB6 kapatıldığında, VB6'nın değiştirilen rengi kayıt defterine düzgün şekilde kaydedemediğini tespit ettim.

Normalde, VB6, rengini değiştirebilecek her metin öğesi için 16-değer renk tablosuna bir dizin yazar.

Renk indeksleri burada kayıt defterine yazılır:

HKEY_CURRENT_USER\Software\Microsoft\VBA\Microsoft Visual Basic\CodeForeColors
HKEY_CURRENT_USER\Software\Microsoft\VBA\Microsoft Visual Basic\CodeBackColors

Örneğin, CodeForeColors değeri şöyle görünecek:

6 14 5 0 1 3 13 4 15 0 0 0 0 0 0 0

1 ila 16 arasındaki değerler renk tablosundaki bir rengi temsil eder ve 0 'Otomatik' anlamına gelir.

Bununla birlikte, değiştirilmiş bir renk seçildiğinde, VB6, dizin aralığının dışında bir sayıyı kayıt defterine yazacak ve CodeForeColors değeri şöyle görünecektir:

5245006 14 5 0 1 3 13 4 15 0 0 0 0 0 0 0

VB6 bir sonraki başlatılışında, değiştirilen renge ayarlanmış olan öğe için doğru rengi ayarlayamaz.

Hala bir çözüm bulmaya çalışıyorum ama şu ana kadar bulduğum şeyi göndermek istedim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.