全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2367
推到 Plurk!
推到 Facebook!

Dll Form中無法使用Tab鍵

缺席
cubi
初階會員


發表:56
回覆:94
積分:35
註冊:2002-04-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-12-12 13:10:47 IP:61.58.xxx.xxx 未訂閱
請教前輩 在Dll中的Form為何按Tab沒作用,謝謝
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-12-12 13:23:40 IP:203.73.xxx.xxx 未訂閱
引言: 在Dll中的Form為何按Tab沒作用,謝謝
cubi 你好: 我做的可以喔~~你是怎麼做的呢?? --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
chfamy
中階會員


發表:87
回覆:161
積分:54
註冊:2002-05-03

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-12-12 21:31:36 IP:61.219.xxx.xxx 未訂閱
由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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-12-12 22:15:56 IP:211.23.xxx.xxx 未訂閱
何不試試delphi特有的package的型式,和dll有點相似,也可以用來將所有的子系統和主系統切開,可動態載入及釋放子系統,我手上有一案子就是這樣做,關於package的用法可以找我以前在本站發表的文章,有簡單的範例 @@~~飛翔在天際的精靈~~@@
------
@@~~飛翔在天際的精靈~~@@
chfamy
中階會員


發表:87
回覆:161
積分:54
註冊:2002-05-03

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-12-13 00:40:03 IP:61.219.xxx.xxx 未訂閱
客戶要求規定要用Dll方式,因為原本要用VB開發, VB沒有BPL形式檔案.
cubi
初階會員


發表:56
回覆:94
積分:35
註冊:2002-04-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-12-13 09:41:20 IP:61.58.xxx.xxx 未訂閱
引言:
引言: 在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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-12-13 09:45:15 IP:61.58.xxx.xxx 未訂閱
續上...
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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2002-12-13 10:19:36 IP:203.73.xxx.xxx 未訂閱
cubi 你好: 我使用的是 SDI Form 可能幫不上忙了... 不知道其他大大有沒有解決方法呢?? --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
chfamy
中階會員


發表:87
回覆:161
積分:54
註冊:2002-05-03

發送簡訊給我
#9 引用回覆 回覆 發表時間:2002-12-13 20:18:39 IP:61.219.xxx.xxx 未訂閱
EntryPoint(dcomConn1, Application, Self, sFormName, TMenuItem(Sender).Caption, DllHandle); 請問上列的dcomConn1是什麼元件?在元件那一頁次?
cubi
初階會員


發表:56
回覆:94
積分:35
註冊:2002-04-15

發送簡訊給我
#10 引用回覆 回覆 發表時間:2002-12-14 08:57:30 IP:61.57.xxx.xxx 未訂閱
引言: EntryPoint(dcomConn1, Application, Self, sFormName, TMenuItem(Sender).Caption, DllHandle); 請問上列的dcomConn1是什麼元件?在元件那一頁次?
您好,那是TADOConnection,在ADO頁次裡
chfamy
中階會員


發表:87
回覆:161
積分:54
註冊:2002-05-03

發送簡訊給我
#11 引用回覆 回覆 發表時間:2002-12-15 18:31:37 IP:61.219.xxx.xxx 未訂閱
請問版主那裡有
系統時間:2024-04-29 1:10:48
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!