PctGL SERIES  
http://pctgl.cnblogs.com

写小功能性的程序, 至今我都没看到有比 VB6 更简单方便的

但是每次添加 API 都觉得麻烦,要单独启动一个程序,选了之后还不能复制黏贴,要遵循程序要求又按这个那个的,麻烦。。。。。。。

以前见过一个 paker api 添加插件,但不知道为什么用几天就崩溃出错,就再也用不了了

别的感受一般,但是那个便利程度是 win.tlb 以外最简单易用的,win.tlb 里面的api内容不全不说,很多内容还固化了没法修改

我也写一个 typelibbuilder ,但是没有完全完善,懒得改。。。。。。。。。

正题,写了一个 api 添加的插件:

                                    image

这个插件写的跟我见过的 paker api插件几乎一摸一样,区别是增加了设置

 

写这个插件,最大的问题是查资料,理解插件程序怎么制作

困扰最大的是怎么添加子菜单,添加工具栏按钮,添加按钮图标。。。。。

下面的代码,可以说是整个程序中最关键,最核心,最难的代码了,翻资料,问ai,反复测试

很多关键点ai根本就不知道怎么回事,完全是猜,最后实现还是靠多年积累的一些边角料知识拼凑出整个逻辑,可行方法。。。。。

 (多说几句,插件所使用的api数据库来自于vb6自带的插件程序,我在列表内发现内容有重复,而且内容很少,谁用谁自己添加吧,

 保存功能好像没写,点菜单的数据库重置好像就是保存为数据库,自己看源码,自己改吧)

着重说 2 个点,也是制作过程中费了大劲才解决的问题,

一个是给工具栏添加按钮,所有的例子都是说工具栏名字是“ Standard” 怎么试都是错

最后把所有工具栏的同级控件都枚举了一遍名字才确认,中文版的工具栏控件名字是中文字 “标准”,简直难以理解。。。

其次是按钮图标的问题,所有的示例都是 faceid 用的是ide内部图标,想自定义图标一开始一直奔着picture和mask属性折腾,各种位深各种图片试了个遍全不行

偶然想起来,ide总是用剪贴板传递数据,再反复查msdn才发现 PasteFace 这个方法,直接做实验,先load图片,在set剪贴板,一次成功。。。

 1 Private Sub CreateCommandBarButton()
 2     
 3     '// 此函数所使用的对象变量类型都不得修改,调整,已经是经过测试的最佳实现
 4     '//
 5     
 6     On Error Resume Next
 7     
 8     Dim ToolCommandBar                  As CommandBar
 9     Dim MenuCommandBar                  As CommandBar
10         
11     VB.Clipboard.Clear
12     VB.Clipboard.SetData LoadResPicture(105, vbResBitmap), vbCFBitmap
13     
14     '// 给窗口 ToolBar 按钮添加 快捷按钮
15     Set ToolCommandBar = PGs.Global_InstanceOfVB6.CommandBars("Standard")
16     
17     If IsObjectInitialized(ToolCommandBar) = False Then
18         Set ToolCommandBar = PGs.Global_InstanceOfVB6.CommandBars("标准")
19     End If
20     
21     If IsObjectInitialized(ToolCommandBar) Then
22         
23         Set PG.APickerToolBarButton = ToolCommandBar.Controls.Add(Type:=msoControlButton, Temporary:=True)
24         
25         With PG.APickerToolBarButton
26 
27             .Style = msoButtonIcon
28 '            .Caption = "APicker"
29             .Tag = "APickerToolBar"
30             .ToolTipText = "Open/Close APicker"
31 '            .OnAction = "APicker.Connect.APickerToolBarButton_Click"           '// 不起作用
32 
33             .PasteFace
34 
35         End With
36         
37         '// 绑定事件
38         Set APickerMenuBar = PGs.Global_InstanceOfVB6.Events.CommandBarEvents(PG.APickerToolBarButton)
39         
40     End If
41     
42     
43     '// 在外接程序菜单下添加子菜单
44     Set MenuCommandBar = PGs.Global_InstanceOfVB6.CommandBars("Add-ins")
45     
46     If IsObjectInitialized(MenuCommandBar) = False Then
47         Set MenuCommandBar = PGs.Global_InstanceOfVB6.CommandBars("外接程序")
48     End If
49     
50     If IsObjectInitialized(MenuCommandBar) Then
51         
52         Set PG.APickerMenuBarButton = MenuCommandBar.Controls.Add(Type:=msoControlButton, Temporary:=True)
53         
54         With PG.APickerMenuBarButton
55             
56             .Style = msoButtonIconAndCaption
57             .Caption = "A&Picker"
58             .Tag = "APickerMenuBar"
59 '            .OnAction = "APicker.Connect.APickerMenuBarButton_Click"
60             .PasteFace
61             
62         End With
63         
64         '// 绑定事件
65         Set APickerToolBar = PGs.Global_InstanceOfVB6.Events.CommandBarEvents(PG.APickerMenuBarButton)
66         
67     End If
68     
69     
70 End Sub

 

https://files.cnblogs.com/files/pctgl/APiPicker.rar?t=1770209576&download=true

老规矩,完全开源 。。。。。。。。。。。

如果文章的内容帮助到你了,请留言点赞 

 

posted on 2026-02-04 20:53  PctGL  阅读(11)  评论(0)    收藏  举报