Home » Tipps & Tricks » Komponenten » Allgemein » Komponente beim Fokussieren farblich hervorheben

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;