2014-07-05 56 views
0

我正在開發Lazarus 1.2.4/FreePascal 2.6.4中的「PL/SQL Developer」IDE(來自Allround Automations)的插件。該插件是一個x86 DLL。PopupMenu在DLL中不顯示

到目前爲止一切工作都很好,除了一件事。這裏的設置:

  • 我有一個TFormTTreeView並在其上一個TPopupMenu組件。
  • TPopupMenu組件被分配給TTreeView.PopupMenu屬性。
  • TPopupMenu組件具有創建的非零數量的菜單項和屬性AutoPopup := true,TrackButton := tbRightButton集。

而這裏的問題... 當窗體在運行時顯示和樹視圖是右鍵單擊:

  • 彈出菜單中並沒有得到明顯的。
  • 然而,彈出菜單的OnPopup事件被執行。

我試着用簡約的方式做這個 - 一個只有一個導出的DLL,它帶有一個樹形視圖和一個彈出菜單,然後運行proc。通過Win的rundll32.exe。相同的結果 - 沒有彈出式菜單。

如果我從獨立的Win應用程序嘗試相同的設置(表單+ treeview + popupmenu),它可以正常工作 - 顯示彈出式菜單。

對此有何幫助?

可能會或可能不會涉及到它: 的PL/SQL Developer的捆綁式「插件演示2 /德爾福」做的Application.Handle := IDE_GetAppHandle;的分配新建分配FY(與IDE_GetAppHandle是從PLSQL開發IDE的回調函數),我可以」在FPC中做,因爲TApplication類沒有Handle屬性。

對此也有幫助嗎?

回答

0

發現了FreePascal的+拉撒路論壇的解決方案:http://forum.lazarus.freepascal.org/index.php/topic,24135.msg144938.html#msg144938

摘錄:它是LCL的錯誤。但是由於LCL信號源與FPC + Lazarus一起發佈,您可以自行修補LCL:

  • 編輯${lazarus-install-folder}/lcl/interfaces/win32/win32obj
  • 查找TWin32WidgetSet.AppInit過程定義。
  • 在程序中查找對CreateAppHandle(註釋爲// Create parent of all windows, 'button on taskbar')的調用。
  • 將電話從if not IsLibrary then以上移到CreateAppHandle以上,緊接在if之前。
  • 保存,編譯,構建...完成。

顯然,這是相關Application.Handle問題。

+1

(小細節是LCL,不是FCL。FCL是custapp這樣的單元) –

+0

作爲一個Oracle開發者,我沒有區分組件/單元庫的不同風格;這對我來說只是一堆帕斯卡單位,對不起。 :-)感謝您的發現。 – nop77svk