Delphi中DLL或Package窗体载入与显示
生活随笔
收集整理的這篇文章主要介紹了
Delphi中DLL或Package窗体载入与显示
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Delphi應用程序架構中有一種模式,采用DLL或Package存儲業務窗體,當需要時從其中載入到主程序中,這時候需要對DLL或Package中窗體進行處理,步驟如下:
1、定義窗體基類
typeTfrmBase = class(TForm)Panel1: TPanel;private{ Private declarations }protectedprocedure Loaded;override;public{ Public declarations }procedure UpdateActions; override;end;TfrmBaseClass = class of TfrmBase;implementation{$R *.dfm}{ TfrmBase }procedure TfrmBase.Loaded; begininherited; //將窗體改變為嵌入化 align := alClient;BorderStyle := bsNone;BorderIcons := []; end;procedure TfrmBase.UpdateActions; begininherited;//將方法Public化 end; ?2、創建具體的實例窗體
TfrmDll = class(TfrmBase)?
3、通過窗體數據窗體類
function GetDllFormClass : TfrmBaseClass; beginResult := TfrmDll; end;exportsGetDllFormClass;?
4、主窗體中動態載入DLL和創建DLL中的窗體對象
procedure TfrmMain.Button1Click(Sender: TObject); beginif DllHandle > 0 thenExit;DllHandle := LoadLibrary('FormDll.dll');if DllHandle > 0 thenbeginGetDllFormClass := GetProcAddress(DllHandle, 'GetDllFormClass');ifAssigned(GetDllFormClass) thenbegin cfrm := GetDllformClass;vfrm := cfrm.Create(Application); //設置窗體的Parent,通過ParentWindow方法實現,這點很重要vfrm.ParentWindow := TabSheet1.Handle; end;end; end;5、在主窗體上放置一個TApplicationEvents控件,在OnIdle事件中填寫以下代碼:
procedure TfrmMain.ApplicationEvents1Idle(Sender: TObject; var Done: Boolean); begin//當系統空閑時,處理子窗體的ActionUpdate事件if Assigned(vfrm) thenvfrm.UpdateActions; end;?
6、在OnMessage事件中填寫以下代碼:
procedure TfrmMain.ApplicationEvents1Message(var Msg: tagMSG;var Handled: Boolean); begin//如果窗體變量存在,則需要對消息進行判斷和處理,如果是窗體變量的消息,則不進一步處理if Assigned(vfrm) thenbeginif IsDialogMessage(vfrm.Handle, Msg) thenHandled := true;end; end; ?至此完成。
轉載于:https://www.cnblogs.com/ChinaEHR/archive/2012/09/30/2709221.html
總結
以上是生活随笔為你收集整理的Delphi中DLL或Package窗体载入与显示的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用Win8刷新和系统重置轻松恢复系统
- 下一篇: GNU make manual 翻译(