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

內含參考元件時,該如何做才能立即回應

答題得分者是:danny
firefall
一般會員


發表:22
回覆:36
積分:11
註冊:2002-05-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-07 10:30:20 IP:61.70.xxx.xxx 未訂閱
請教各位前輩們: 小弟建立一個新的元件,內含三個參考元件Tedit(A、B、C),一個Active屬性(boolean),小弟想做到將Active設為true時,只要使用者輸入A or B 的TExt 就會自動做A B=C的動作,不知該如何下手,請各位前輩們請點,謝謝
danny
版主


發表:100
回覆:522
積分:595
註冊:2002-03-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-05-07 10:40:28 IP:211.76.xxx.xxx 未訂閱
引言: 請教各位前輩們: 小弟建立一個新的元件,內含三個參考元件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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-05-07 10:41:29 IP:218.16.xxx.xxx 未訂閱
要更改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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-05-07 13:41:44 IP:61.70.xxx.xxx 未訂閱
引言: 要更改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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-05-07 14:15:37 IP:211.76.xxx.xxx 未訂閱
引言:
引言: 要更改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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-05-07 14:37:46 IP:61.70.xxx.xxx 未訂閱
引言:
引言:
引言: 要更改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
感謝Danny大大指點,小弟馬上試試。
系統時間:2024-05-16 21:59:23
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!