設定OnEnter |
答題得分者是:ccchen
|
cyl
中階會員 發表:163 回覆:171 積分:66 註冊:2002-07-11 發送簡訊給我 |
請問我的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 發送簡訊給我 |
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 發送簡訊給我 |
引言:我不就這樣寫的,不行阿,把control改成omponents就可以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; |
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
引言:我不就這樣寫的,不行阿,把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 發送簡訊給我 |
我不就這樣寫的,不行阿,把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 發送簡訊給我 |
引言: 我不就這樣寫的,不行阿,把control改成omponents就可以 你的Edit是直接放在form上, 還是放在其他WinControl(如Groupbox或panel)內? 假設Form上有一panel1, panel1上有一Edit1,則 panel1在form之controls中, edit1則在panel1之controls中, 故必須nest才能找到 Design time所放之任何元件均在 Form之components中 如果你要用controls可以如此我是放在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是什麼??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; |
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
在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 發送簡訊給我 |
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 發送簡訊給我 |
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 發送簡訊給我 |
|
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |