扩展性对象模型中的几个对象允许操作和扩展 Visual Basic IDE。该主题里的代码举了几个例子。
通过它们可以操作命令栏,命令栏是工具栏和菜单栏的组合。几乎可以对 CommandBar 对象做任何事,包括创建新的对象、删除已有的对象和改变它们的尺寸、位置和图标。
这是一个如何操作命令行的示例:
Dim mcbMenuCommandBar As Office.CommandBarControl '
确定标准的工具栏是可见的。gVBInstance.CommandBars("Standard").Visible = True
'
当作按钮添加到标准工具栏中。'
在工具箱的右边添加该按钮。Set mcbMenuCommandBar = _
gVBInstance.CommandBars("Standard").Controls.Add _
(1, , , gVBInstance.CommandBars("Standard") _
.Controls.Count)
'
设置按钮的标题。mcbMenuCommandBar.Caption = "My Test"
'
把图标复制到剪贴板上。Clipboard.SetData LoadPicture("c:\windows\circles.bmp")
'
把图标粘贴在按钮上。mcbMenuCommandBar.PasteFace
'
处理CommandBarEvents
对象。Set Me.MenuHandler = _
gVBInstance.Events.CommandBarEvents _
(mcbMenucommandBar)
详细信息 关于使用命令条的附加信息,请参阅第四章“创建激活外接程序的工具栏按钮”。
该集合和该对象允许创建和删除窗口,移动在 IDE 中打开的窗口,和改变它的尺寸。所有的窗口都包含在 Windows 集合中。这意味着这些窗口不曾真正被关闭,只是通过 Visible 属性改变了它们的可视性。
注意,虽能使用 Window 对象来操作窗口框架本身,但不能用它来操作窗口所包含的对象(例如控件)。若要操作窗口包含的对象,必须引用适当的对象。
随后的代码片断演示如何引用 Window 对象和 Windows 集合:
'
触发窗口的可视性。假设列表中的窗口顺序和集合中的窗口顺序相匹配。'
一个更好的方法是根据caption
和type
来查询窗口。Private Sub cmdToggle_Click()
Dim w As Window
Dim sw As String
sw = Combo1.Text
If sw <> "" Then
If sw = "MainWindow" Then
Set w = vbi.MainWindow
Else
Set w = vbi.Windows(Combo1.ListIndex)
End If
w.Visible = Not w.Visible
RefreshWindows
End If
End Sub
该集合包含了给定 LinkedWindowFrame 中的所有窗格。“链接的窗口”定义成两个或更多窗口,这些窗口连接在单一的联合窗口中,被称之为“LinkedWindowFrame”的框架所包围。LinkedWindowFrame 中的每一个子窗口被称为“窗格”。LinkedWindowFrame 存在于所有能链接或连接在一起的窗口四周,(除了代码窗口、设计器窗口、对象浏览器窗口以及搜索和替换窗口外)。
如果从 LinkedWindowFrame 中删除了所有的区,该 LinkedWindowFrame 也被删除。(唯一的例外是主窗口)
只有类型为 LinkedWindowFrame 的窗口有 ContainedWindows 集合。对于其它窗口类型,该集合是 Nothing。
下面的代码片断演示了如何引用 LinkedWindows 集合:
'
如果窗口被链接或连接,则解除链接或连接。Private Sub cmdUnlinkWindow_Click()
Dim w As Window
Dim sw As String
sw = Combo1.Text
If sw = "" Then Exit Sub
If sw = "MainWindow" Then
Set w = vbi.Windows.MainWindow
Else
Set w = vbi.Windows(Combo1.ListIndex)
End If
If Not w.LinkedWindowFrame Is Nothing Then
w.LinkedWindowFrame.LinkedWindows.Remove w
End If
RefreshWindows
End Sub
这是一个显示对象代码的对象提供的窗口。不能创建或破坏 IDE 中的 CodePane 对象,但可以操纵它们的高度、宽度和位置。也可以插入或删除代码行(使用 InsertLines 和 DeleteLine 方法),选择某些行并使其突出显示或不突出显示。可以使用 GetSelectedText 方法把选好的代码复制到 Windows 的剪贴板上。
虽然 CodePane 对象允许可视地检查或选择存在的代码,但是不允许更改它。为此,必须使用 CodeModule 对象,如本章“用外接程序操作代码”部分所描述的那样。
下面的代码片断演示了如何引用 CodePane 集合:
'
用滚动条滚动代码窗格。Private Sub sclCodePane_Change()
Dim p As VBProject
Dim c As VBComponent
Dim cp As CodePane
Dim sc As String
Dim sp As String
sp = cmbProj.Text
sc = cmbComp.Text
If sp <> "" And sc <> "" Then
Set c = _
vbi.VBProjects.Item(sp). _
VBComponents.Item(sc)
Set cp = c.CodeModule.CodePane
cp.TopLine = sclCodePane.Value + 1
End If
End Sub