รับเหยื่อจากการตอบสนองของ dnissley (ที่เขาถามว่ามีใครบางคนสามารถทำการเพิ่มเข้าได้) ฉันได้ทำการเพิ่มไว้สำหรับ VB6 มันค่อนข้างหยาบ (และฉันจะอธิบายว่าทำไมไม่นาน) แต่มันทำงานได้ดี
ฉันสร้างโครงการ Add-In ใหม่ใน VB6 ซึ่งให้ฟอร์ม "frmAddin" เริ่มต้น (ซึ่งฉันไม่ได้ใช้) และตัวออกแบบ "เชื่อมต่อ" ฉันได้เพิ่มคลาส Color ด้วยตัวเองซึ่งมีสิ่งต่อไปนี้
ตัวเลือกที่ชัดเจน
Dim m_iForeColour As Integer
Dim m_iBackColour As Integer
Dim m_iIndicatorColour As Integer
ทรัพย์สินสาธารณะให้ ForeColour (ByVal iID เป็นจำนวนเต็ม)
m_iForeColour = iID
สิ้นสุดคุณสมบัติ
ทรัพย์สินสาธารณะรับ ForeColour () เป็นจำนวนเต็ม
ForeColour = m_iForeColour
สิ้นสุดคุณสมบัติ
คุณสมบัติสาธารณะ Let BackColour (ByVal iID As Integer)
m_iBackColour = iID
สิ้นสุดคุณสมบัติ
คุณสมบัติสาธารณะ Get BackColour () As Integer
BackColour = m_iBackColour
สิ้นสุดคุณสมบัติ
ทรัพย์สินสาธารณะให้ตัวบ่งชี้สี (ByVal iID เป็นจำนวนเต็ม)
m_iIndicatorColour = iID
สิ้นสุดคุณสมบัติ
ทรัพย์สินสาธารณะรับ IndicatorColour () As Integer
IndicatorColour = m_iIndicatorColour
สิ้นสุดคุณสมบัติ
จากนั้นฉันได้แก้ไขโค้ดในตัวออกแบบ "เชื่อมต่อ" ให้เป็นดังนี้:
ตัวเลือกที่ชัดเจน
แบบฟอร์มสาธารณะแสดงเป็นบูลีน
VBInstance สาธารณะในฐานะ VBIDE.VBE
Dim mcbMenuCommandBar เป็น Office.CommandBarControl
ติ่ม mfrmAddIn เหมือนใหม่ frmAddIn
Public WithEvents MenuHandler เป็นตัวจัดการเหตุการณ์แถบคำสั่งของ CommandBarEvents
Dim mcbToolbar เป็น Office.CommandBarControl
Public WithEvents MenuHandler2 เป็น CommandBarEvents
Dim codeColours () As Color
'************************************************* ****************************
'RunScript ย่อย
'------------------------------------------------- ----------------------------
'คำอธิบาย:
'เรียกใช้รหัสที่ตั้งค่าสีที่ต้องการสำหรับหน้าต่างรหัสใน
'IDE ที่ใช้งานอยู่
'*** ต้องโหลดโครงการก่อนที่จะทำงานได้จริง ***
'************************************************* ****************************
Sub RunScript ()
ReadColoursFile
'เลือกเครื่องมือ> ตัวเลือก
SendKeys "% ถึง", 5
'ไปที่แท็บเลือก "ตัวเลือก"
SendKeys "+ {TAB}"
ปุ่มคำสั่ง "{RIGHT}"
'เลือกกล่องรายการ
SendKeys "{TAB}"
ติ่มซำการตั้งค่าเป็นสี
Dim iColour As Integer
สำหรับ iColour = 0 ถึง 9
SetColours iColour, codeColours (iColour)
ถัดไป iColour
SendKeys "~"
ส่วนท้าย
'************************************************* ****************************
'ReadColoursFile Sub
'------------------------------------------------- ----------------------------
'คำอธิบาย:
'อ่านไฟล์สีจากดิสก์และใส่อาเรย์ของ codeColours ลงไป
'SetColour * ใช้สำหรับการเลือกสีที่ถูกต้องจาก
หน้าจอตัวเลือก
'************************************************* ****************************
Sub ReadColoursFile ()
Dim colourLine As String
Dim colourArray () As String
ติ่มซำการตั้งค่าเป็นสี
Dim oFSO As FileSystemObject
ตั้ง oFSO = FileSystemObject ใหม่
ถ้าไม่ใช่ oFSO.FileExists (App.Path & "\ VB6CodeColours.dat") จากนั้น
MsgBox "ไม่พบ VB6CodeColours.dat ใน" & App.Path, vbOKOnly, "ไม่พบไฟล์การตั้งค่า VB6CodeColours!"
ออกจากตำบล
สิ้นสุดถ้า
ตั้ง oFSO = ไม่มีอะไร
เปิด App.Path & "\ VB6CodeColours.dat" สำหรับใส่เป็น # 1
ReDim codeColours (9) เป็นสี
ในขณะที่ไม่ใช่ EOF (1)
Line Input # 1, colourLine
colourArray = แยก (colourLine, ",")
ถ้า IsNumeric (colourArray (0)) จากนั้น
ถ้า codeColours (colourArray (0)) ไม่เป็นเช่นนั้น
ตั้งค่า colourSetting = สีใหม่
ถ้า IsNumeric (colourArray (1)) จากนั้น
colourSetting.ForeColour = CInt (colourArray (1))
สิ้นสุดถ้า
ถ้า IsNumeric (colourArray (2)) จากนั้น
colourSetting.BackColour = CInt (colourArray (2))
สิ้นสุดถ้า
ถ้า IsNumeric (colourArray (3)) จากนั้น
colourSetting.IndicatorColour = CInt (colourArray (3))
สิ้นสุดถ้า
ตั้ง codeColours (colourArray (0)) = colourSetting
สิ้นสุดถ้า
สิ้นสุดถ้า
Wend
ปิด # 1
ตั้ง colourSetting = ไม่มีอะไร
ส่วนท้าย
'************************************************* ****************************
'SetColours Sub
'------------------------------------------------- ----------------------------
'คำอธิบาย:
'เลือกรายการสีจากรายการจากนั้นทำซ้ำตัวเลือกสี
'การควบคุมที่เกี่ยวข้องกับรายการนั้นและตั้งค่าตามค่า
'ตั้งอยู่ในไฟล์ VB6CodeColours.dat
'************************************************* ****************************
ย่อย SetColours (ByVal iColour As Integer, ByRef colour การตั้งค่าเป็นสี)
Dim iKey As Integer
SendKeys "{HOME}"
สำหรับ iKey = 1 ถึง iColour
SendKeys "{DOWN}"
ถัดไป iKey
SetColourSelector colourSetting.ForeColour
SetColourSelector colourSetting.BackColour
SetColourSelector colourSetting.IndicatorColour
SendKeys "+ {TAB}"
SendKeys "+ {TAB}"
SendKeys "+ {TAB}"
ส่วนท้าย
'************************************************* ****************************
'SetColourSelector Sub
'------------------------------------------------- ----------------------------
'คำอธิบาย:
'ตั้งค่าสีในตัวเลือกคำสั่งผสม ถือว่าการโฟกัสอยู่ที่
'นำหน้าการควบคุมก่อนที่รหัสจะทำงาน (แท็บบรรทัดแรกไปที่
สันนิษฐานว่าควบคุม)
'************************************************* ****************************
Sub SetColourSelector (ByVal iColour As Integer)
Dim iKey As Integer
SendKeys "{TAB}"
SendKeys "{HOME}"
สำหรับ iKey = 1 ถึง iColour
SendKeys "{DOWN}"
ถัดไป iKey
ส่วนท้าย
'************************************************* ****************************
'AddinInstance_OnConnection Sub
'------------------------------------------------- ----------------------------
'คำอธิบาย:
'วิธีนี้จะทำงานเมื่อมีการโหลด Addin โดย IDE
'************************************************* ****************************
Private Sub AddinInstance_OnConnection (แอปพลิเคชัน ByVal เป็นวัตถุ, ByVal ConnectMode เป็น AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst เป็นวัตถุ, กำหนดเอง () เป็น Variant)
ในข้อผิดพลาด GoTo ErrorHandler
'บันทึกอินสแตนซ์ vb
ตั้งค่า VBInstance = แอปพลิเคชัน
ถ้า ConnectMode ext_cm_External แล้ว
ตั้งค่า mcbMenuCommandBar = AddToAddInCommandBar ("การกำหนดรหัส VB6")
'จมเหตุการณ์
ตั้งค่า Me.MenuHandler = VBInstance.Events.CommandBarEvents (mcbMenuCommandBar)
ติม oStdToolbar เป็น Office.CommandBar
ติม oStdToolbarItem เป็น Office.CommandBarControl
ตั้งค่า oStdToolbar = VBInstance.CommandBars ("มาตรฐาน")
ตั้งค่า oStdToolbarItem = oStdToolbar.Controls.Add (ประเภท: = msoControlButton)
oStdToolbarItem.Style = msoButtonCaption
oStdToolbarItem.Caption = "ตั้งค่าสี IDE"
oStdToolbarItem.BeginGroup = True
ตั้งค่า Me.MenuHandler2 = VBInstance.Events.CommandBarEvents (oStdToolbarItem)
สิ้นสุดถ้า
ออกจากตำบล
ErrorHandler:
MsgBox Err คำอธิบาย
ส่วนท้าย
'************************************************* ****************************
'AddinInstance_OnDisconnection Sub
'------------------------------------------------- ----------------------------
'คำอธิบาย:
'วิธีนี้จะทำงานเมื่อมีการลบ Addin โดย IDE และล้างข้อมูลใด ๆ
อ้างอิงเป็นต้น
'************************************************* ****************************
Private Sub AddinInstance_OnDisconnection (ByVal RemoveMode เป็น AddInDesignerObjects.ext_DisconnectMode แบบกำหนดเอง () เป็น Variant)
เมื่อเกิดข้อผิดพลาดต่อไป
'ลบรายการแถบคำสั่ง
mcbMenuCommandBar.Delete
'ปิด Add-In
ถ้า FormDisplayed แล้ว
บันทึกการตั้งค่าแอปชื่อเรื่อง "การตั้งค่า", "DisplayOnConnect", "1"
FormDisplayed = False
อื่น
บันทึกการตั้งค่าแอปชื่อเรื่อง "การตั้งค่า", "DisplayOnConnect", "0"
สิ้นสุดถ้า
ยกเลิกการโหลด mfrmAddIn
ตั้ง mfrmAddIn = ไม่มีอะไร
ตั้ง MenuHandler = ไม่มีอะไร
ตั้ง MenuHandler2 = ไม่มีอะไร
ส่วนท้าย
'************************************************* ****************************
'MenuHandler_Click Sub
'------------------------------------------------- ----------------------------
'คำอธิบาย:
'วิธีนี้จะทำงานที่จำเป็นเมื่อมีการคลิกรายการเมนู
'************************************************* ****************************
เมนูย่อย PrivateHandler_Click (ByVal CommandBarControl เป็นวัตถุจัดการเป็นบูลีน CancelDefault As บูลีน)
runscript
ส่วนท้าย
'************************************************* ****************************
'MenuHandler2_Click Sub
'------------------------------------------------- ----------------------------
'คำอธิบาย:
'วิธีนี้จะทำงานที่จำเป็นเมื่อคลิกปุ่มแถบเครื่องมือ
'************************************************* ****************************
เมนูย่อย PrivateHandler2_Click (ByVal CommandBarControl เป็นวัตถุจัดการเป็นบูลีน, CancelDefault เป็นบูลีน)
runscript
ส่วนท้าย
'************************************************* ****************************
'AddToAddInCommandBar ย่อย
'------------------------------------------------- ----------------------------
'คำอธิบาย:
'เพิ่มรายการที่ระบุในรายการเมนู
'************************************************* ****************************
ฟังก์ชัน AddToAddInCommandBar (sCaption As String) เป็น Office.CommandBarControl
Dim cbMenuCommandBar As Office.CommandBarControl 'วัตถุแถบคำสั่ง
Dim cbMenu เป็นวัตถุ
เมื่อเกิดข้อผิดพลาดต่อไป
'ดูว่าเราสามารถหาเมนูเพิ่มเติมได้หรือไม่
ตั้งค่า cbMenu = VBInstance.CommandBars ("Add-In")
ถ้า cbMenu ไม่มีอะไรแล้ว
'ไม่พร้อมใช้งานดังนั้นเราจึงล้มเหลว
ออกจากฟังก์ชั่น
สิ้นสุดถ้า
ในข้อผิดพลาด GoTo ErrorHandler
'เพิ่มลงในแถบคำสั่ง
ตั้งค่า cbMenuCommandBar = cbMenu.Controls.Add (1)
'ตั้งคำบรรยายภาพ
cbMenuCommandBar.Caption = sCaption
ตั้ง AddToAddInCommandBar = cbMenuCommandBar
ออกจากฟังก์ชั่น
ErrorHandler:
ออกอย่างสง่างาม
ฟังก์ชั่นสิ้นสุด
รหัสนี้อนุญาตให้แอปพลิเคชันอ่านสีที่ฉันต้องการจากไฟล์ที่อยู่ในไดเรกทอรีเดียวกันกับ. 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
ดูเหมือนพูดไม่ชัด แต่ฉันจะอธิบาย มันมีรูปแบบ "รหัสสี", "เบื้องหน้า", "พื้นหลัง", ตัวบ่งชี้ "ดังนั้นแถวบนสุดจะตั้งค่า" ข้อความปกติ "เป็นรายการที่ 14 ในคอมโบสำหรับ Foreground, อันดับที่ 12 สำหรับพื้นหลังและอันดับที่ 1 สำหรับตัวบ่งชี้ .
ทำไมฉันถึงบอกว่ามันเป็นคำตอบที่ค่อนข้างหยาบ: * มันใช้ SendKeys ไม่จำเป็นต้องมีคำอธิบายเพิ่มเติมที่นั่นฉันแน่ใจว่า :) * ผู้ใช้จะต้องคลิกที่เมนู / แถบเครื่องมือเพื่อให้มันมีผล * รหัสไม่ได้มีโครงสร้างที่ดีที่สุด (ในความคิดของฉัน) แต่ขึ้นอยู่กับระยะเวลาที่ฉันสามารถอุทิศให้กับมันในเวลานั้น ฉันตั้งเป้าหมายที่จะปรับปรุงมันในอนาคต แต่มันใช้ได้ดีสำหรับฉันในสถานะปัจจุบัน (ดังนั้นฉันอาจจะทิ้งมันไว้!)
บางทีด้วยพื้นฐานบางคนสามารถขยายได้อีก