我正在为Lazarus 1.2.4 / FreePascal 2.6.4中的“PL / SQL Developer”IDE(来自Allround Automations)开发一个插件。该插件是一个x86 DLL。
到目前为止,除了一件事以外,一切都运转良好。这是设置:
TForm
,其中包含TTreeView
和TPopupMenu
个组件。TPopupMenu
组件已分配给TTreeView.PopupMenu
属性。TPopupMenu
组件创建了非零数量的菜单项,并设置了属性AutoPopup := true
,TrackButton := tbRightButton
。这就是问题...... 在运行时显示表单并右键单击树视图时:
OnPopup
事件已被执行。我尝试以简约的方式执行此操作 - 只有一个导出的DLL,它使用树视图和弹出菜单生成表单,然后运行proc。通过Win的rundll32.exe
。相同的结果 - 没有弹出菜单。
如果我从一个独立的Win应用程序尝试相同的设置(form + treeview + popupmenu),它就可以了 - 弹出菜单出现了。
对此有何帮助?
与...有关或可能与之无关:
PL / SQL Developer捆绑的“插件演示2 / Delphi”做了Application.Handle := IDE_GetAppHandle;
的分配(IDE_GetAppHandle
是来自PLSQL Developer IDE的回调函数),这是我在FPC中无法做到的,因为TApplication
类没有Handle
属性。
对此有任何帮助吗?
答案 0 :(得分:0)
在FreePascal + Lazarus论坛上找到了解决方案:http://forum.lazarus.freepascal.org/index.php/topic,24135.msg144938.html#msg144938
摘录:这是拼箱中的一个错误。但由于LCL源与FPC + Lazarus一起分发,您可以自己修补LCL:
${lazarus-install-folder}/lcl/interfaces/win32/win32obj
。TWin32WidgetSet.AppInit
程序定义。CreateAppHandle
的评论(注释为// Create parent of all windows, 'button on taskbar'
)。CreateAppHandle
之前,将呼叫从if not IsLibrary then
向上移至if
。显然, 与Application.Handle
问题有关。