線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1711
推到 Plurk!
推到 Facebook!

請問該如何去做到動態開啟Form呢?

 
SKYSTAR
中階會員


發表:76
回覆:198
積分:64
註冊:2002-06-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-07-18 11:51:09 IP:211.74.xxx.xxx 未訂閱
各位先進好.... 可否請教一個問題? 就是我想要撰寫一段程序...此程序的功能是應用傳入的參數來新建視窗... 如:目前有多個MdiChild Form... 而目前的做法是...在MainForm中,對每一個開啟Form的程序,都撰寫類似的程 式碼...如: MdiChild1 := TMdiChild1.Create(Self); 或 MdiChild2 := TMdiChild2.Create(Self); .....等等... 而今天我是想要撰寫一共用程序...想要將上面的MdiChild?及TMdiChild?.. 這兩個部份...利用參數來應用... 如用一個程序....WCreateForm(視窗名稱,視窗所屬類別...)來開啟或建立一 個視窗.... 不知這樣的程序該如何定義以及撰寫程式碼呢? Thanks!!
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-07-18 13:33:17 IP:61.219.xxx.xxx 未訂閱
引言: 各位先進好.... 可否請教一個問題? 就是我想要撰寫一段程序...此程序的功能是應用傳入的參數來新建視窗... 如:目前有多個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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-07-18 16:27:45 IP:211.74.xxx.xxx 未訂閱
引言: 可以直接用 Application.Createform(TMdiChild1,MdiChild1);
不好意思....您可能誤會我的意思了!! 我是想將如同您提出的寫法....但是該TMdiChild1及MdiChild1...是要以變 數或指標型態來代入到Application.Creatform()中的.... 不知道行不行得通呢? Thanks!!
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-07-18 17:08:39 IP:203.217.xxx.xxx 未訂閱
還是沒完全弄清楚你的目的,用以上之方法可以如下:
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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-07-18 22:24:27 IP:211.23.xxx.xxx 未訂閱
在每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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-07-18 22:50:25 IP:210.201.xxx.xxx 未訂閱
引言: 還是沒完全弄清楚你的目的,用以上之方法可以如下:
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給你看
您好.... 其實您所提的方式...我現在已看懂了.... 只不過...如果我不想把程式給寫死的話...簡單說...想看看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:46
SKYSTAR
中階會員


發表:76
回覆:198
積分:64
註冊:2002-06-10

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-07-18 22:56:44 IP:210.201.xxx.xxx 未訂閱
引言: 在每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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2002-07-18 22:57:15 IP:211.23.xxx.xxx 未訂閱
引言: 在每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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2002-07-18 23:00:55 IP:211.23.xxx.xxx 未訂閱
在每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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2002-07-19 04:25:36 IP:210.201.xxx.xxx 未訂閱
謝謝各位....    問題...我已經解決了!!    多謝....    註:經由這一個問題...我試著用不同方式去解決...又令自己多了一些物件和 類別的觀念... 
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#11 引用回覆 回覆 發表時間:2002-07-19 08:15:41 IP:61.219.xxx.xxx 未訂閱
建議你詳細看一下andersonhsieh之程式, 我們也是如此做, 這樣彈性最大
系統時間:2024-05-15 2:17:42
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!