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

係Object 或是 Class?

尚未結案
BorlandUser
中階會員


發表:148
回覆:217
積分:73
註冊:2004-02-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-03-28 23:44:47 IP:218.102.xxx.xxx 未訂閱
我想問下: TForm 係一個class定係一個object? 咁 TFormClass 係咪一個class呢? 因為: type TForm1 = class(TForm) ..... var Form1: TForm1; 但 fm := FormClass.Create(Self); ??? 搞度我好唔明? 發表人 - BorlandUser 於 2004/03/29 00:26:14
conundrum
尊榮會員


發表:893
回覆:1272
積分:643
註冊:2004-01-06

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-03-29 00:02:03 IP:61.64.xxx.xxx 未訂閱
多謝 喝喝 發表人 - conundrum 於 2004/03/29 00:28:56
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-03-29 01:30:57 IP:203.204.xxx.xxx 未訂閱
我想問下: TForm 係一個class定係一個object? 咁 TFormClass 係咪一個class呢?TFormClass它什麼都不是,只是一個表示式 因為: type TForm1 = class(TForm) //TForm1是繼承自TForm的Class ..... var Form1: TForm1;//Form1是TForm1的Object 但 fm := FormClass.Create(Self); // fm、FormClass 是通用表示,你應以實際的Object Name及Class Name 代換 如下: Form1 := TForm1.Create(Application);// 建立Form1為TForm1這種類別的物件 如此說明,可以瞭解吧!
BorlandUser
中階會員


發表:148
回覆:217
積分:73
註冊:2004-02-19

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-03-29 09:38:00 IP:203.185.xxx.xxx 未訂閱
TFormClass 係一個表示式??不明白,因為我在delphi的help找不到.... 另外想問create(self),create()和create(application)有咩分別?
BorlandUser
中階會員


發表:148
回覆:217
積分:73
註冊:2004-02-19

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-03-29 10:32:07 IP:203.185.xxx.xxx 未訂閱
function TForm1.CreateUniqueForm(FormClass:TFormClass):TFormclass; var i : integer; Fm : TForm; begin fm := nil; for i := 0 to Screen.FormCount - 1 do if Screen.Forms[i] is FormClass then begin Fm := Screen.Forms[i]; if Fm.WindowState = wsMinimized then Fm.WindowState := wsNormal; Fm.BringToFront; end; if not assigned(fm) then fm := FormClass.Create(Self); fm.Show; result := TFormClass(Fm); end; function TForm1.CreateUniqueForm(fmName: string):TFormclass; begin Result := TFormClass(FindClass(fmName)); try try CreateUniqueForm(Result); except on E:Exception do ShowMessage(E.Message); end; except ShowMessage(fmname ' ©|¥¼«Ø¥ß'); end; end; 就是這個code有點不太明白,在那裏跑出了TFormClass,它又不是TForm這個class...
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-03-29 12:46:56 IP:203.204.xxx.xxx 未訂閱
引言: function TForm1.CreateUniqueForm(FormClass:TFormClass):TFormclass; ... function TForm1.CreateUniqueForm(fmName: string):TFormclass; 就是這個code有點不太明白,在那裏跑出了TFormClass,它又不是TForm這個class...
BorlandUser 你好 TFormClass 是個真實的類別名稱(前面會寫為表示式,是因為資訊不足,造成判斷錯誤,以為是一般溝通上Form Class 的代表),但宣告在那裏?相同單元或另外uses的單元檔,你可利用Delphi的搜尋功能,一定可以找到的。
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-03-29 12:55:01 IP:203.204.xxx.xxx 未訂閱
引言: 另外想問create(self),create()和create(application)有咩分別?
BorlandUser 你好 參考以下各篇 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=42933 http://delphi.ktop.com.tw/topic.php?topic_id=40114 http://delphi.ktop.com.tw/topic.php?topic_id=33289
BorlandUser
中階會員


發表:148
回覆:217
積分:73
註冊:2004-02-19

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-03-29 14:30:58 IP:203.185.xxx.xxx 未訂閱
很多謝你的解答(自己連答人的能力也沒有 >_<) 但我有少許不明: "前面會寫為表示式,是因為資訊不足,造成判斷錯誤,以為是一般溝通上Form Class 的代表" 這句的意思是什麼?
BorlandUser
中階會員


發表:148
回覆:217
積分:73
註冊:2004-02-19

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-03-29 15:16:50 IP:203.185.xxx.xxx 未訂閱
我找到TFormClass是在unit Forms,它是.. TFormClass = class of TForm 那麼這句的意思是什麼?我看了help還是有點不明白,好像TFormClass 和 TForm兩者都是全完一樣的東西,只是名稱不同,情況和 type TForm1 = class(TForm)一樣,TForm1 inherit 了 TForm,如果 TForm1 不修改其 procedure/function,那麼它與TForm 是沒有什麼分別的? 我對嗎?
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-03-29 15:49:40 IP:211.20.xxx.xxx 未訂閱
引言: 我找到TFormClass是在unit Forms,它是.. TFormClass = class of TForm (TFormClass 泛指繼承自TForm類別的類別) 那麼這句的意思是什麼?我看了help還是有點不明白,好像TFormClass 和 TForm兩者都是全完一樣的東西,只是名稱不同,情況和 type TForm1 = class(TForm)一樣,TForm1 inherit 了 TForm,如果 TForm1 不修改其 procedure/function,那麼它與TForm 是沒有什麼分別的? (其間好像沒什麼差別,或許只是讓程式碼容易閱讀吧!這部份我不知如何表達了,是否有高人可以指點一二?)
BorlandUser 你好
BorlandUser
中階會員


發表:148
回覆:217
積分:73
註冊:2004-02-19

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-03-29 16:06:01 IP:203.185.xxx.xxx 未訂閱
跟據oop定理/像c 般..TForm can be say a base class of all Form that inherit from TFrom,但是有故意整一個名為 TFormClass 為何呢? 這樣做是否多剩了呢?如果不用TFormClass,而改用TForm,那麼是否也做到同一樣的效果呢?
jest0024
高階會員


發表:11
回覆:310
積分:224
註冊:2002-11-24

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-03-30 01:46:06 IP:211.74.xxx.xxx 未訂閱
引言: 跟據oop定理/像c 般..TForm can be say a base class of all Form that inherit from TFrom,但是有故意整一個名為 TFormClass 為何呢? 這樣做是否多剩了呢?如果不用TFormClass,而改用TForm,那麼是否也做到同一樣的效果呢?
轉貼DELPHI HTLP
type TControlClass = class of TControl;
function CreateControl(ControlClass: TControlClass;
  const ControlName: string; X, Y, W, H: Integer): TControl;
begin
  Result := ControlClass.Create(MainForm);
  with Result do
  begin
    Parent := MainForm;
    Name := ControlName;
    SetBounds(X, Y, W, H);
    Visible := True;
  end;
end;
jest0024
高階會員


發表:11
回覆:310
積分:224
註冊:2002-11-24

發送簡訊給我
#13 引用回覆 回覆 發表時間:2004-03-30 01:48:43 IP:211.74.xxx.xxx 未訂閱
轉貼DELPHI HTLP
type TControlClass = class of TControl;
function CreateControl(ControlClass: TControlClass;
  const ControlName: string; X, Y, W, H: Integer): TControl;
begin
  Result := ControlClass.Create(MainForm);
  with Result do
  begin
    Parent := MainForm;
    Name := ControlName;
    SetBounds(X, Y, W, H);
    Visible := True;
  end;
end;    CreateControl(TEdit,'Edit',0,0,100,10);    
BorlandUser
中階會員


發表:148
回覆:217
積分:73
註冊:2004-02-19

發送簡訊給我
#14 引用回覆 回覆 發表時間:2004-03-30 07:56:24 IP:203.218.xxx.xxx 未訂閱
請問可否解一下呢?
bbtw
一般會員


發表:2
回覆:31
積分:16
註冊:2003-07-11

發送簡訊給我
#15 引用回覆 回覆 發表時間:2004-03-30 09:14:38 IP:61.71.xxx.xxx 未訂閱
不知道我的理解有沒有錯. Object必須經過Create 的動作才算是存在的, 也就是說不論你在type哪裡所定義的任何參數及功能,在物件建立前都不能使用. Delphi比較容易讓人誤解的是, 操作時都在第一個Form上, 事實上你在這個Form所寫的都是class的一部分, 真正建立的地方在 Application.CreateForm(TForm1, Form1); 以前VC 可以呼叫class的副程式(::), 但我總是認為不太安全.NET好像改掉了,不過我不太確定.
BorlandUser
中階會員


發表:148
回覆:217
積分:73
註冊:2004-02-19

發送簡訊給我
#16 引用回覆 回覆 發表時間:2004-03-30 09:49:47 IP:203.185.xxx.xxx 未訂閱
那和class of 有什麼關係?
BorlandUser
中階會員


發表:148
回覆:217
積分:73
註冊:2004-02-19

發送簡訊給我
#17 引用回覆 回覆 發表時間:2004-03-30 11:54:16 IP:203.185.xxx.xxx 未訂閱
現在好像越來越亂,因為 TFormClass 好似轉係用作接 TForm或其對下的class,不過TForm本身也是一個class,那麼好像有點怪怪的,如上面的program一樣,有時會用TFormClass 有時會用TForm,所以我不太明白何時用那個,如果真是pass個class時用TFormClass去記錄,那麼為什麼function XXX(Sender: TObject)又會用tobject去接呢? 好亂啊...救命..
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#18 引用回覆 回覆 發表時間:2004-03-30 18:32:57 IP:203.204.xxx.xxx 未訂閱
BorlandUser 你好 假設有以下兩函式宣告,先不管其用途為何: 1. Function Test1(FormClass: TFormClass):TFormClasee ; 2. Function Test2(Form: TForm):TForm; 在單元檔中有個Form  Var   Form1 : TForm1 ;  那麼要如何呼叫這兩個函式呢 1.SomeVar := Test1(TForm1); // 傳入類別 Test1接收到TForm1後它可以依據TForm1來建立物件 2.SomeVar := Test2(Form1); // 傳入物件 Test2接收到Form1後它不能用Form1來建立物件,因為Form1本身就是物件,只能對Form1做屬性、方法、事件的存取。
BorlandUser
中階會員


發表:148
回覆:217
積分:73
註冊:2004-02-19

發送簡訊給我
#19 引用回覆 回覆 發表時間:2004-03-30 23:20:19 IP:203.218.xxx.xxx 未訂閱
那麼你的意思是指如果是TForm ,那他所接的就會是object? 而TFormClass就會接的是class嗎? 請讓我問少少問題,TForm and TFormClass is not a class??
BorlandUser
中階會員


發表:148
回覆:217
積分:73
註冊:2004-02-19

發送簡訊給我
#20 引用回覆 回覆 發表時間:2004-03-31 17:11:49 IP:203.185.xxx.xxx 未訂閱
1. Function Test1(FormClass: TFormClass):TFormClasee ; 2. Function Test2(Form: TForm):TForm; 如果用procedure同用function黎做會用幾多唔同,因為其實是否一定要return出來?反正return出來也沒有人來接..??
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#21 引用回覆 回覆 發表時間:2004-03-31 18:22:40 IP:211.20.xxx.xxx 未訂閱
引言: 請讓我問少少問題,TForm and TFormClass is not a class??
BorlandUser 你好 或許你可用指標觀念來想這個問題 TForm 是個指標,其實delphi內部也是用指標來運作的。指向TForm類別的物件 TFormClass = Class Of TForm 是指標的指標,指向TForm類別
BorlandUser
中階會員


發表:148
回覆:217
積分:73
註冊:2004-02-19

發送簡訊給我
#22 引用回覆 回覆 發表時間:2004-04-01 14:21:15 IP:203.185.xxx.xxx 未訂閱
我想我開始明白.....多謝你^_^
系統時間:2024-05-16 12:32:09
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!