Komponente beim Fokussieren farblich hervorheben
Um eine Komponente bei Erhalt des Fokus‘ farblich hervorzuheben können Sie das OnEnter-Ereignis (Control erhält den Fokus) im Verbund mit dem OnExit-Ereignis (Control verliert den Fokus) nutzen. Da diese Vorgehensweise bei vielen betroffenden Controls schnell unübersichtlich wird, ist es besser im OnActiveControlChange-Ereignis des TScreen-Objekts anzusetzen.Folgendes Beispiel setzt den Hintergrund aller Edit-Felder bei Erhalt des Fokus‘ auf rot, verlieren sie den Fokus, werden sie wieder auf die Standardfarbe zurückgesetzt.Zunächst die Typendeklarationen:
type TForm1 = class(TForm) //.. private { Private-Deklarationen } FOldActiveControl: TWinControl; procedure ActiveControlChange(Sender:TObject); //.. end;
Die Implementation des Ereignisses sieht dann so aus:
procedure TForm1.ActiveControlChange(Sender:TObject); procedure ColorControl(const aControl: TWinControl); begin if aControl is TEdit then if TEdit(aControl).Focused then TEdit(aControl).Color:=clRed else TEdit(aControl).Color:=clWindow; end; begin //Control, das zuletzt den Fokus hatte if Assigned(FOldActiveControl) then ColorControl(FOldActiveControl); //Control, das jetzt den Fokus hat FOldActiveControl:=Screen.ActiveControl; if Assigned(FOldActiveControl) then ColorControl(FOldActiveControl); end;
Im OnCreate-Ereignis des Formulars kann das Ereignis zugewiesen werden:
procedure TForm1.FormCreate(Sender: TObject); begin Screen.OnActiveControlChange:=ActiveControlChange; end;
Damit es beim Beenden zu keiner Zugriffsverletzung kommt, muss das Ereignis beim Freigeben des Formulars wieder auf nil gesetzt werden:
procedure TForm1.FormDestroy(Sender: TObject); begin Screen.OnActiveControlChange:=nil; end;