在DLL中时,弹出菜单不显示
我正在Lazarus 1.2.4/FreePascal 2.6.4中为“PL/SQL开发人员”IDE(来自Allround Automations)开发一个插件。该插件是一个x86DLL 到目前为止,一切都很顺利,除了一件事。以下是设置:在DLL中时,弹出菜单不显示,dll,freepascal,lazarus,Dll,Freepascal,Lazarus,我正在Lazarus 1.2.4/FreePascal 2.6.4中为“PL/SQL开发人员”IDE(来自Allround Automations)开发一个插件。该插件是一个x86DLL 到目前为止,一切都很顺利,除了一件事。以下是设置: 我有一个t表单,上面有一个t预览和一个TPopupMenu组件 tpopumenu组件被分配给t查看.PopupMenu属性 TPopupMenu组件创建的菜单项数量不为零,并且属性autopoup:=true,TrackButton:=tbRightBut
- 我有一个
,上面有一个t表单
和一个t预览
组件TPopupMenu
组件被分配给tpopumenu
属性t查看.PopupMenu
组件创建的菜单项数量不为零,并且属性TPopupMenu
,autopoup:=true
已设置TrackButton:=tbRightButton
- 弹出菜单不可见
- 然而,弹出菜单的
事件被执行OnPopup
rundll32.exe
。相同的结果-没有弹出菜单
如果我从一个独立的Win应用程序中尝试相同的设置(form+treeview+popupmenu),它工作正常-弹出菜单显示
有什么帮助吗
可能与之相关,也可能与之无关:
PL/SQL开发人员捆绑的“plugin demo 2/Delphi”执行Application.Handle:=IDE_GetAppHandle
(其中,IDE\u GetAppHandle
是来自PLSQL开发人员IDE的回调函数),这是我在FPC中无法做到的,因为TApplication
类没有Handle
属性
这方面也有帮助吗?在FreePascal+Lazarus论坛上找到了解决方案: 摘录:这是LCL中的一个bug。但由于LCL源与FPC+Lazarus一起分发,您可以自己修补LCL:
- 编辑
${lazarus安装文件夹}/lcl/interfaces/win32/win32obj
- 查找
过程定义TWin32WidgetSet.AppInit
- 在过程中找到对
(注释为CreateAppHandle
)的调用//创建所有窗口的父窗口,'任务栏上的按钮'
- 将调用从
如果不是IsLibrary中移动到
,然后在CreateAppHandle
之前向上移动if
- 保存、编译、生成。。。完成了
显然,它与
应用程序有关。处理
问题。(小细节是LCL,而不是FCL。FCL是类似custapp的单元)作为Oracle开发人员,我不区分其组件/单元库的不同风格;对我来说,这只是一堆帕斯卡单位,对不起。:-)谢谢你的关注。