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.