DruckenMister WongFacebook

Komponente beim Fokussieren farblich hervorheben

System Win9x, WinNT, Win2000, WinXP, Vista, Win7
Ab Delphi-Version Delphi 1
Letzte Änderung 28.09.2010

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;