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

不好意思,想再問清楚一點

尚未結案
bonjovi999
一般會員


發表:4
回覆:1
積分:1
註冊:2005-08-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-11-14 15:55:25 IP:203.198.xxx.xxx 未訂閱
首先多謝你的回覆,但其實我在這個程序裡有一個接收參數的字串常數,或許我再寫清楚一點,如下 Function tFmG_MainMenu.BuildForm(Const FormName:String):Boolean; Var ExeForm:TForm; Begin If Application.FindComponent(FormName) = nil Then ExeForm:=(TForm(FindComponent('T' FormName)).Create(Self)) Else ExeForm:=Application.FindComponent(FormName) ; With ExeForm Do Begin Try ShowModal; finally Free; End; End; End;
G01
高階會員


發表:249
回覆:379
積分:215
註冊:2002-05-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-11-14 20:35:57 IP:61.64.xxx.xxx 未訂閱
您似乎誤解了FindComponent的用意 首先FindComponent只用在尋找已經被TApplication建立的Form 而當這個函式傳回 nil 時,TApplication並無任何物件指標指向該nil 它純脆只是傳回nil的值而已!!所以您不能拿 nil 值來建立元件!! 其次,建立一個元件前;通常我們必須宣告一個屬於該類別的指標 EX var Comp:TButton; //告訴compiler , 宣告一個TButton的物件指標"Comp" begin Comp := TButton.Create(nil);//配置一個TButton物件給"Comp" 在你的例子中,以下的一行犯了幾個錯誤 ExeForm:=(TForm(FindComponent('T' FormName)).Create(Self)) 1.不能拿 nil 值來建立元件!! 2.FindComponent('T' FormName) 並不能讓Compiler找到該Form的類別 所以總結如下 假設我們要動態產生一個叫做"TfDemoForm" 的自定Form類別元件 則程式碼應該如下 Function tFmG_MainMenu.BuildForm(Const FormName:String):Boolean; var ExeForm:TForm; TmpForm:TfDemoForm; begin If Application.FindComponent(FormName) = nil Then begin TmpForm := TfDemoForm.Create(self); ExeForm := TmpForm as TForm; TmpForm := nil; end Else ExeForm:=Application.FindComponent(FormName) ; ....以下照舊.... 努力不一定成功 , 不努力一定不成功!!
bonjovi999
一般會員


發表:4
回覆:1
積分:1
註冊:2005-08-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-11-16 09:45:28 IP:203.198.xxx.xxx 未訂閱
多謝你的解釋,但還有一點不白明,我的function是以const接收一個字串的名稱,但你所做的例子沒有讀取到這個參數,那怎樣知道我現需要create那一張form呢(這些form其實已經做好的,它們有自己的不同名稱),還有我不太明白你那句'TMPFORM:=tfdemoform',tfdemoform不是一定要是一個class的類別來嗎?謝謝你的幫忙。
G01
高階會員


發表:249
回覆:379
積分:215
註冊:2002-05-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-11-16 18:49:32 IP:61.64.xxx.xxx 未訂閱
假設TfDemoForm 所屬的檔案為UTfDemoForm.pas 而要使用 TmpForm := TfDemoForm.Create(self) as TForm;的單元名稱為 UDataModule.pas 則在 UDataModule.pas的implementation區段和END. 之間就要加上這一行 Uses UTfDemoForm; //-->這樣就行了 當Compiler看到這一行,它就會到UTfDemoForm.pas找出TfDemoForm類別出來 這樣說清楚吧 ?? 努力不一定成功 , 不努力一定不成功!!
Ktop_Robot
站務副站長


發表:0
回覆:3511
積分:0
註冊:2007-04-17

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-04-30 13:43:57 IP:000.000.xxx.xxx 未訂閱
提問者您好:


以上回應是否已得到滿意的答覆?


若已得到滿意的答覆,請在一週內結案,否則請在一週內回覆還有什麼未盡事宜,不然,
將由版主(尚無版主之區域將由副站長或站長)自由心證,選擇較合適之解答予以結案處理,
被選上之答題者同樣會有加分獎勵同時發問者將受到扣 1 分的處分。不便之處,請見諒。


有問有答有結案,才能有良性的互動,良好的討論環境需要大家共同維護,感謝您的配合。

------
我是機器人,我不接受簡訊.
系統時間:2024-04-18 21:40:27
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!