DLL中的Forms問題,大家來看一下啊!! Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061208104302104.html
我在視窗的panel中調用了一個dll檔案中的視窗,調用是一切正常的,但要加
Panel1.updatecontrolstate視窗才能正常的顯示出來。如果我的dll表單中用了pagecontrol,問題就出現了,當按上面的tab切換時, panel的顯示不會發生變化,除非再次調用Panel1.updatecontrolstate。 關鍵是這個語句怎麼加,加在什麼地方?大家可以嘗試一下。
你跟蹤以下就知道了,Panel1.updatecontrolstate,實際上是給vcl發送訊息,
updatecontrolstate發送的是cm_base+25;
所以要麼你在本地視窗切換的時候sendmessage,要麼在dll視窗中的onpaint事件裡
寫入.
//不知道對不對,樓主看看
我的子視窗代碼:
function CreateDLLForm(myAPP:TApplication;myScr:TScreen):TForm;
begin
Application:=myApp;
Screen:=myScr;
application.CreateForm(TfrmDllForm,frmDllForm);
result:=frmDllForm;
end;
我的主視窗代碼:
myHandle:=LoadLibrary('dllproj.dll');
if myHandle<>0 then
begin
@myProc:=GetProcAddress(myHandle,'CreateDLLForm');
if assigned(myProc) then
begin
DLLForm:=myProc(Application,Screen);
DllForm.Parent:=Panel1;
DLLform.Show;
Panel1.UpdateControlState;
end;
end;
我嘗試過了,dll視窗的pagecontrol發生變化的時候,主視窗好像無法感知。
可以通過發訊息的辦法和主表單通訊!
SENDMESSAGE(APPLICATION。MAINFORM。HANDLE,WM-XXXX,XX,XX);
然後主表單在對應的訊息處理函數裡面執行相應的操作!
前提是DLL要用主程式的APPLICATION
帶包編譯(vcl70.bpl, rtl70.bpl)
to:newfang(傳說中的MIC)
我本來想在dll視窗的pagecontrolchange中用sendmessage,結果,主程式根本就沒收到,問題確實如你所說,主程式的application控制代碼得不到啊,所以這個發訊息的動作寫在什麼地方還沒研究出來
另外,我處理訊息的過程是在主form中定義的,好像訊息傳給應用程式也不行,要傳給form的控制代碼。
在建立Dllform的時候把applicaton.handle作為DLLForm單元中的全域變數。
(或者直接傳遞panel1的handle);這樣就可以給application或者panel1發送訊息直接通訊了。
訊息在pagecontrol的onchange事件裡發送即可。
現在的問題變成了DLL子視窗發訊息時怎樣知道主視窗的控制代碼,不是應用程式的,