請問如何取得另一隻執行檔中form的參考(reference) |
答題得分者是:Justmade
|
iamjsn
初階會員 發表:78 回覆:95 積分:44 註冊:2002-08-16 發送簡訊給我 |
我想要用 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 發送簡訊給我 |
應不可能執行另一程式裡的函數的。 你最好用 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 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |