写小功能性的程序, 至今我都没看到有比 VB6 更简单方便的
但是每次添加 API 都觉得麻烦,要单独启动一个程序,选了之后还不能复制黏贴,要遵循程序要求又按这个那个的,麻烦。。。。。。。
以前见过一个 paker api 添加插件,但不知道为什么用几天就崩溃出错,就再也用不了了
别的感受一般,但是那个便利程度是 win.tlb 以外最简单易用的,win.tlb 里面的api内容不全不说,很多内容还固化了没法修改
我也写一个 typelibbuilder ,但是没有完全完善,懒得改。。。。。。。。。
正题,写了一个 api 添加的插件:

这个插件写的跟我见过的 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
老规矩,完全开源 。。。。。。。。。。。
如果文章的内容帮助到你了,请留言点赞

浙公网安备 33010602011771号