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

設定OnEnter

答題得分者是:ccchen
cyl
中階會員


發表:163
回覆:171
積分:66
註冊:2002-07-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-01-08 10:43:54 IP:61.218.xxx.xxx 未訂閱
請問我的form上所有的edit,在目前Focus的edit上把color變色, 但是我又想一個一個的edit onenter指定事件, 我想在form create 時指定所有edit 的onenter事件,不知該如何做?? 我的程式想法如下,但是執行時沒有任何反應,不知哪裡寫錯了??? procedure TForm1.EdtEnter(Sender: TObject); begin Tedit(Sender).Color :=clred; end; procedure TForm1.FormCreate(Sender: TObject); var i: Integer; begin for i:=0 to ControlCount -1 do if Controls[i] is Tedit then begin Tedit(Controls[i]).OnEnter :=EdtEnter; end; end;
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-01-08 10:56:55 IP:147.8.xxx.xxx 未訂閱
procedure TForm1.EdtEnter(Sender: TObject);
begin
   Tedit(Sender).Color :=clred;
end;    procedure TForm1.EdtExit(Sender: TObject);
begin
    Tedit(Sender).Color :=clWindow;
end;    procedure TForm1.FormCreate(Sender: TObject);
var i: Integer;
begin
  for i:=0 to ControlCount -1 do
    if Controls[i] is Tedit then begin
        Tedit(Controls[i]).OnEnter :=EdtEnter;
        Tedit(Controls[i]).OnExit :=EdtExit;
    end;
end;
cyl
中階會員


發表:163
回覆:171
積分:66
註冊:2002-07-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-01-08 11:12:18 IP:61.218.xxx.xxx 未訂閱
引言:
procedure TForm1.EdtEnter(Sender: TObject);
begin
   Tedit(Sender).Color :=clred;
end;    procedure TForm1.EdtExit(Sender: TObject);
begin
    Tedit(Sender).Color :=clWindow;
end;    procedure TForm1.FormCreate(Sender: TObject);
var i: Integer;
begin
  for i:=0 to ControlCount -1 do
    if Controls[i] is Tedit then begin
        Tedit(Controls[i]).OnEnter :=EdtEnter;
        Tedit(Controls[i]).OnExit :=EdtExit;
    end;
end;
我不就這樣寫的,不行阿,把control改成omponents就可以
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-01-08 11:23:50 IP:147.8.xxx.xxx 未訂閱
引言:我不就這樣寫的,不行阿,把control改成omponents就可以
What version of Delphi are you using? It works fine on my Delphi 7. Try adding TEdit(Sender).Invalidate; after setting the color. BTW, what do you mean by "把control改成components就可以"? Like this? for i:=0 to ComponentCount -1 do if Components[i] is Tedit then begin Tedit(Components[i]).OnEnter :=EdtEnter; end;
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-01-08 13:48:10 IP:61.219.xxx.xxx 未訂閱
我不就這樣寫的,不行阿,把control改成omponents就可以 你的Edit是直接放在form上, 還是放在其他WinControl(如Groupbox或panel)內? 假設Form上有一panel1, panel1上有一Edit1,則 panel1在form之controls中, edit1則在panel1之controls中, 故必須nest才能找到 Design time所放之任何元件均在 Form之components中 如果你要用controls可以如此
procedure TForm1.SetonEnter(Control:TWinControl);
var i: integer;
begin
  if (Control is TEdit) then
    Tedit(Controls[i]).OnEnter :=EdtEnter
  else
  if Control.ControlCount >0  then
    for i := 0 to Control.ControlCount-1 do
      if Control.controls[i] is TWinControl then
        SetEnter(TWinControl(Control.Controls[i]));
end;
cyl
中階會員


