Das Problem ist auseinanderzuhalten ob Popup.Deactivate und StatusBar.Click "direkt" aufeinander folgen, ansonsten wäre es ja legitim das dein Popupfenster erst verschwindet um dann beim Click wieder zu erscheinen.
Delphi-Quellcode:
type
TMainForm = class(TForm)
..
private
ShowPopupOnClick: Boolean;
..
...
procedure TMainForm.StatusBarMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
//Würde sehr kurz nach Popup.Deactivate aufgerufen
//wenn die Zeitspanne größer ist wird das Popup angezeigt
ShowPopupOnClick := Abs(GetTickCount - Popup.TimeStampHide) > 20;
end;
procedure TMainForm.StatusbarClick(Sender: TObject);
begin
if ShowPopupOnClick then
Popup.Show;
end;
//##############################################################
type
TPopup = class(TForm)
..
public
TimeStampHide: Integer;
..
procedure TPopup.FormDeactivate(Sender: TObject);
begin
TimeStampHide := GetTickCount;
Hide;
end;
Grüsse, Dirk