Es genügt, die folgenden beiden Message-Handler zu überschreiben um ein Neuzeichnen bei einem Focuswechsel auszulösen.
Delphi-Quellcode:
procedure TBorderIcon2.WMKillFocus(var Message: TWMKillFocus);
begin
inherited;
Invalidate;
end;
procedure TBorderIcon2.WMSetFocus(var Message: TWMSetFocus);
begin
inherited;
Invalidate;
end;
Stimmt. Die Variable „fFocused“ und die damit zusammenhängenden Anweisungen werden nicht benötigt. Die Zahl der Eingriffe über Windows-Botschaften bleibt aber gleich, um die angestrebte Funktionalität zu erreichen. Die Leertaste und die Eingabetaste sollen sich so verhalten wie bei einer Schaltfläche. Beim Klicken mit der Maus, soll der Fokus auch entsprechend geschaltet sein. Es läuft darauf hinaus, dass von „TCustomControl“ ein Basistyp „TCustemFocus“ abgeleitet wird, der den richtigen Tastaturfokus zeigt. Während Elemente, die dies nicht benötigen von „TCustomControl“ abgeleitet werden. Vielen Dank für den Hinweis.