Verpasse jedem Control ein OnEnter-Ereignis, bei dem Du dir den Sender in einem privaten Feld merkst. Das ist nämlich das Control, das den Focus gerade erhalten hat.
Im OnClick prüfst Du einfach, wer den Focus zuletzt hatte und reagierst dann entsprechend:
Delphi-Quellcode:
Type
TPublicEventsWinControl = Class (TWinControl)
Public
property OnEnter;
Property OnClick;
End;
procedure TForm1.FormCreate(Sender: TObject);
Var
i : integer;
Begin
For i:=0 to ComponentCount - 1 do
If Components[i] is TWinControl Then Begin
// Problem: Haben die Controls schon ein OnEnter / OnClick, wird das hier überschrieben.
TPublicEventsWinControl(Components[i]).OnEnter := RememberFocus;
TPublicEventsWinControl(Components[i]).OnClick := AllControlsOnClick;
End;
End;
Procedure TForm11.AllControlsOnClick (Sender : TObject);
Begin
If fLastControl = MyStatusbar Then
ThePopup.visible := Not ThePopup.Visible
else
ThePopup.Visible := False;
End;
Procedure TForm1.RememberFocus (Sender : TObject);
Begin
fLastControl := Sender as TWinControl;
End;