Lấy mồi từ câu trả lời của dnissley (nơi anh ta hỏi liệu ai đó có thể tạo bổ trợ không), tôi đã tạo một bổ trợ cho VB6. Đó là một chút thô thiển (và tôi sẽ giải thích tại sao trong thời gian ngắn), nhưng nó thực hiện công việc.
Tôi đã tạo một dự án Bổ trợ mới trong VB6, cho tôi mẫu "frmAddin" mặc định (mà tôi không sử dụng) và trình thiết kế "Kết nối". Bản thân tôi đã thêm một lớp Màu bao gồm:
Tùy chọn rõ ràng
Dim m_iForeColour là số nguyên
Dim m_iBackColour là số nguyên
Dim m_iTheicatorColour As Integer
Tài sản công cộng Hãy để PremColour (ByVal iID làm số nguyên)
m_iForeColour = iID
Tài sản cuối
Tài sản công cộng Nhận PremColour () dưới dạng Số nguyên
ForeColour = m_iForeColour
Tài sản cuối
Tài sản công cộng Hãy để BackColour (ByVal iID làm số nguyên)
m_iBackColour = iID
Tài sản cuối
Tài sản công cộng Nhận BackColour () dưới dạng Số nguyên
BackColour = m_iBackColour
Tài sản cuối
Tài sản công cộng Hãy để IndicatorColour (ByVal iID làm số nguyên)
m_iTheicatorColour = iID
Tài sản cuối
Tài sản công cộng Nhận IndicatorColour () dưới dạng Số nguyên
IndicatorColour = m_iTheicatorColour
Tài sản cuối
Và sau đó tôi đã sửa đổi mã trong Trình thiết kế "Kết nối" như sau:
Tùy chọn rõ ràng
Mẫu công khai Hiển thị như Boolean
VBInstance như VBIDE.VBE
Dim mcbMothyCommandBar As Office.CommandBarControl
Dim mfrmAddIn Như frmAddIn mới
Public WithEvents MenuHandler Là trình xử lý sự kiện thanh lệnh của CommandBarEvents
Dim mcbToolbar Là Office.CommandBarControl
Công khai với các MenuHandler2 dưới dạng CommandBarEvents
Mã DimColours () là màu
'****** / TÌM HIỂU ****** / TÌM KIẾM
'RunScript Sub
'------------------------------------------------- ----------------------------
' SỰ MIÊU TẢ:
'Chạy mã đặt các màu cần thiết cho cửa sổ mã trong
'IDE hoạt động.
'*** MỘT DỰ ÁN PHẢI ĐƯỢC LO LẮNG TRƯỚC KHI NÀY HOẠT ĐỘNG HOẠT ĐỘNG ***
'****** / TÌM HIỂU ****** / TÌM KIẾM
Run Run ()
ReadColoursFile
'Chọn Công cụ> Tùy chọn
SendKeys "% đến", 5
'Chuyển đến tab, chọn "Tùy chọn"
Khóa gửi "+ {TAB}"
SendKeys "{RIGHT}"
'Chọn hộp danh sách
Khóa gửi "{TAB}"
Dim colourSding As Color
Dim iColour là số nguyên
Đối với iColour = 0 đến 9
SetColours iColour, codeColours (iColour)
Tiếp theo iColour
Khóa gửi "~"
Kết thúc phụ
'****** / TÌM HIỂU ****** / TÌM KIẾM
'SubColoursFile Sub
'------------------------------------------------- ----------------------------
' SỰ MIÊU TẢ:
'Đọc tệp màu từ đĩa và điền vào mảng codeColours
'được sử dụng bởi các phương thức SetColour * để chọn màu chính xác từ
'màn hình tùy chọn.
'****** / TÌM HIỂU ****** / TÌM KIẾM
Sub ReadColoursFile ()
Dim colourLine As String
Dim colourArray () dưới dạng Chuỗi
Dim colourSding As Color
Dim oFSO là FileSystemObject
Đặt oFSO = FileSystemObject mới
Nếu không phải oFSO.FileExists (App.Path & "\ VB6CodeColours.dat") thì
MsgBox "Không tìm thấy VB6CodeColours.dat trong" & App.Path, vbOKOnly, "Không tìm thấy tệp Cài đặt VB6CodeColours!"
Thoát Sub
Kết thúc nếu
Đặt oFSO = Không có gì
Mở App.Path & "\ VB6CodeColours.dat" cho đầu vào là số 1
Mã ReDimColours (9) Là màu
Trong khi không phải EOF (1)
Dòng đầu vào số 1, colourLine
colourArray = Tách (colourLine, ",")
Nếu IsNumeric (colourArray (0)) thì
Nếu codeColours (colourArray (0)) là gì thì
Đặt colourSetting = Màu mới
Nếu IsNumeric (colourArray (1)) thì
colourSetting.ForeColour = CInt (colourArray (1))
Kết thúc nếu
Nếu IsNumeric (colourArray (2)) thì
colourSetting.BackColour = CInt (colourArray (2))
Kết thúc nếu
Nếu IsNumeric (colourArray (3)) thì
colourSetting.IndicatorColour = CInt (colourArray (3))
Kết thúc nếu
Đặt mãColours (colourArray (0)) = colourSding
Kết thúc nếu
Kết thúc nếu
xoay về
Đóng số 1
Đặt colourSetting = Không có gì
Kết thúc phụ
'****** / TÌM HIỂU ****** / TÌM KIẾM
'SetColours Sub
'------------------------------------------------- ----------------------------
' SỰ MIÊU TẢ:
'Chọn mục màu từ danh sách và sau đó lặp lại bộ chọn màu
'điều khiển được liên kết với mục đó và đặt chúng theo các giá trị
'được đặt trong tệp VB6CodeColours.dat.
'****** / TÌM HIỂU ****** / TÌM KIẾM
Sub SetColours (ByVal iColour As Integer, ByRef colourSding As Color)
Dim iKey là số nguyên
SendKeys "{HOME}"
Dành cho iKey = 1 đến iColour
Phím gửi "{DOWN}"
IKey tiếp theo
SetColourSelector colourSetting.ForeColour
SetColourSelector colourSetting.BackColour
SetColourSelector colourSetting.TheicatorColour
Khóa gửi "+ {TAB}"
Khóa gửi "+ {TAB}"
Khóa gửi "+ {TAB}"
Kết thúc phụ
'****** / TÌM HIỂU ****** / TÌM KIẾM
'SetColourSelector Sub
'------------------------------------------------- ----------------------------
' SỰ MIÊU TẢ:
'Đặt màu trong bộ chọn. Giả sử trọng tâm là
'kiểm soát tiến hành trước khi mã được chạy (các tab dòng đầu tiên đến
'kiểm soát giả định).
'****** / TÌM HIỂU ****** / TÌM KIẾM
Sub SetColourSelector (ByVal iColour As Integer)
Dim iKey là số nguyên
Khóa gửi "{TAB}"
SendKeys "{HOME}"
Dành cho iKey = 1 đến iColour
Phím gửi "{DOWN}"
IKey tiếp theo
Kết thúc phụ
'****** / TÌM HIỂU ****** / TÌM KIẾM
'AddinInstance_OnConnection Sub
'------------------------------------------------- ----------------------------
' SỰ MIÊU TẢ:
'Phương thức này chạy khi addin được IDE tải
'****** / TÌM HIỂU ****** / TÌM KIẾM
Private Sub AddinInstance_OnConnection (Ứng dụng ByVal là đối tượng, ByVal ConnectMode là AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst As Object, custom () As Variant)
Khi gặp lỗi GoTo ErrorHandler
'lưu ví dụ vb
Đặt VBInstance = Ứng dụng
Nếu ConnectMode ext_cm_External thì
Đặt mcbMothyCommandBar = AddToAddInCommandBar ("Tô màu mã VB6")
'nhấn chìm sự kiện
Đặt Me.MothyHandler = VBInstance.Events.CommandBarEvents (mcbMothyCommandBar)
Dim oStdToolbar Là Office.CommandBar
Dim oStdToolbarItem Là Office.CommandBarControl
Đặt oStdToolbar = VBInstance.CommandBars ("Tiêu chuẩn")
Đặt oStdToolbarItem = oStdToolbar.Controls.Add (Loại: = msoControlButton)
oStdToolbarItem.Style = msoButtonCaption
oStdToolbarItem.Caption = "Đặt màu IDE"
oStdToolbarItem.Begingroup = True
Đặt Me.MothyHandler2 = VBInstance.Events.CommandBarEvents (oStdToolbarItem)
Kết thúc nếu
Thoát Sub
ErrorHandler:
MsgBox Err. Mô tả
Kết thúc phụ
'****** / TÌM HIỂU ****** / TÌM KIẾM
'AddinInstance_OnDisconnection Sub
'------------------------------------------------- ----------------------------
' SỰ MIÊU TẢ:
'Phương thức này chạy khi addin bị IDE loại bỏ và dọn sạch mọi
'tài liệu tham khảo, vv
'****** / TÌM HIỂU ****** / TÌM KIẾM
Private Sub AddinInstance_OnDisconnection (ByVal RemoveMode As AddInDesignerObjects.ext_DisconnectMode, custom () As Variant)
Khi xảy ra lỗi Tiếp tục
'xóa mục nhập thanh lệnh
mcbMothyCommandBar.Delete
'tắt bổ trợ
Nếu FormDisplayed thì
Lưu cài đặt ứng dụng.Title, "Cài đặt", "DisplayOnConnect", "1"
FormDisplayed = Sai
Khác
Lưu cài đặt ứng dụng.Title, "Cài đặt", "DisplayOnConnect", "0"
Kết thúc nếu
Dỡ bỏ mfrmAddIn
Đặt mfrmAddIn = Không có gì
Đặt MenuHandler = Không có gì
Đặt MenuHandler2 = Không có gì
Kết thúc phụ
'****** / TÌM HIỂU ****** / TÌM KIẾM
'MenuHandler_Click Sub
'------------------------------------------------- ----------------------------
' SỰ MIÊU TẢ:
'Phương pháp này thực hiện các tác vụ cần thiết khi nhấp vào mục menu.
'****** / TÌM HIỂU ****** / TÌM KIẾM
Menu phụ riêng tưHandler_Click (ByVal CommandBarControl As Object, được xử lý dưới dạng Boolean, CancDefault As Boolean)
Chạy script
Kết thúc phụ
'****** / TÌM HIỂU ****** / TÌM KIẾM
'MenuHandler2_Click Sub
'------------------------------------------------- ----------------------------
' SỰ MIÊU TẢ:
'Phương pháp này thực hiện các tác vụ cần thiết khi nhấp vào nút thanh công cụ.
'****** / TÌM HIỂU ****** / TÌM KIẾM
Menu phụ riêng tưHandler2_Click (ByVal CommandBarControl As Object, được xử lý dưới dạng Boolean, CancDefault As Boolean)
Chạy script
Kết thúc phụ
'****** / TÌM HIỂU ****** / TÌM KIẾM
'AddToAddInCommandBar Sub
'------------------------------------------------- ----------------------------
' SỰ MIÊU TẢ:
'Thêm mục được chỉ định vào danh sách menu.
'****** / TÌM HIỂU ****** / TÌM KIẾM
Hàm AddToAddInCommandBar (sCaption As String) As Office.CommandBarControl
Dim cbMothyCommandBar As Office.CommandBarControl 'đối tượng thanh lệnh
Dim cbMothy làm đối tượng
Khi xảy ra lỗi Tiếp tục
'xem chúng ta có thể tìm thấy menu Bổ trợ không
Đặt cbMothy = VBInstance.CommandBars ("Bổ trợ")
Nếu cbMothy không là gì thì
'không có sẵn nên chúng tôi thất bại
Chức năng thoát
Kết thúc nếu
Khi gặp lỗi GoTo ErrorHandler
'thêm nó vào thanh lệnh
Đặt cbMothyCommandBar = cbMothy.Controls.Add (1)
'đặt chú thích
cbMothyCommandBar.Caption = sCaption
Đặt AddToAddInCommandBar = cbMothyCommandBar
Chức năng thoát
ErrorHandler:
'Thoát một cách duyên dáng
Chức năng kết thúc
Mã này cho phép ứng dụng đọc các màu tôi muốn từ một tệp nằm trong cùng thư mục với tệp ZIP (được gọi là VB6CodeColours.dat). Tệp này chứa các mục sau (và nó sẽ thay đổi dựa trên màu nào bạn thay thế trong VB6.EXE để sao chép và dán thẳng có thể sẽ không hoạt động.
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
Trông có vẻ vô nghĩa, nhưng tôi sẽ giải thích. Nó có định dạng "Màu mã", "Tiền cảnh", "Nền", Chỉ báo ", vì vậy hàng trên cùng sẽ đặt" Văn bản bình thường "thành mục thứ 14 trong kết hợp cho Tiền cảnh, 12 cho Nền và thứ 1 cho Chỉ báo .
Tại sao tôi nói đó là một giải pháp khá thô thiển: * Nó sử dụng SendKeys. Tôi không có lời giải thích nào thêm nữa. Tôi chắc chắn :) * Người dùng phải nhấp vào tùy chọn menu / thanh công cụ để nó có hiệu lực. * Mã không có cấu trúc tốt nhất (theo ý kiến của tôi) nhưng dựa trên lượng thời gian tôi có thể dành cho nó vào thời điểm đó. Tôi đặt mục tiêu cải thiện nó trong tương lai, nhưng nó hoạt động tốt với tôi trong tình trạng hiện tại (vì vậy tôi có thể sẽ rời bỏ nó!)
Có lẽ với một cơ sở, ai đó có thể mở rộng về nó hơn nữa.