dnissley의 응답 (그가 누군가가 추가 기능을 만들 수 있는지 묻습니다)에서 미끼를 가져 와서 VB6에 대한 추가 기능을 만들었습니다. 약간 조잡하지만 (왜 그런지 설명 할 것입니다),하지만 일을합니다.
VB6에서 새 추가 기능 프로젝트를 만들었으며 기본 "frmAddin"양식 (사용하지 않음)과 "Connect"디자이너를 제공했습니다. 다음을 포함하는 Color 클래스를 직접 추가했습니다.
옵션 명시
정수로 Dim m_iForeColour
정수로 Dim m_iBackColour
Dim m_iIndicatorColour As Integer
Public Property Let ForColour (ByVal iID As Integer)
m_iForeColour = iID
최종 재산
공용 속성 정수로 ForeColour () 가져 오기
ForeColour = m_iForeColour
최종 재산
Public Property Let BackColour (ByVal iID as Integer)
m_iBackColour = iID
최종 재산
공용 속성 정수로 BackColour () 가져 오기
BackColour = m_i 백 컬러
최종 재산
공공 재산하자 표시기 색상 (ByVal iID As Integer)
m_iIndicatorColour = iID
최종 재산
공용 속성 Get IndicatorColour () 정수로
IndicatorColour = m_i 표시기 색상
최종 재산
그런 다음 "Connect"Designer의 코드를 다음과 같이 수정했습니다.
옵션 명시
부울로 표시되는 공용 양식
VBIDE.VBE로 퍼블릭 VBInstance
Office.CommandBarControl로 mcbMenuCommandBar를 흐리게
새로운 frmAddIn으로 Dim mfrmAddIn
Public WithEvents MenuHandler as CommandBarEvents '명령 모음 이벤트 핸들러
사무실로 Dim mcbToolbar.CommandBarControl
CommandBarEvents로 Public WithEvents MenuHandler2
색상으로 희미한 코드 색상 ()
'********************************************************** ****************************
'RunScript Sub
'------------------------------------------------- ----------------------------
'설명 :
'코드 창에서 필요한 색상을 설정하는 코드를
'활성 IDE.
'*** 프로젝트가 실제로 작동하기 전에 프로젝트를로드해야합니다 ***
'********************************************************** ****************************
하위 RunScript ()
ReadColoursFile
'도구> 옵션을 선택하십시오.
SendKeys "% to", 5
'탭으로 이동하여'옵션 '을 선택하십시오.
SendKeys "+ {TAB}"
SendKeys "{RIGHT}"
'목록 상자 선택
SendKeys "{TAB}"
희미한 색상
정수로 희미한 iColour
iColour의 경우 0 ~ 9
SetColours iColour, 코드 컬러 (iColour)
다음 iColour
SendKeys "~"
엔드 서브
'********************************************************** ****************************
'ReadColoursFile 하위
'------------------------------------------------- ----------------------------
'설명 :
'디스크에서 컬러 파일을 읽고 codeColours 배열을 채 웁니다.
'는 SetColour * 메소드에서 올바른 색상을 선택하는 데 사용됩니다.
'옵션 화면.
'********************************************************** ****************************
하위 ReadColoursFile ()
문자열로 희미한 colourLine
문자열로 희미한 colourArray ()
희미한 색상
FileSystemObject로 oFSO를 흐리게
oFSO = 새 FileSystemObject 설정
oFSO.FileExists (App.Path & "\ VB6CodeColours.dat")가 아닌 경우
MsgBox "VB6CodeColours.dat를"& App.Path, vbOKOnly, "VB6CodeColours 설정 파일을 찾을 수 없습니다!"
서브 종료
끝 경우
oFSO = 없음으로 설정
# 1로 입력하기 위해 App.Path 및 "\ VB6CodeColours.dat"를 엽니 다.
색상으로 ReDim 코드 색상 (9)
EOF는 아니지만 (1)
라인 입력 # 1, colourLine
colourArray = Split (colourLine, ",")
IsNumeric (colourArray (0))이면
codeColours (colourArray (0))이 없으면
색상 설정 설정 = 새 색상
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 설정
끝 경우
끝 경우
향하게 하다
닫기 # 1
colourSetting = 없음 설정
엔드 서브
'********************************************************** ****************************
'SetColours 하위
'------------------------------------------------- ----------------------------
'설명 :
'목록에서 색상 항목을 선택한 다음 색상 선택기를 반복합니다.
'해당 항목과 관련된 컨트롤을 설정하고 값에 따라 설정합니다
VB6CodeColours.dat 파일에 설정되어 있습니다.
'********************************************************** ****************************
Sub SetColours (정수로 ByVal iColour, 색상별로 설정하여 ByVal iColour)
정수로 Dim iKey
SendKeys "{HOME}"
iKey = 1의 경우 iColour
SendKeys "{DOWN}"
다음 iKey
SetColourSelector colourSetting.ForeColour
SetColourSelector colourSetting.BackColour
SetColourSelector colourSetting.IndicatorColour
SendKeys "+ {TAB}"
SendKeys "+ {TAB}"
SendKeys "+ {TAB}"
엔드 서브
'********************************************************** ****************************
'SetColourSelector 하위
'------------------------------------------------- ----------------------------
'설명 :
'선택기 콤보의 색상을 설정합니다. 초점이
'코드를 실행하기 전에 선행 제어 (
가정 된 통제).
'********************************************************** ****************************
하위 집합 색상 선택기 (정수로 ByVal iColour)
정수로 Dim iKey
SendKeys "{TAB}"
SendKeys "{HOME}"
iKey = 1의 경우 iColour
SendKeys "{DOWN}"
다음 iKey
엔드 서브
'********************************************************** ****************************
'AddinInstance_OnConnection 하위
'------------------------------------------------- ----------------------------
'설명 :
'이 메소드는 addin이 IDE에 의해로드 될 때 실행됩니다
'********************************************************** ****************************
Private Sub AddinInstance_OnConnection (ByVal 응용 프로그램을 개체로, ByVal ConnectMode를 AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst를 개체로, custom ()을 Variant로)
오류 발생시 ErrorHandler
VB 인스턴스를 저장
VBInstance = 애플리케이션 설정
ConnectMode ext_cm_External 인 경우
mcbMenuCommandBar = AddToAddInCommandBar ( "VB6 코드 색상") 설정
이벤트를 싱크
Me.MenuHandler = VBInstance.Events.CommandBarEvents (mcbMenuCommandBar) 설정
oStdToolbar를 Office로 지정
oStdToolbarItem을 Office.CommandBarControl로 흐리게
oStdToolbar = VBInstance.CommandBars ( "Standard") 설정
oStdToolbarItem = oStdToolbar.Controls.Add (Type : = msoControlButton) 설정
oStdToolbarItem.Style = msoButtonCaption
oStdToolbarItem.Caption = "IDE 색상 설정"
oStdToolbarItem.BeginGroup = True
Me.MenuHandler2 = VBInstance.Events.CommandBarEvents (oStdToolbarItem) 설정
끝 경우
서브 종료
ErrorHandler :
MsgBox Err. 설명
엔드 서브
'********************************************************** ****************************
'AddinInstance_OnDisconnection 서브
'------------------------------------------------- ----------------------------
'설명 :
'이 메소드는 IDE에 의해 addin이 제거 될 때 실행되며
'참조 등
'********************************************************** ****************************
개인 하위 AddinInstance_OnDisconnection (AddInDesignerObjects.ext_DisconnectMode로 ByVal RemoveMode, 변형으로 custom ())
오류 이력서 다음에
'명령 모음 항목 삭제
mcbMenuCommandBar.Delete
추가 기능을 종료합니다
Form이 표시된 경우
SaveSetting App.Title, "설정", "DisplayOnConnect", "1"
FormDisplayed = 거짓
그밖에
SaveSetting App.Title, "설정", "DisplayOnConnect", "0"
끝 경우
mfrmAddIn 언로드
mfrmAddIn = 없음으로 설정
MenuHandler = 없음 설정
MenuHandler2 = 없음 설정
엔드 서브
'********************************************************** ****************************
'MenuHandler_Click 하위
'------------------------------------------------- ----------------------------
'설명 :
'이 방법은 메뉴 항목을 클릭 할 때 필요한 작업을 수행합니다.
'********************************************************** ****************************
Private Sub MenuHandler_Click (ByVal CommandBarControl을 개체로, 부울로 처리, CancelDefault를 부울로 처리)
RunScript
엔드 서브
'********************************************************** ****************************
'MenuHandler2_ 클릭 하위
'------------------------------------------------- ----------------------------
'설명 :
'이 방법은 툴바 버튼을 클릭 할 때 필요한 작업을 수행합니다.
'********************************************************** ****************************
Private Sub MenuHandler2_Click (ByVal CommandBarControl을 개체로, 부울로 처리, CancelDefault를 부울로 처리)
RunScript
엔드 서브
'********************************************************** ****************************
'AddToAddInCommandBar 하위
'------------------------------------------------- ----------------------------
'설명 :
'지정된 항목을 메뉴 목록에 추가합니다.
'********************************************************** ****************************
Office.CommandBarControl로 함수 AddToAddInCommandBar (sCaption As String)
cbMenuCommandBar를 Office.CommandBarControl '명령 줄 개체로 흐리게
cbMenu를 개체로 흐리게
오류 이력서 다음에
'추가 기능 메뉴를 찾을 수 있는지 확인하십시오
cbMenu = VBInstance.CommandBars ( "Add-Ins") 설정
cbMenu가 없으면
'사용할 수 없으므로 실패
종료 기능
끝 경우
오류 발생시 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
횡설수설처럼 보이지만 설명하겠습니다. "Code Colour", "Foreground", "Background", Indicator "형식을 사용하므로 맨 윗줄은"Normal Text "를 콤보에서 14 번째 항목으로, Foreground는 14 번째, Background는 12 번째, Indicator는 1 번째로 설정합니다. .
내가 아주 조잡한 해결책이라고 말한 이유 : * SendKeys를 사용합니다. 더 이상의 설명이 필요하지 않습니다. :) * 사용자가 메뉴 / 도구 모음 옵션을 클릭해야 적용됩니다. * 코드는 (제 생각에) 가장 잘 구성되지는 않았지만 당시에 사용할 수있는 시간을 기준으로했습니다. 나는 미래에 그것을 향상시키는 것을 목표로하지만 현재 상태에서 나에게 잘 작동합니다 (그래서 나는 그것을 떠날 것입니다!)
아마도 기초로 누군가가 더 확장 할 수 있습니다.