發表:163
回覆:171
積分:66
註冊:2002-07-11

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-01-08 14:26:14 IP:61.218.xxx.xxx 未訂閱
引言: 我不就這樣寫的,不行阿,把control改成omponents就可以 你的Edit是直接放在form上, 還是放在其他WinControl(如Groupbox或panel)內? 假設Form上有一panel1, panel1上有一Edit1,則 panel1在form之controls中, edit1則在panel1之controls中, 故必須nest才能找到 Design time所放之任何元件均在 Form之components中 如果你要用controls可以如此
procedure TForm1.SetonEnter(Control:TWinControl);
var i: integer;
begin
  if (Control is TEdit) then
    Tedit(Controls[i]).OnEnter :=EdtEnter
  else
  if Control.ControlCount >0  then
    for i := 0 to Control.ControlCount-1 do
      if Control.controls[i] is TWinControl then
        SetEnter(TWinControl(Control.Controls[i]));
end;
我是放在panel內,可是我不明白你的code procedure TForm1.SetonEnter(Control:TWinControl); var i: integer; begin if (Control is TEdit) then Tedit(Controls[i]).OnEnter :=EdtEnter if Control.ControlCount >0 then for i := 0 to Control.ControlCount-1 do if Control.controls[i] is TWinControl then SetOnEnter(TWinControl(Control.Controls[i])); -->是不是錯了 end; 1.請問這個procedure要放在form create可以嗎??那control要傳入什麼?? 2.nest是什麼??
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-01-08 15:21:23 IP:61.219.xxx.xxx 未訂閱
在formCreate
procedure TForm1.SetonEnter(Control:TWinControl);
begin
  SetonEnter(self);
end;
nest的意思是一層一層往下做
  object Panel1: TPanel
    object Edit1: TEdit
    object Edit2: TEdit
    object Panel2: TPanel
      object Edit3: TEdit
      object Edit4: TEdit
假設form上之元件如上, 首先傳入form, for i := 0 to Control.ControlCount-1 do會找到panel1, 在呼叫同一程序傳入panel1 在panel1上會找到edit1,edit2及panel2, 此程式設定edit1,edit2之onenter, 並再一次呼叫傳入panel2
procedure TForm1.SetonEnter(Control:TWinControl);
var i: integer;
begin
  if (Control is TEdit) then
    Tedit(Controls[i]).OnEnter :=EdtEnter
  else
  if Control.ControlCount >0  then
    for i := 0 to Control.ControlCount-1 do
      if Control.controls[i] is TWinControl then
        SetEnter(TWinControl(Control.Controls[i]));
end;
cyl
中階會員


發表:163
回覆:171
積分:66
註冊:2002-07-11

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-01-08 15:50:32 IP:61.218.xxx.xxx 未訂閱
procedure TForm1.SetonEnter(Control:TWinControl); var i: integer; begin if (Control is TEdit) then Tedit(Controls[i]).OnEnter :=EdtEnter else if Control.ControlCount >0 then for i := 0 to Control.ControlCount-1 do if Control.controls[i] is TWinControl then SetEnter(TWinControl(Control.Controls[i])); ---> 不是 SetOnEnter (TWinControl(Control.Controls[i])) end; 我把它改掉,可以執行但是沒有任何動作,結束時還出現access 錯誤??
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-01-08 16:00:20 IP:61.219.xxx.xxx 未訂閱
Soryy, 打錯了兩個地方
procedure TForm1.SetonEnter(Control:TWinControl);
var i: integer;
begin
  if (Control is TEdit) then
//    Tedit(Controls[i]).OnEnter :=EdtEnter
    Tedit(Controls).OnEnter :=EdtEnter
  else
  if Control.ControlCount >0  then
    for i := 0 to Control.ControlCount-1 do
      if Control.controls[i] is TWinControl then
//        SetEnter(TWinControl(Control.Controls[i]));
        SetonEnter(TWinControl(Control.Controls[i]));
end;
[/quote]
cyl
中階會員


發表:163
回覆:171
積分:66
註冊:2002-07-11

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-01-08 16:06:34 IP:61.218.xxx.xxx 未訂閱
又打錯了
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-01-08 16:10:06 IP:61.219.xxx.xxx 未訂閱
有關Parent, Owner, Controls array, Components array 的觀念,有興趣可以參考一下 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=20813 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=20036
系統時間:2024-04-20 14:45:46
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!