自訂VCL元件 |
尚未結案
|
gmobug
一般會員 發表:10 回覆:28 積分:12 註冊:2004-02-04 發送簡訊給我 |
我想做一個類似Edit的元件
但他只能輸入數字 1.首先我新增一個元件讓他繼承TEdit,他的名字叫TNumEdit 2.在Private:裡AnsiString ori; (儲存舊字串) 3.在TNumEdit的建構函式
__fastcall TNumEdit::TNumEdit(TComponent* Owner) : TEdit(Owner) { TEdit::change; ori=TEdit::Text; }4.接著自定一個函式 change(TObject *Sender){ if(TEdit::Text符合條件){ ori=TEdit::Text; }else{ TEdit::Text=ori; } // if(TNumEdit::OnChange){ // TNumEdit::OnChange(); // } }我在NumEdit.h裡寫了 typedef void __fastcall (__closure *OnChange)(System::TObject *Sender);想蓋掉TEdit的OnChange事件 可是好像沒有成功 如果在設計時期指定了OnChange的EventHandler 則change()就沒有動作 請問要如何解決? 發表人 - gmobug 於 2005/07/14 20:55:02 發表人 - gmobug 於 2005/07/14 20:57:49 |
gmobug
一般會員 發表:10 回覆:28 積分:12 註冊:2004-02-04 發送簡訊給我 |
|
liangnet
中階會員 發表:19 回覆:148 積分:83 註冊:2004-01-03 發送簡訊給我 |
|
gmobug
一般會員 發表:10 回覆:28 積分:12 註冊:2004-02-04 發送簡訊給我 |
|
liangnet
中階會員 發表:19 回覆:148 積分:83 註冊:2004-01-03 發送簡訊給我 |
嗯~不好意思,沒想的週到一點^^"
以下這是我剛試的方法。
重載 DYNAMIC void __fastcall Change(void);
然後再這函式裡,去檢查Text是否為正確的數值資料。
void __fastcall TNumberEdit::Change(void) { int nValue; if (!TryStrToInt(Text, nValue)) { //非整值 Text = ""; } TCustomEdit::Change(); }附上這一段小程式給你參考。 發表人 - liangnet 於 2005/07/15 17:08:09 發表人 - liangnet 於 2005/07/15 17:11:23 |
gmobug
一般會員 發表:10 回覆:28 積分:12 註冊:2004-02-04 發送簡訊給我 |
|
liangnet
中階會員 發表:19 回覆:148 積分:83 註冊:2004-01-03 發送簡訊給我 |
引言: 謝謝! 我不知道他有Change這個方法 請問OnXXX的事件都有對應的XXX方法嗎?不一定~ 你可以按Ctrl後,然後再把你的Mouse移到TCustomEdit這個字上Click, 就會跳到定義TCustomEdit的地方,可以看一下原型的定義有那些東西^^ 如果要看到每個函式裡面的實作程式,可以到BCB的目錄下 C:\Program Files\Borland\CBuilder6\Source\vcl 裡面會有Source Code,不過是用Pascal寫的。 發表人 - liangnet 於 2005/07/15 18:17:14 |
gmobug
一般會員 發表:10 回覆:28 積分:12 註冊:2004-02-04 發送簡訊給我 |
|
gmobug
一般會員 發表:10 回覆:28 積分:12 註冊:2004-02-04 發送簡訊給我 |
|
gmobug
一般會員 發表:10 回覆:28 積分:12 註冊:2004-02-04 發送簡訊給我 |
|
gmobug
一般會員 發表:10 回覆:28 積分:12 註冊:2004-02-04 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |