最近升級到RAD XE8。DELPHI MessageDlg來自DLL的調用會中斷控制焦點
我有一個DLL與幾個MessageDLg調用例如警告/信息等
procedure Information(Msg: string); stdcall;
begin
MessageDlg(Msg,mtInformation, [mbOK],0);
end;
上週我注意到以下幾點: - 如果我雙擊一個網格顯示消息處理器
begin
Information("I am here"); //in the dll
ens
但是當我點擊和消息框消失,我再也不能點擊網格(鼠標滾輪不起作用,但不是按鈕)(無響應)。如果我點擊第二個控件,然後重新上網,一切都很順利。
我嘗試添加到DLL
uses VCL.Forms;
procedure Information(Msg: string); stdcall;
begin
Application.Handle := GetForegroundWindow;
try
MessageDlg(Msg,mtInformation, [mbOK],0);
finally
Application.Handle := 0;
end;
end;
無濟於事。
我已經建立了以下內容: -
IH我的應用程序
CanFocus; //DBGrid1
MessageDlg(Msg,mtInformation, [mbOK],0);
CanFocus; //Still DBGrid
,但在我的應用程序
CanFocus; //DBGrid1
Information('Hi ya');
CanFocus; //MAINFORM
(在通過函數信息()的DLL調用的MessageDlg) 僅爲調試目的添加了CanFocus
因此,DBGrid上的第一個dblclick調用Information,但在VCL中未檢測到隨後的dblclicks(消息通過Windows Detective可見)。 in VC.LDBGids TCustomDBGrid.AcquireFocus: 重點是第一次和False,隨後,直到我點擊第二個控件,然後回到DBGrid。
他的問題是否更明確?
TIA
蓮
是DLL與此有關。嘗試在非常簡單的VCL應用程序中重現此問題,其中所有代碼都駐留在同一個可執行模塊中。儘量減少這種微不足道的繁殖。 –
我做到了。它只發生在DLL中。將MessageDlg更改爲嘟嘟聲;沒有任何問題。 – Ephraim
更改嘟嘟聲證明什麼都沒有。你能製作一個MCVE嗎?否則,我們必須嘗試這樣做,並且根據我的經驗,那麼經常發生的是我們生成的代碼實際上與您的代碼不同。 –