Dll Form中無法使用Tab鍵 |
缺席
|
cubi
初階會員 發表:56 回覆:94 積分:35 註冊:2002-04-15 發送簡訊給我 |
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
|
chfamy
中階會員 發表:87 回覆:161 積分:54 註冊:2002-05-03 發送簡訊給我 |
由Dll動態載入Form:
如果是MDI的Form我測試是無法用[tab]且Focus(TEdit...)也有點問題,
如果是SDI的Form均無上述問題. 我正計畫寫主Main Form(Exe),其他子功能Function Form(Dll),也遭遇
一些問題如[tab]及Focus...,我寫將一個Form(全功能Open Table,Edit
Delete,Post...)寫成Dll形式,再由Exe動態載入此Form,此Form在指定
給Exe中變數TForm,再以Application.Create(...,...);產生該Form,不
知如何寫更不知是否可行,個人認為一定可以,不然國外大型專案補可能
一個Exe完成全部功能,有請版主或各位高手指點.
|
andersonhsieh
版主 發表:33 回覆:531 積分:439 註冊:2002-06-10 發送簡訊給我 |
|
chfamy
中階會員 發表:87 回覆:161 積分:54 註冊:2002-05-03 發送簡訊給我 |
|
cubi
初階會員 發表:56 回覆:94 積分:35 註冊:2002-04-15 發送簡訊給我 |
引言:引言: 在Dll中的Form為何按Tab沒作用,謝謝cubi 你好: 我做的可以喔~~你是怎麼做的呢?? -- >>< face="Verdana, Arial, Helvetica"> 不曉得版主是Dll Form是SDI還是MDI,我是用MDI,以下是小弟用的方式MainForm procedure TfrmPMMain._ItemClick(Sender: TObject); var EntryPoint: TEntryPoint; sDllName: String; sDllEP: String; sFormName: String; bSucc: Boolean; begin sDllName := 'ABC.Dll'; (* Dll的檔案名稱 *) sDllEP := 'EntryPoint'; (* 要呼叫的Function *) sFormName := 'Form1'; (* 要載入的Form *) DllHandle := LoadLibrary(PChar(sDllName)); if DllHandle = 0 then raise Exception.Create('DLL載入錯誤,可能是檔案損壞或找不到該DLL檔!!'); @EntryPoint := GetProcAddress(DllHandle, PChar(sDllEP)); if @EntryPoint <> nil then begin bSucc := EntryPoint(dcomConn1, Application, Self, sFormName, TMenuItem(Sender).Caption, DllHandle); if Not bSucc then raise Exception.Create('無法啟動程式!!'); end else begin raise Exception.Create('找不到' sDllEP '該函式名稱,無法呼叫函式!!'); end; end;發表人 - cubi 於 2002/12/13 09:46:29 |
cubi
初階會員 發表:56 回覆:94 積分:35 註冊:2002-04-15 發送簡訊給我 |
續上...
Dll Form function EntryPoint(var dcom: TDCOMConnection; ParentApplication: TApplication; ParentForm: TForm; FormName: String; MDIFormTitle: PChar; DHandle: THandle): Boolean; export; stdcall; var _GetDCOMConn: TGetDCOMConn; FrmClass: TPersistentClass; frm: TComponent; begin Result := True; frm := FindGlobalComponent(FormName); if frm <> Nil then begin TForm(frm).BringToFront; end else begin try frmPMPubDM01 := TfrmPMPubDM01.Create(Application); frmPMPubDM01.MDIFormCaption := MDIFormTitle; frmPMADM01 := TfrmPMADM01.Create(Application); Application := ParentApplication; (* 取得ParentForm的DCOMConnection *) _GetDCOMConn := Nil; if TForm(frmPMADM01.Owner).MethodAddress('_GetDCOMConn') <> Nil then begin @_GetDCOMConn := TForm(frmPMADM01.Owner).MethodAddress('_GetDCOMConn'); frmPMADM01.dcomPubConn := _GetDCOMConn; end; (* Show Form *) FrmClass := GetClass('T' FormName); if FrmClass <> Nil then begin frmPMPubDM01.DllHandle := DHandle; TFormClass(FrmClass).Create(Nil); end else begin Result := False; end; except Result := False; end; end; end; procedure DLLUnloadProc(Reason: Integer); register; begin if Reason = DLL_PROCESS_DETACH then Application := DllApplication; end; exports EntryPoint; begin DllApplication := Application; DLLProc := @DLLUnloadProc; end. |
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
|
chfamy
中階會員 發表:87 回覆:161 積分:54 註冊:2002-05-03 發送簡訊給我 |
|
cubi
初階會員 發表:56 回覆:94 積分:35 註冊:2002-04-15 發送簡訊給我 |
|
chfamy
中階會員 發表:87 回覆:161 積分:54 註冊:2002-05-03 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |