PopupMenu在DLL中不显示

时间:2014-07-05 12:27:49

标签: dll freepascal lazarus

我正在为Lazarus 1.2.4 / FreePascal 2.6.4中的“PL / SQL Developer”IDE(来自Allround Automations)开发一个插件。该插件是一个x86 DLL。

到目前为止,除了一件事以外,一切都运转良好。这是设置:

  • 我有一个TForm,其中包含TTreeViewTPopupMenu个组件。
  • TPopupMenu组件已分配给TTreeView.PopupMenu属性。
  • TPopupMenu组件创建了非零数量的菜单项,并设置了属性AutoPopup := trueTrackButton := 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属性。

对此有任何帮助吗?

1 个答案:

答案 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问题有关。