Form是否有當ActiveControl改變時的事件? |
尚未結案
|
jeffreck
高階會員 發表:247 回覆:340 積分:197 註冊:2003-01-23 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
試試 TScreen.OnActiveControlChange 事件,
或在 Application.OnIdle 事件中來判斷, 參考:
http://www.q3.nu/trucomania/truco.cgi?215&ing
private { Private declarations } procedure Esperando(Sender: TObject; var Done: Boolean); var Form1: TForm1; GuardaColor:TColor; AnteriorControlActivo:TWinControl; procedure TForm1.Esperando(Sender: TObject; var Done: Boolean); begin if AnteriorControlActivo <> Form1.ActiveControl then begin {Aqui si hemos cambiado de control activo} {Restauramos el color del control del que hemos salido} with TWinControl(AnteriorControlActivo) do begin Brush.Color:=GuardaColor; Repaint; end; {Guardamos el color del control en el que hemos entrado} with TWinControl(Form1.ActiveControl) do begin GuardaColor:=Brush.Color; Brush.Color:=clRed; Repaint; end; AnteriorControlActivo := Form1.ActiveControl; end; Done:=TRUE; end; procedure TForm1.FormActivate(Sender: TObject); begin AnteriorControlActivo:=Form1.ActiveControl; with TWinControl(Form1.ActiveControl) do GuardaColor:=Brush.Color; Application.OnIdle:=Esperando; end;--- 屬於那自己生命的歌 不管是什麼顏色 |
aquarius
資深會員 發表:3 回覆:347 積分:330 註冊:2003-05-21 發送簡訊給我 |
hagar 的方式會動, 不過可以寫得更簡潔一些..
procedure TForm1.MyHandler(Sender: TObject); var cBuf : array[0..MAX_PATH] of char ; wc : TWinControl ; begin wc:=screen.ActiveControl ; if wc=nil then exit ; if wc.Name='' then begin if wc.GetTextLen>0 then begin wc.GetTextBuf(cBuf,sizeof(cBuf)) ; Caption:=strpas(cBuf) ; end ; end else Caption:=wc.Name ; end; procedure TForm1.Button1Click(Sender: TObject); begin Screen.OnActiveControlChange:= MyHandler; end;...Aquarius
------
水瓶男的blog: http://791909.blogspot.com |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |