Mengambil umpan dari respons dnissley (di mana dia bertanya apakah seseorang dapat membuat add-in), saya telah membuat add-in untuk VB6. Ini sedikit kasar (dan saya akan menjelaskan mengapa sebentar lagi), tetapi itu memang berhasil.
Saya membuat proyek Add-In baru di VB6 yang memberi saya bentuk "frmAddin" default (yang tidak saya gunakan) dan desainer "Connect". Saya sendiri telah menambahkan kelas Warna yang berisi yang berikut:
Opsi Eksplisit
Dim m_iForeColour Sebagai Integer
Dim m_iBackColour Sebagai Integer
Dim m_iIndicatorColour Sebagai Integer
Properti Publik Biarkan ForeColour (ByVal iID Sebagai Integer)
m_iForeColour = iID
Akhiri Properti
Properti Publik Dapatkan ForeColour () Sebagai Integer
ForeColour = m_iForeColour
Akhiri Properti
Properti Publik, Biarkan BackColour (ByVal iID Sebagai Integer)
m_iBackColour = iID
Akhiri Properti
Properti Publik Dapatkan BackColour () Sebagai Integer
BackColour = m_iBackColour
Akhiri Properti
Properti Publik Biarkan IndicatorColour (ByVal iID Sebagai Integer)
m_iIndicatorColour = iID
Akhiri Properti
Properti Publik Dapatkan IndicatorColour () Sebagai Integer
IndicatorColour = m_iIndicatorColour
Akhiri Properti
Dan kemudian saya telah mengubah kode di "Connect" Designer menjadi sebagai berikut:
Opsi Eksplisit
Form Publik Ditampilkan sebagai Boolean
VBInstance Publik Sebagai VBIDE.VBE
Redup mcbMenuCommandBar Sebagai Office.CommandBarControl
Dim mfrmAddIn As New frmAddIn
Public WithEvents MenuHandler Sebagai pengendali event perintah CommandBarEvents '
Dim mcbToolbar Sebagai Office.CommandBarControl
Public WithEvents MenuHandler2 Sebagai CommandBarEvents
Redup codeColours () As Color
'************************************************* ****************************
'RunScript Sub
'------------------------------------------------- ----------------------------
'DESCRIPTION:
'Menjalankan kode yang menetapkan warna yang diperlukan untuk jendela kode di
'IDE aktif.
'*** SEBUAH PROYEK HARUS DIBERI SEBELUM INI AKAN SEBENARNYA BEKERJA ***
'************************************************* ****************************
Sub RunScript ()
BacaColoursFile
'Pilih Alat> Opsi
SendKeys "% to", 5
'Buka tab, pilih "Opsi"
SendKeys "+ {TAB}"
SendKeys "{RIGHT}"
'Pilih kotak daftar
SendKeys "{TAB}"
Dim colourSetting As Color
Dim iColour Sebagai Integer
Untuk iColour = 0 Sampai 9
SetColours iColour, codeColours (iColour)
IColour berikutnya
SendKeys "~"
End Sub
'************************************************* ****************************
'BacaColoursFile Sub
'------------------------------------------------- ----------------------------
'DESCRIPTION:
'Membaca file warna dari disk dan mengisi array codeColours yang
'digunakan oleh metode SetColour * untuk memilih warna yang benar
'Layar opsi.
'************************************************* ****************************
Sub ReadColoursFile ()
Dim colourLine As String
Dim colourArray () As String
Dim colourSetting As Color
Redupkan OFSO Sebagai FileSystemObject
Set oFSO = FileSystemObject Baru
Jika Tidak oFSO.FileExists (App.Path & "\ VB6CodeColours.dat") Lalu
MsgBox "VB6CodeColours.dat tidak ditemukan di" & App.Path, vbOKHanya, "File Pengaturan VB6CodeColours tidak ditemukan!"
Keluar Sub
Berakhir jika
Set oFSO = Tidak Ada
Buka App.Path & "\ VB6CodeColours.dat" Untuk Input Sebagai # 1
ReDim codeColours (9) As Color
While Not EOF (1)
Input Baris # 1, colourLine
colourArray = Berpisah (colourLine, ",")
If IsNumeric (colourArray (0)) Kemudian
Jika codeColours (colourArray (0)) Tidak Ada Maka
Set colourSetting = Warna Baru
If IsNumeric (colourArray (1)) Kemudian
colourSetting.ForeColour = CInt (colourArray (1))
Berakhir jika
If IsNumeric (colourArray (2)) Kemudian
colourSetting.BackColour = CInt (colourArray (2))
Berakhir jika
If IsNumeric (colourArray (3)) Lalu
colourSetting.IndicatorColour = CInt (colourArray (3))
Berakhir jika
Set codeColours (colourArray (0)) = colourSetting
Berakhir jika
Berakhir jika
Pergi ke
Tutup # 1
Set colourSetting = Tidak Ada
End Sub
'************************************************* ****************************
'SetColours Sub
'------------------------------------------------- ----------------------------
'DESCRIPTION:
'Memilih item warna dari daftar dan kemudian beralih ke pemilih warna
Kontrol terkait dengan item itu dan menetapkannya sesuai dengan nilai
diatur dalam file VB6CodeColours.dat.
'************************************************* ****************************
Sub SetColours (ByVal iColour As Integer, ByRef colourSetting As Color)
Dim iKey As Integer
SendKeys "{HOME}"
Untuk iKey = 1 Ke iColour
SendKeys "{BAWAH}"
IKey selanjutnya
SetColourSelector colourSetting.ForeColour
SetColourSelector colourSetting.BackColour
SetColourSelector colourSetting.IndicatorColour
SendKeys "+ {TAB}"
SendKeys "+ {TAB}"
SendKeys "+ {TAB}"
End Sub
'************************************************* ****************************
'SetColourSelector Sub
'------------------------------------------------- ----------------------------
'DESCRIPTION:
'Atur warna dalam combo pemilih. Mengasumsikan fokus ada pada
kontrol sebelumnya sebelum kode dijalankan (tab baris pertama ke
(asumsi kendali).
'************************************************* ****************************
Sub SetColourSelector (ByVal iColour As Integer)
Dim iKey As Integer
SendKeys "{TAB}"
SendKeys "{HOME}"
Untuk iKey = 1 Ke iColour
SendKeys "{BAWAH}"
IKey selanjutnya
End Sub
'************************************************* ****************************
'AddinInstance_OnConnection Sub
'------------------------------------------------- ----------------------------
'DESCRIPTION:
'Metode ini berjalan ketika addin dimuat oleh IDE
'************************************************* ****************************
Private Sub AddinInstance_OnConnection (Aplikasi ByVal Sebagai Objek, ByVal ConnectMode Sebagai AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst Sebagai Object, custom () Sebagai Variant)
On Error GoTo ErrorHandler
'simpan instance vb
Set VBInstance = Aplikasi
Jika ConnectMode ext_cm_External Lalu
Set mcbMenuCommandBar = AddToAddInCommandBar ("VB6 Code Coloring")
tenggelamkan acara
Setel Me.MenuHandler = VBInstance.Events.CommandBarEvents (mcbMenuCommandBar)
Dim oStdToolbar Sebagai Office.CommandBar
Redup oStdToolbarItem Sebagai Office.CommandBarControl
Set oStdToolbar = VBInstance.CommandBars ("Standard")
Set oStdToolbarItem = oStdToolbar.Controls.Add (Jenis: = msoControlButton)
oStdToolbarItem.Style = msoButtonCaption
oStdToolbarItem.Caption = "Atur Warna IDE"
oStdToolbarItem.BeginGroup = Benar
Setel Me.MenuHandler2 = VBInstance.Events.CommandBarEvents (oStdToolbarItem)
Berakhir jika
Keluar Sub
ErrorHandler:
MsgBox Err.Deskripsi
End Sub
'************************************************* ****************************
'AddinInstance_OnDisconnection Sub
'------------------------------------------------- ----------------------------
'DESCRIPTION:
'Metode ini berjalan ketika addin dihapus oleh IDE dan membersihkan apa pun
referensi dll
'************************************************* ****************************
Private Sub AddinInstance_OnDisconnection (ByVal RemoveMode Sebagai AddInDesignerObjects.ext_DisconnectMode, custom () Sebagai Variant)
On Error Resume Selanjutnya
'hapus entri bilah perintah
mcbMenuCommandBar.Delete
matikan Add-In
Jika FormDisplayed Maka
SaveSetting App.Title, "Pengaturan", "DisplayOnConnect", "1"
FormDisplayed = Salah
Lain
SaveSetting App.Title, "Pengaturan", "DisplayOnConnect", "0"
Berakhir jika
Bongkar mfrmAddIn
Setel mfrmAddIn = Tidak Ada
Set MenuHandler = Tidak Ada
Set MenuHandler2 = Tidak Ada
End Sub
'************************************************* ****************************
'MenuHandler_Klik Sub
'------------------------------------------------- ----------------------------
'DESCRIPTION:
'Metode ini melakukan tugas yang diperlukan ketika item menu diklik.
'************************************************* ****************************
Sub Menu PribadiHandler_Click (ByVal CommandBarControl Sebagai Objek, ditangani Sebagai Boolean, CancelDefault Sebagai Boolean)
RunScript
End Sub
'************************************************* ****************************
'MenuHandler2_Klik Sub
'------------------------------------------------- ----------------------------
'DESCRIPTION:
'Metode ini melakukan tugas yang diperlukan ketika tombol bilah alat diklik.
'************************************************* ****************************
Sub Menu PribadiHandler2_Click (ByVal CommandBarControl Sebagai Objek, ditangani Sebagai Boolean, CancelDefault Sebagai Boolean)
RunScript
End Sub
'************************************************* ****************************
'AddToAddInCommandBar Sub
'------------------------------------------------- ----------------------------
'DESCRIPTION:
'Menambahkan item yang ditentukan ke daftar menu.
'************************************************* ****************************
Fungsi AddToAddInCommandBar (sCaption As String) Sebagai Office.CommandBarControl
Dim cbMenuCommandBar Sebagai objek bar perintah Office.CommandBarControl '
Dim cbMenu Sebagai Object
On Error Resume Selanjutnya
'lihat apakah kita dapat menemukan menu Add-in
Set cbMenu = VBInstance.CommandBars ("Add-in")
Jika cbMenu tidak berarti apa-apa
'tidak tersedia sehingga kami gagal
Fungsi Keluar
Berakhir jika
On Error GoTo ErrorHandler
'tambahkan ke bilah perintah
Set cbMenuCommandBar = cbMenu.Controls.Add (1)
'atur keterangan
cbMenuCommandBar.Caption = sCaption
Setel AddToAddInCommandBar = cbMenuCommandBar
Fungsi Keluar
ErrorHandler:
'Keluar dengan anggun
Fungsi Akhir
Kode ini memungkinkan aplikasi untuk membaca warna yang saya inginkan dari file yang berada di direktori yang sama dengan .dll (disebut VB6CodeColours.dat). File ini berisi yang berikut (dan itu akan bervariasi berdasarkan warna yang Anda ganti di VB6.EXE sehingga copy & paste langsung mungkin tidak akan berfungsi.
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
Tampak omong kosong, tapi saya akan jelaskan. Ini memiliki format "Kode Warna", "Latar Depan", "Latar Belakang", Indikator "sehingga baris atas akan mengatur" Teks Normal "ke item ke-14 dalam kombo untuk Latar Depan, ke-12 untuk Latar Belakang dan ke-1 untuk Indikator .
Mengapa saya mengatakan ini adalah solusi yang cukup kasar: * Menggunakan SendKeys. Tidak ada penjelasan lebih lanjut yang diperlukan di sana saya yakin :) * Pengguna harus mengklik opsi menu / toolbar agar dapat berlaku. * Kode tidak terstruktur terbaik (menurut saya) tetapi didasarkan pada jumlah waktu yang saya dapat persembahkan untuk itu pada saat itu. Saya bertujuan untuk memperbaikinya di masa depan, tetapi berfungsi dengan baik untuk saya dalam kondisi saat ini (jadi saya mungkin akan meninggalkannya!)
Mungkin dengan dasar, seseorang dapat mengembangkannya lebih jauh.