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

請問如何取得另一隻執行檔中form的參考(reference)

答題得分者是:Justmade
iamjsn
初階會員


發表:78
回覆:95
積分:44
註冊:2002-08-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-29 14:46:15 IP:203.204.xxx.xxx 未訂閱
我想要用 ShellExecute開啟另一隻執行檔(程式中只有一個form如下), 並取得裏面的變數Form1來做 Form1.ManualDock(self,nil,alnone);//好將這個form,dock到自已的form上,不知有沒有方法可以完成。    就是從自已的程式中,另外開啟一隻執行檔(exe),並將這個新開啟的form,dock到自已的form上。謝謝。    
     //要被執行的form如下
unit test;    interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;    type
  TForm1 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
  end;    var
  Form1: TForm1;    implementation    {$R *.dfm}    end.
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-05-29 15:41:00 IP:218.16.xxx.xxx 未訂閱
應不可能執行另一程式裡的函數的。    你最好用 CreateProcess 起動該程式 之後用 WaitForInputIdle 等他起動好 之後用 FindWindow 找它的 Handle 之後用 SetParent 來將它放到自己的 Form 中    程式碼大約是這樣 :
procedure TForm1.Button1Click(Sender: TObject);
var
  PI : TProcessInformation;
  SI : TStartupInfo;
  FormXHWND : HWND;
begin
  FillChar(SI, SizeOf(SI), 0);
  SI.CB := SizeOf(SI);
  if CreateProcess(0,'FormXProg.exe',NIL,NIL,False,NORMAL_PRIORITY_CLASS, NIL, NIL,SI,PI) then
  begin
    WaitForInputIdle(PI.hProcess, 10000); // Max wait 10 secs
    FormXHWND := FindWindow('TFormX',nil);
    SetParent(FOrmXHWND,Handle);
  end
  else
    ShowMessage('Cannot Open FormXProg');
end;
另 1. 你最好在 FormX 設好 位置,亦可用 SetWindowPos 來設 2. 若你不想 FormX 有 Caption / Border, 在 FormX 設 BorderStyle 為 bsNone
系統時間:2024-05-04 14:28:38
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!