內含參考元件時,該如何做才能立即回應 |
答題得分者是:danny
|
firefall
一般會員 發表:22 回覆:36 積分:11 註冊:2002-05-14 發送簡訊給我 |
|
danny
版主 發表:100 回覆:522 積分:595 註冊:2002-03-11 發送簡訊給我 |
引言: 請教各位前輩們: 小弟建立一個新的元件,內含三個參考元件Tedit(A、B、C),一個Active屬性(boolean),小弟想做到將Active設為true時,只要使用者輸入A or B 的TExt 就會自動做A B=C的動作,不知該如何下手,請各位前輩們請點,謝謝如果您要 EditC 馬上顯示結果, 可以將 EditX.OnKeyup 或 EditX.OnExit (EditX 表 EditA 及 EditB) 指到您自訂的 procedure 處理, 不過記得要再呼叫 EditX.OnKeyup 或 EditX.OnExit, 不然 EditX 的 Events 會無效, 如果您本來就不允許使用這些 Events 就不用處理. 不知道我這樣說明您瞭不瞭解 ...
------
將問題盡快結案也是一種禮貌! |
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
要更改A及B 的 onChange 事件
1. 若你沒開放參考元件的 onChange 事件給使用者自設,則直接設定 A,B 的 onChange 去做算式
2. 若你有開放參考元件的 onChange 事件給使用者自設,則需 :
2A 做兩個TNotifyEvent 的內部變數
2B 在 Loaded 程序將使用者的 onChange 事件記在這兩個變數,而將 AB 的onChange 事件改成你的 onChange 去做算式
2C 在你的 onChange 事件呼叫 使用者的 onChange 事件
|
firefall
一般會員 發表:22 回覆:36 積分:11 註冊:2002-05-14 發送簡訊給我 |
引言: 要更改A及B 的 onChange 事件 1. 若你沒開放參考元件的 onChange 事件給使用者自設,則直接設定 A,B 的 onChange 去做算式 2. 若你有開放參考元件的 onChange 事件給使用者自設,則需 : 2A 做兩個TNotifyEvent 的內部變數 2B 在 Loaded 程序將使用者的 onChange 事件記在這兩個變數,而將 AB 的onChange 事件改成你的 onChange 去做算式 2C 在你的 onChange 事件呼叫 使用者的 onChange 事件感謝兩位大大抬愛,指點小弟一條明路,但小弟仍有疑惑待除 1.小弟指定事件的呼叫方法為在Property A :Tedit Read FA Write GetAEvent ; Procedure GetAEvent; begin //指定事件的方法 xxxxx xxx end; 以上的方法,小弟測過可行,不知此法是否正確,還是有更好的方法? 2.如果有很多參考元件都要設指定事件,那麼有什麼方法可以不用一個一個指定參考元件,而是用一個迴圈來指定所有元件。 麻煩大大了,謝謝!! |
danny
版主 發表:100 回覆:522 積分:595 註冊:2002-03-11 發送簡訊給我 |
引言:我臨時寫了一個元件給您參考好了, 其他問題您自己研究, 至於第二點請用本站搜尋找, 有一籮筐 ...引言: 要更改A及B 的 onChange 事件 1. 若你沒開放參考元件的 onChange 事件給使用者自設,則直接設定 A,B 的 onChange 去做算式 2. 若你有開放參考元件的 onChange 事件給使用者自設,則需 : 2A 做兩個TNotifyEvent 的內部變數 2B 在 Loaded 程序將使用者的 onChange 事件記在這兩個變數,而將 AB 的onChange 事件改成你的 onChange 去做算式 2C 在你的 onChange 事件呼叫 使用者的 onChange 事件感謝兩位大大抬愛,指點小弟一條明路,但小弟仍有疑惑待除 1.小弟指定事件的呼叫方法為在Property A :Tedit Read FA Write GetAEvent ; Procedure GetAEvent; begin //指定事件的方法 xxxxx xxx end; 以上的方法,小弟測過可行,不知此法是否正確,還是有更好的方法? 2.如果有很多參考元件都要設指定事件,那麼有什麼方法可以不用一個一個指定參考元件,而是用一個迴圈來指定所有元件。 unit AddE; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TAddE = class(TComponent) private { Private declarations } FActive: Boolean; FEditA, FEditB, FEditC: TEdit; procedure SetEditA(const Value: TEdit); procedure SetEditB(const Value: TEdit); procedure EditChange(Sender: TObject); protected { Protected declarations } public { Public declarations } constructor Create(AOwner: TComponent); override; destructor Destroy; override; published { Published declarations } property Active: Boolean read FActive write FActive; property EditA: TEdit read FEditA write SetEditA; property EditB: TEdit read FEditB write SetEditB; property EditC: TEdit read FEditC write FEditC; end; procedure Register; implementation procedure Register; begin RegisterComponents('Samples', [TAddE]); end; { TAddE } constructor TAddE.Create(AOwner: TComponent); begin inherited Create(AOwner); end; destructor TAddE.Destroy; begin inherited Destroy; end; procedure TAddE.EditChange(Sender: TObject); begin if FActive and (FEditA <> nil) and (FEditB <> nil) and (FEditC <> nil) then FEditC.Text := FEditA.Text FEditB.Text; end; procedure TAddE.SetEditA(const Value: TEdit); begin if (Value = nil) then FEditA.OnChange := nil else Value.OnChange := EditChange; FEditA := Value; end; procedure TAddE.SetEditB(const Value: TEdit); begin if (Value = nil) then FEditB.OnChange := nil else Value.OnChange := EditChange; FEditB := Value; end; end.發表人 - danny 於 2003/05/07 14:21:51 發表人 - danny 於 2003/05/07 14:23:39
------
將問題盡快結案也是一種禮貌! |
firefall
一般會員 發表:22 回覆:36 積分:11 註冊:2002-05-14 發送簡訊給我 |
引言:感謝Danny大大指點,小弟馬上試試。引言:我臨時寫了一個元件給您參考好了, 其他問題您自己研究, 至於第二點請用本站搜尋找, 有一籮筐 ...引言: 要更改A及B 的 onChange 事件 1. 若你沒開放參考元件的 onChange 事件給使用者自設,則直接設定 A,B 的 onChange 去做算式 2. 若你有開放參考元件的 onChange 事件給使用者自設,則需 : 2A 做兩個TNotifyEvent 的內部變數 2B 在 Loaded 程序將使用者的 onChange 事件記在這兩個變數,而將 AB 的onChange 事件改成你的 onChange 去做算式 2C 在你的 onChange 事件呼叫 使用者的 onChange 事件感謝兩位大大抬愛,指點小弟一條明路,但小弟仍有疑惑待除 1.小弟指定事件的呼叫方法為在Property A :Tedit Read FA Write GetAEvent ; Procedure GetAEvent; begin //指定事件的方法 xxxxx xxx end; 以上的方法,小弟測過可行,不知此法是否正確,還是有更好的方法? 2.如果有很多參考元件都要設指定事件,那麼有什麼方法可以不用一個一個指定參考元件,而是用一個迴圈來指定所有元件。unit AddE; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TAddE = class(TComponent) private { Private declarations } FActive: Boolean; FEditA, FEditB, FEditC: TEdit; procedure SetEditA(const Value: TEdit); procedure SetEditB(const Value: TEdit); procedure EditChange(Sender: TObject); protected { Protected declarations } public { Public declarations } constructor Create(AOwner: TComponent); override; destructor Destroy; override; published { Published declarations } property Active: Boolean read FActive write FActive; property EditA: TEdit read FEditA write SetEditA; property EditB: TEdit read FEditB write SetEditB; property EditC: TEdit read FEditC write FEditC; end; procedure Register; implementation procedure Register; begin RegisterComponents('Samples', [TAddE]); end; { TAddE } constructor TAddE.Create(AOwner: TComponent); begin inherited Create(AOwner); end; destructor TAddE.Destroy; begin inherited Destroy; end; procedure TAddE.EditChange(Sender: TObject); begin if FActive and (FEditA <> nil) and (FEditB <> nil) and (FEditC <> nil) then FEditC.Text := FEditA.Text FEditB.Text; end; procedure TAddE.SetEditA(const Value: TEdit); begin if (Value = nil) then FEditA.OnChange := nil else Value.OnChange := EditChange; FEditA := Value; end; procedure TAddE.SetEditB(const Value: TEdit); begin if (Value = nil) then FEditB.OnChange := nil else Value.OnChange := EditChange; FEditB := Value; end; end.發表人 - danny 於 2003/05/07 14:21:51 發表人 - danny 於 2003/05/07 14:23:39 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |