TFrame 沒有 OnCreate, 怎辦? |
尚未結案
|
Diviner
初階會員 發表:36 回覆:112 積分:34 註冊:2002-03-13 發送簡訊給我 |
|
danny
版主 發表:100 回覆:522 積分:595 註冊:2002-03-11 發送簡訊給我 |
引言: 若由 TForm 代做, 又覺不夠 OO, 有好提議嗎?TFrame 本身是依附在 Form 上的沒有 OnCreate 是可以理解的. 如果硬是要有 OnCreate 就自己繼承 TFrame 做一個新的 TFrame type TNewFrame = class(TFrame) private { Private declarations } FOnCreate: TNotifyEvent; public { Public declarations } constructor Create(AOwner: TComponent); override; published property OnCreate: TNotifyEvent read FOnCreate write FOnCreate; end; implementation constructor TNewFrame.Create(AOwner: TComponent); begin inherited Create(AOwner); if Assigned(FOnCreate) then FOnCreate(Self); end;
------
將問題盡快結案也是一種禮貌! |
danny
版主 發表:100 回覆:522 積分:595 註冊:2002-03-11 發送簡訊給我 |
|
Diviner
初階會員 發表:36 回覆:112 積分:34 註冊:2002-03-13 發送簡訊給我 |
引言:-- 小卜子引言: 若由 TForm 代做, 又覺不夠 OO, 有好提議嗎?TFrame 本身是依附在 Form 上的沒有 OnCreate 是可以理解的. 如果硬是要有 OnCreate 就自己繼承 TFrame 做一個新的 TFrametype TNewFrame = class(TFrame) private { Private declarations } FOnCreate: TNotifyEvent; public { Public declarations } constructor Create(AOwner: TComponent); override; published property OnCreate: TNotifyEvent read FOnCreate write FOnCreate; end; implementation constructor TNewFrame.Create(AOwner: TComponent); begin inherited Create(AOwner); if Assigned(FOnCreate) then FOnCreate(Self); end;那麼 Frame 的 OnCreate 的實際程式碼, 仍然是放在 Form 的 .pas 處嗎? 即是 說, FOnCreate 仍是指向 Form 的某個 Procedure 嗎? 這也不甚 OO, 達不到把 Frame 的 Coding 完全分立出去的目的。
------
-- 小卜子 |
danny
版主 發表:100 回覆:522 積分:595 註冊:2002-03-11 發送簡訊給我 |
引言:不是! TNewFrame 是新的元件, 您可以 registry 到元件盤中使用. 但和原來的 TFrame 不同處就在您可以在元件的 OnCreate 事件中寫程式(和在 OnFormCreate 寫程式是一樣的) 不過您說的東西和 OO 不太有關, 不知未何一直強調 OO ? 如果這樣的話, 使用RAD工具寫程式其實也是不甚 OO 要registry 到元件盤中使用, 請再加以下程式碼:引言:那麼 Frame 的 OnCreate 的實際程式碼, 仍然是放在 Form 的 .pas 處嗎? 即是 說, FOnCreate 仍是指向 Form 的某個 Procedure 嗎? 這也不甚 OO, 達不到把 Frame 的 Coding 完全分立出去的目的。引言: 若由 TForm 代做, 又覺不夠 OO, 有好提議嗎?TFrame 本身是依附在 Form 上的沒有 OnCreate 是可以理解的. 如果硬是要有 OnCreate 就自己繼承 TFrame 做一個新的 TFrametype TNewFrame = class(TFrame) private { Private declarations } FOnCreate: TNotifyEvent; public { Public declarations } constructor Create(AOwner: TComponent); override; published property OnCreate: TNotifyEvent read FOnCreate write FOnCreate; end; implementation constructor TNewFrame.Create(AOwner: TComponent); begin inherited Create(AOwner); if Assigned(FOnCreate) then FOnCreate(Self); end; procedure Register; ...(省略) ... implementation procedure Register; begin RegisterComponents('Samples', [TNewFrame]); end;
------
將問題盡快結案也是一種禮貌! |
jest0024
高階會員 發表:11 回覆:310 積分:224 註冊:2002-11-24 發送簡訊給我 |
type TFrame2 = class(TFrame) private { Private declarations } public constructor Create(AOwner: TComponent); override; //重新改寫Create方法! property OnCreate;override; end; constructor TFrame2.Create(AOwner: TComponent); begin inherited; //處理的程序.. end;ABCD分開看的懂,連起來像鬼劃符~~!!! |
Diviner
初階會員 發表:36 回覆:112 積分:34 註冊:2002-03-13 發送簡訊給我 |
引言: 不是! TNewFrame 是新的元件, 您可以 registry 到元件盤中使用.我沒理解錯誤, 我知道這是新元件, 而且在製作這個元件的過程中, 遇到了一些問題, 我自己再試一下, 搞不來來再請教, 先謝謝您。 引言: 但和原來的 TFrame 不同處就在您可以在元件的 OnCreate 事件中寫程式(和在 OnFormCreate 寫程式是一樣的) 不過您說的東西和 OO 不太有關, 不知未何一直強調 OO ? 如果這樣的話, 使用RAD工具寫程式其實也是不甚 OO你沒理解錯我的意思, 我的確覺得用 VCL 絕大部份的 Components 的時候不夠 OO, 因為我其實很想把特定的 DataSet 把它所屬的工作封裝好。例如當使用 TClientDataSet 製作一個 cdsCustomer 時, 若它有一項工作是 BuyProduct(), 則我很想把這個 method 封裝於 cdsCustomer 中, 以後便使用 cdsCustomer.BuyProduct() 來寫, 現在卻是 BuyProduct 放於某 DataModule 中, 若硬要把 cdsCustomer.BuyProduct() 實現出來, 除非替一個案子專門製作一大堆 Components (真的很大量, 想想一個案子要用多少個 Tables)。 現在我覺得若把 Frame 的 Method 要指到 Form 來封裝不夠 OO, 是相同的意思。因為雖然 Delphi 有以上問題, 但至少其 TForm 及 TDataModule 亦能做到封裝屬於自己的 Event handlers, 所以希望 TFrame 也能做到, 畢竟 TFrame 跟 TForm 用法上差不多, 只是把同一個畫面分開來做, 我覺得既然在視覺上分工來做, 處理邏輯上也該能分開處理, 方能物盡其用, 而事實上 TFrame 亦差不多做到了, 目前我只欠的, 是欠了 OnCreate 及 OnShow events 而已。剛看到 jest0024 君的解答很合用。 至於 OnShow, 看來不是由 TFrame 管的, 而是由 TForm 做的, 即是說, TForm 內的 OnShow event handler 內的程式碼, 不能分派到 TFrame 中了, 不知是不是呢。 -- 小卜子 發表人 - diviner 於 2004/06/07 12:56:29
------
-- 小卜子 |
G01
高階會員 發表:249 回覆:379 積分:215 註冊:2002-05-21 發送簡訊給我 |
|
Diviner
初階會員 發表:36 回覆:112 積分:34 註冊:2002-03-13 發送簡訊給我 |
引言: To Diviner 所謂OO ,並不是只限於繼承這一個觀念;將所有Object組合成一個新的Object 這也是OO觀念的一種!!我當然知道。我現在覺得 Delphi 不夠 OO 的, 是它的 Method 的「封裝」部份, 而非「繼承」部份。舉例說, DataModule 只是眾 DataSet 的 Container, 可是硬要把自己的 Method handler 放在 Container 上, 不會是最好的 OO 吧? -- 小卜子
------
-- 小卜子 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |