請教如何繼承TButton ? |
|
SKYSTAR
中階會員 發表:76 回覆:198 積分:64 註冊:2002-06-10 發送簡訊給我 |
各位先進好... 請教一下....(因為繼承的關念...實在是搞不清楚) 如果我想要建立一個新元件...而此元件是繼承TButton....
請問...這個新元件可以自訂一個同樣的屬性Caption....但是此屬性的讀寫
...我要自行控制.....也就是說新元件的所有屬性及事件都和TButton相同...
但是...Caption部份..則是由新元件中來控管....
這樣子行得通嗎?
如果...不行的話...又該如何做呢? 不管是否行得通...可否煩請大家簡單舉個例子呢? 多謝!!
|
andersonhsieh
版主 發表:33 回覆:531 積分:439 註冊:2002-06-10 發送簡訊給我 |
引言: 各位先進好... 請教一下....(因為繼承的關念...實在是搞不清楚) 如果我想要建立一個新元件...而此元件是繼承TButton.... 請問...這個新元件可以自訂一個同樣的屬性Caption....但是此屬性的讀寫 ...我要自行控制.....也就是說新元件的所有屬性及事件都和TButton相同... 但是...Caption部份..則是由新元件中來控管.... 這樣子行得通嗎? 如果...不行的話...又該如何做呢? 不管是否行得通...可否煩請大家簡單舉個例子呢? 多謝!!可以啊override掉就可以啊 @@~~飛翔在天際的精靈~~@@
------
@@~~飛翔在天際的精靈~~@@ |
SKYSTAR
中階會員 發表:76 回覆:198 積分:64 註冊:2002-06-10 發送簡訊給我 |
|
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
|
danny
版主 發表:100 回覆:522 積分:595 註冊:2002-03-11 發送簡訊給我 |
引言: 各位先進好... 請教一下....(因為繼承的關念...實在是搞不清楚) 如果我想要建立一個新元件...而此元件是繼承TButton.... 請問...這個新元件可以自訂一個同樣的屬性Caption....但是此屬性的讀寫 ...我要自行控制.....也就是說新元件的所有屬性及事件都和TButton相同... 但是...Caption部份..則是由新元件中來控管.... 這樣子行得通嗎? 如果...不行的話...又該如何做呢? 不管是否行得通...可否煩請大家簡單舉個例子呢?這是可以的! 程式碼如下 unit xxButton; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TxxButton = class(TButton) private { Private declarations } function GetCaption: TCaption; procedure SetCaption(const Value: TCaption); protected { Protected declarations } public { Public declarations } published { Published declarations } property Caption: TCaption read GetCaption write SetCaption; end; procedure Register; implementation procedure Register; begin RegisterComponents('Samples', [TxxButton]); end; { TxxButton } function TxxButton.GetCaption: TCaption; begin Result := inherited Caption; // 您要作的事 end; procedure TxxButton.SetCaption(const Value: TCaption); begin inherited Caption := Value; // 您要作的事 end; end.
------
將問題盡快結案也是一種禮貌! |
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
|
SKYSTAR
中階會員 發表:76 回覆:198 積分:64 註冊:2002-06-10 發送簡訊給我 |
引言: 這是可以的! 程式碼如下謝謝您... 果真是可以了..... 不過還要煩請您再幫一下下.... (unit xxButton; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TxxButton = class(TButton) private { Private declarations } function GetCaption: TCaption; procedure SetCaption(const Value: TCaption); protected { Protected declarations } public { Public declarations } published { Published declarations } property Caption: TCaption read GetCaption write SetCaption; end; procedure Register; implementation procedure Register; begin RegisterComponents('Samples', [TxxButton]); end; { TxxButton } function TxxButton.GetCaption: TCaption; begin Result := inherited Caption; // 您要作的事 end; procedure TxxButton.SetCaption(const Value: TCaption); begin inherited Caption := Value; // 您要作的事 end; end. |
danny
版主 發表:100 回覆:522 積分:595 註冊:2002-03-11 發送簡訊給我 |
(1) 是否只要加上inherited後...就可以做到所謂的...先繼承到父類別的屬性
或事件或程序或函數...然後就可以繼續我的加工部份呢? (不管父類別是那一
個) 簡單說就是使用和同父類別的任何東東(相同名稱)...而在新類別中卻呈現
出父類別原有的功能加上我所加工的部份....是嗎? 可以這麼說, 但並不是都可以.
您這情形是因為您宣告了一個 property name 是父類別中已經存在的, 所以您所宣告的這個 property name 是和父類別無關的(也就是失去關連了), 所以您必需自己存取父類別的 property , 當然您高興也可以存取其他的 property (2)procedure TxxButton.SetCaption(const Value: TCaption);
begin
inherited Caption := Value;
end;
我將上面的inherited Caption := Value;
改成......inherited Caption := Value 'ABC';
然後在拉入新元件時,假設此時Caption預設是MyButton1,且元件上也呈現
MyButton1....(此時...我沒有去變更Caption)
接著執行專案時,該元件的Caption卻變成MyButton1ABC....
請問...像這種屬性的讀值及設值等的動作...是否也是會反應到執行時期的
情形呢? 元件的 name 有一定的命名規則(您也可以自訂), Create Component 後Caption 內定是和 name 一樣, 因為您又將 Caption 'ABC' 才會出現您這種情形, 我不知道您是要作何用途, 所以您必須先想想 property name 是否有設為 Caption 的必要. (3)不好意思...再請教一個很簡單的問題...但是我不知道要從那裡得知..因為
其關鍵字...我忘了怎麼寫....
就是....要判斷此時是設計時期還是執行時期....要用那一個關鍵字呢? if (csDesigning in ComponentState) then // Design Time
if not (csDesigning in ComponentState) then // Run Time
------
將問題盡快結案也是一種禮貌! |
SKYSTAR
中階會員 發表:76 回覆:198 積分:64 註冊:2002-06-10 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |