請問該如何去做到動態開啟Form呢? |
|
SKYSTAR
中階會員 發表:76 回覆:198 積分:64 註冊:2002-06-10 發送簡訊給我 |
各位先進好.... 可否請教一個問題?
就是我想要撰寫一段程序...此程序的功能是應用傳入的參數來新建視窗...
如:目前有多個MdiChild Form...
而目前的做法是...在MainForm中,對每一個開啟Form的程序,都撰寫類似的程
式碼...如:
MdiChild1 := TMdiChild1.Create(Self);
或
MdiChild2 := TMdiChild2.Create(Self);
.....等等...
而今天我是想要撰寫一共用程序...想要將上面的MdiChild?及TMdiChild?..
這兩個部份...利用參數來應用...
如用一個程序....WCreateForm(視窗名稱,視窗所屬類別...)來開啟或建立一
個視窗....
不知這樣的程序該如何定義以及撰寫程式碼呢? Thanks!!
|
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
引言: 各位先進好.... 可否請教一個問題? 就是我想要撰寫一段程序...此程序的功能是應用傳入的參數來新建視窗... 如:目前有多個MdiChild Form... 而目前的做法是...在MainForm中,對每一個開啟Form的程序,都撰寫類似的程 式碼...如: MdiChild1 := TMdiChild1.Create(Self); 或 MdiChild2 := TMdiChild2.Create(Self); .....等等... 而今天我是想要撰寫一共用程序...想要將上面的MdiChild?及TMdiChild?.. 這兩個部份...利用參數來應用... 如用一個程序....WCreateForm(視窗名稱,視窗所屬類別...)來開啟或建立一 個視窗.... 不知這樣的程序該如何定義以及撰寫程式碼呢? Thanks!!可以直接用 Application.Createform(TMdiChild1,MdiChild1); |
SKYSTAR
中階會員 發表:76 回覆:198 積分:64 註冊:2002-06-10 發送簡訊給我 |
|
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
還是沒完全弄清楚你的目的,用以上之方法可以如下:
var f:TForm; id:integer; begin id:=2; case id of 2: application.createform(TForm2, f); 3: application.createform(TForm3, f); end; end;application.createForm本來就是傳入類別. 實際上考慮點應是如何呼叫, 我們的做法是在MainForm, 所有MenuItem之Name均與click後要開啟Form之ClassName接近, 例如MenuItem為MA101, 則Click後開啟TfmA101之Form. 如此就可以寫一程序接受Form之ClassName, 讓所有menuItem均指向此一程序. 若這是你要的我可以show給你看 |
andersonhsieh
版主 發表:33 回覆:531 積分:439 註冊:2002-06-10 發送簡訊給我 |
在每from的unit加入以下程式碼
initialization
RegisterClass(form class); 在主要的form用以下程式碼來create form
var cs : TClass;
fm : TForm;
begin
cs := GetClass(TForm Class);
Application.CreateForm(TComponentClass(cs), fm);
end; @@~~飛翔在天際的精靈~~@@
------
@@~~飛翔在天際的精靈~~@@ |
SKYSTAR
中階會員 發表:76 回覆:198 積分:64 註冊:2002-06-10 發送簡訊給我 |
引言: 還是沒完全弄清楚你的目的,用以上之方法可以如下:您好.... 其實您所提的方式...我現在已看懂了.... 只不過...如果我不想把程式給寫死的話...簡單說...想看看Delphi是否可以 做出一點彈性出來... (嘻...我會不會太怪胎了呀!!) 再稍加說明一下....以您的例子來說...即應用Application.CreateForm()來 新建視窗.... 我是想要用一程序來將參數代入到Application.CreateForm的參數中... 如:執行程序的句子...: WCreateForm(TForm1,Form1); (程序定義部份)...: procedure WCreateForm(AA,BB...) 上面的AA...就是要代入TForm1 上面的BB...就是要代入Form1 然後其WCreateForm程序中...最少會有一列命令....就是寫著 Application.CreateForm(AA,BB)... (我知道這個寫法應該是錯的...因為我 不知道該如何去定義AA,BB的型態....) 不知道您是否了解了呢? 如果無解的話...也只能照著您所寫的方式來做了..!! Thanks!! 發表人 - SKYSTAR 於 2002/07/18 22:53:46var f:TForm; id:integer; begin id:=2; case id of 2: application.createform(TForm2, f); 3: application.createform(TForm3, f); end; end;application.createForm本來就是傳入類別. 實際上考慮點應是如何呼叫, 我們的做法是在MainForm, 所有MenuItem之Name均與click後要開啟Form之ClassName接近, 例如MenuItem為MA101, 則Click後開啟TfmA101之Form. 如此就可以寫一程序接受Form之ClassName, 讓所有menuItem均指向此一程序. 若這是你要的我可以show給你看 |
SKYSTAR
中階會員 發表:76 回覆:198 積分:64 註冊:2002-06-10 發送簡訊給我 |
引言: 在每from的unit加入以下程式碼 initialization RegisterClass(form class); 在主要的form用以下程式碼來create form var cs : TClass; fm : TForm; begin cs := GetClass(TForm Class); Application.CreateForm(TComponentClass(cs), fm); end; @@~~飛翔在天際的精靈~~@@您好... 不好意思.... 可否再煩請您稍加解釋一下...每列的代表意義呢? 因為看不太懂... |
andersonhsieh
版主 發表:33 回覆:531 積分:439 註冊:2002-06-10 發送簡訊給我 |
引言: 在每from的unit加入以下程式碼 initialization RegisterClass(form class); 在主要的form用以下程式碼來create form var cs : TClass; fm : TForm; begin cs := GetClass(TForm Class); Application.CreateForm(TComponentClass(cs), fm); end; @@~~飛翔在天際的精靈~~@@不好意思一個地方打錯了 cs := GetClass(class name);//參數為字串 @@~~飛翔在天際的精靈~~@@
------
@@~~飛翔在天際的精靈~~@@ |
andersonhsieh
版主 發表:33 回覆:531 積分:439 註冊:2002-06-10 發送簡訊給我 |
在每from的unit加入以下程式碼
initialization
RegisterClass(form class); 在主要的form用以下程式碼來create form
var cs : TClass;
fm : TForm;
begin
cs := GetClass(class name);//參數為字串,這一個為你在每一個unit的initialization段用RegisterClass(form class)註冊的名稱
Application.CreateForm(TComponentClass(cs), fm);
end; @@~~飛翔在天際的精靈~~@@ @@~~飛翔在天際的精靈~~@@
------
@@~~飛翔在天際的精靈~~@@ |
SKYSTAR
中階會員 發表:76 回覆:198 積分:64 註冊:2002-06-10 發送簡訊給我 |
|
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |