線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1255
推到 Plurk!
推到 Facebook!

請問如何抓子類別中dbedit on enter的Event

尚未結案
kimochi
一般會員


發表:6
回覆:6
積分:2
註冊:2002-11-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-06-09 18:29:44 IP:211.23.xxx.xxx 未訂閱
請問如何作到以下需求? 情形: 有BASEFORM,想要實做子孫類別中,FOCUS到某個dbedit後,可以反白該dbedit顏色或變色,但是在BaseForm中並無Create任何dbedit,所有的dbedit欄位都是在子類別中去Create的, 問題一,我要如何去抓dbedit on enter的Event呢?? 問題二,又要如何抓dbedit focus移動呢? 不知這樣的要求,可否寫在BaseForm中?讓所有子孫類別繼承? 請各問前輩指導小弟,謝謝,如果能有例子更棒。
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-06-10 00:53:49 IP:61.66.xxx.xxx 未訂閱
引言: 請問如何作到以下需求? 情形: 有BASEFORM,想要實做子孫類別中,FOCUS到某個dbedit後,可以反白該dbedit顏色或變色,但是在BaseForm中並無Create任何dbedit,所有的dbedit欄位都是在子類別中去Create的, 問題一,我要如何去抓dbedit on enter的Event呢?? 問題二,又要如何抓dbedit focus移動呢? 不知這樣的要求,可否寫在BaseForm中?讓所有子孫類別繼承? 請各問前輩指導小弟,謝謝,如果能有例子更棒。
1.如果你是要動態在form中create dbedit元件的話, 大致上可以這樣做
....
{Private}
  procedure myDBeditEnter(Sender: TObject);
.....
impeletment    procedure TForm1.....
   var myDbedit: TDBedit;
begin
   // 設定myDbedit 的各項property值
   myDbedit:= TDBedit.Create(self);
   myDbedit.Datasource:= ...
   ...
   // 設定這行, 指定 dbedit 的 onenter 指向 NewEnter
   myDbedit.onEnter:= Form1.myDBeditEnter;
end;    ...
// 實作onEnter的內容
Proecdure TForm1.myDBeditEnter(Sender: TObject);
begin
 寫你的程式 
 ....
end;
這樣當myDBedit發生onEnter事件, 自動會找myDBedit.myDBeditEnter來執行 2.有關dbedit的focus及變色等問題, 你可以在本站下載DosMove2.0的元件, 裡面有提供這樣的功能, 你可以自己改寫, 或者在Form中就先設置, 則一行 指令也不用加 http://delphi.ktop.com.tw/topic.php?topic_id=19321 發表人 - P.D. 於 2003/06/10 00:55:46
kimochi
一般會員


發表:6
回覆:6
積分:2
註冊:2002-11-02

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-06-11 22:39:16 IP:211.23.xxx.xxx 未訂閱
先感謝前輩指導! 到還是有些許問題,試了兩天,就其根本,因為我的dbedit並非系統自動產生, 而是我用人工的方式去產生,那總不會將每個dbedit的onEnter Event都去設定?抓取onEnter後的事件?請問是否有方法解決呢? 至於DOSMOV,真的滿好用的,可是有點小缺點,將component放在父類別中,雖然子類別可繼承,但是一變色後,就變不回來了?不知這是否也有方法呢? 謝謝各位前輩指導!
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-06-12 09:57:57 IP:210.61.xxx.xxx 未訂閱
以下例子,提供您玩玩 關鍵是在KeyDown事件裡,若當前元件是TEdit就 觸發更改顏色的函式(這個函式的行為由子類別實作) 然後指定該元件的OnExit事件的處理函式.以便在 離開元件時,改回顏色.
----------------unit1-------------------------
type
  //KeyPreview要設成True
  TForm1 = class(TForm)
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  public
    procedure DoEnterDBEdit(Sender:Tobject);virtual;abstract;
    procedure DoExitDBEdit(Sender:TObject);
  end;    var
  Form1: TForm1;    implementation    {$R *.DFM}    procedure TForm1.DoExitDBEdit(Sender: TObject);
begin
  (Sender as TEdit).Color:=clWhite;
end;    procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (Self.ActiveControl is TEdit) then
  begin
    (ActiveControl as TEdit).OnExit:=DoExitDBEdit;
    DoEnterDBEdit(ActiveControl);
  end;
end;
---------------------unit2 繼承自TForm1--------------------
type
  TForm2 = class(TForm1)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  public
    procedure DoEnterDBEdit(Sender:TObject);override;
  end;    var
  Form2: TForm2;    implementation    uses Unit3;    {$R *.DFM}    { TForm2 }    procedure TForm2.DoEnterDBEdit(Sender: TObject);
var
  i:Integer;
begin
  //動態產生, 要改變顏色的
  if (Sender as TEdit).Tag=1 then
    (Sender as TEdit).Color:=clYellow;
end;    procedure TForm2.FormCreate(Sender: TObject);
var
  dyEdit:TEdit;
begin
  dyEdit:=TEdit.Create(Self);
  dyEdit.SetBounds(10,10,50,20);
  dyEdit.parent:=Self;
  dyEdit.Tag:=1;
end;    procedure TForm2.Button1Click(Sender: TObject);
begin
  Form3.Show;
end;
---------------------unit3 繼承自TForm1------------------
type
  TForm3 = class(TForm1)
    procedure FormCreate(Sender: TObject);
  public
    procedure DoEnterDBEdit(Sender: TObject);override;
  end;    var
  Form3: TForm3;    implementation    {$R *.DFM}
procedure TForm3.DoEnterDBEdit(Sender: TObject);
var
  i:Integer;
begin
  //動態產生, 要改變顏色的
  if (Sender as TEdit).Tag=1 then
    (Sender as TEdit).Color:=clRed;
end;    procedure TForm3.FormCreate(Sender: TObject);
var
  dyEdit:TEdit;
begin
  dyEdit:=TEdit.Create(Self);
  dyEdit.SetBounds(10,10,50,20);
  dyEdit.parent:=Self;
  dyEdit.Tag:=1;
end;
系統時間:2024-11-23 9:46:32
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!