VB6-IDE改造

來源:互聯網
上載者:User
Vb6的IDE改造基本搞定了,感覺很爽,前幾天在弄DeveloperHelper的時候,一直無法理解為什麼無法將視窗放入IDE的環境中,而很多好的Add-IN確是可以放入IDE裡邊的,在MSDN和網上查閱了一些文章,終於明白了道理,現在將道理記錄一下:

(1)控制項的容器是UserDocument而不是Form。在VB的IDE環境中那些可連結的表單,其實都是一個個的UserDocument,因此,不要在Form上開發,而是要在UserDocument上開發,我也很奇怪為什麼Microsoft給的模板要是From呢,直接給好UserDocument該有多好。

(2)UserDocument的屬性設定,其實UserDocument的屬性沒有什麼特殊的要求,但是有幾點要特殊注意,一個是最好把ScrollBasr的屬性該為0,這樣就不會出現滑塊了,還有最好不要做UserDocuemtn啟動位置的設定,因為在VB的IDE裡邊所有的連結表單的啟動位置是自動記憶的,當然也包括大小,因此最好不要設定這些代碼,否則就不爽了。

(3)UserDocument的名字一定要特殊注意,因為代碼中要用到的。

(4)最關鍵的當然就是Connect裡邊的代碼編寫了,這裡邊的代碼其實是很模板化的,沒有什麼技巧,大家照著案例寫就行,關鍵代碼如下:

聲明部分:

Public FormDisplayed          As Boolean
Public VbInsTance             As VBIDE.VBE

Public WithEvents MenuHandler As CommandBarEvents
Public WithEvents CtlHandler  As VBControlsEvents

Private mcbMenuCommandBar         As Office.CommandBarControl
Private mCodeAddIn                As udCodeDesign
Private mControlAddIn             As udControlTemplate
Private mCodeWindow               As VBIDE.Window
Private mControlWindow            As VBIDE.Window
Private mCodeGuid                 As String
Private mControlGuid              As String

Show、Hide方法:

Public Sub Hide()
    On Error Resume Next
    SetVisible False
End Sub

Public Sub Show()
    On Error Resume Next
    Set mCodeAddIn.VbInsTance = VbInsTance
    Set mCodeAddIn.Connect = Me
    Set mControlAddIn.VbInsTance = VbInsTance
    Set mControlAddIn.Connect = Me
    SetVisible True
End Sub

AddinInstance_OnConnection事件

'------------------------------------------------------
'這個方法添加增益集到 VB
'------------------------------------------------------
Private Sub AddinInstance_OnConnection(ByVal Application As Object, ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst As Object, custom() As Variant)
    On Error GoTo error_handler
    Dim GuidHelper As New Helper.Guid
    
    '儲存 vb 執行個體
    Set VbInsTance = Application

    If ConnectMode = ext_cm_External Then
        '用於讓嚮導工具列來啟動此嚮導
        Me.Show
    Else
        Set mcbMenuCommandBar = AddToAddInCommandBar("DeveloperHelper")
        '吸取事件
        Set Me.MenuHandler = VbInsTance.Events.CommandBarEvents(mcbMenuCommandBar)
    End If
    
    '掛接控制項管理事件
    Set Me.CtlHandler = VbInsTance.Events.VBControlsEvents(Nothing, Nothing)

    '將表單嵌入Vb中
    If GetSetting(App.Title, "Settings", "CodeGUID", "0") = "0" Then
        mCodeGuid = GuidHelper.NewGuid()
        SaveSetting App.Title, "Settings", "CodeGUID", mControlGuid
    Else
        mCodeGuid = GetSetting(App.Title, "Settings", "CodeGUID", "0")
    End If
    Set mCodeWindow = VbInsTance.Windows.CreateToolWindow(AddInInst, "DeveloperHelper.udCodeDesign", "CodeDesign", mCodeGuid, mCodeAddIn)

    If GetSetting(App.Title, "Settings", "ControlGUID", "0") = "0" Then
        mControlGuid = GuidHelper.NewGuid()
        SaveSetting App.Title, "Settings", "ControlGUID", mControlGuid
    Else
        mControlGuid = GetSetting(App.Title, "Settings", "ControlGUID", "0")
    End If

    Set mControlWindow = VbInsTance.Windows.CreateToolWindow(AddInInst, "DeveloperHelper.udControlTemplate", "ControlTemplate", mControlGuid, mControlAddIn)

    If ConnectMode = ext_cm_AfterStartup Then
        If GetSetting(App.Title, "Settings", "DisplayOnConnect", "0") = "1" Then
            '設定這個到串連顯示的表單
            Me.Show
        End If
    End If

    Set GuidHelper = Nothing
    
    Exit Sub
    
error_handler:
    MsgBox Err.Description
End Sub

關鍵的代碼是這句:

Set mCodeWindow = VbInsTance.Windows.CreateToolWindow(AddInInst, "DeveloperHelper.udCodeDesign", "CodeDesign", mCodeGuid, mCodeAddIn)

文法如下:

CreateToolWindow 方法
     

建立一個包含指定 UserDocument 對象的新工具視窗。

文法

object.CreateToolWindow (AddInInst, ProgID, Caption, GuidPosition, DocObj) As Window

CreateToolWindow 方法的文法包含下面部分:

部分 描述
object 對象運算式 ,其值是“應用於”列表中的對象。
AddInInst  必需的。增益集執行個體變數,表示在開發環境中的增益集。
ProgID  必需的。串 表示 UserDocument 對象的 progID。
Caption  必需的。串 包括視窗標題。
GuidPosition  必需的。串 包括視窗的唯一識別碼。
DocObj  必需的。對象表示 UserDocument 對象。對象將被設定在這個函數的調用中。

記住這些基本上就差不多了,最後完成的效果如:

最終完成效果如:

在開發過程中,國內與IDE的外掛程式開發相關的資料不是很多,其實IDE的開發其實是很重要的,對公司和個人來說都是很重要的,相關的技術資料如下:
1:http://www.activevb.de/tutorials/tut_addin/addin6.html
2:http://www.mysticboy.com.cn/docs/addin/addin3.htm

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.