Einzelnen Beitrag anzeigen

Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#20

AW: Testen ob Popupmenu gerade angezeigt wird?

  Alt 15. Apr 2011, 23:24
Tatsache: MouseDown wird vorher aufgerufen, aber MouseUp später. Macht ja eigentlich auch Sinn.

Hab’s jetzt so gelöst:

Delphi-Quellcode:
  TfrmMain = class(TForm)
    {…}
  private
    FPopupActive,
    FPreventMouseUp: Boolean;
    procedure EnterMenuLoop(var Msg); message CM_ENTERMENULOOP;
  public
    {…}
  end;

procedure TfrmMain.EnterMenuLoop(var Msg);
begin
  FPopupActive := True;
end;

procedure TfrmMain.ApplicationEventsIdle(Sender: TObject; var Done: Boolean);
begin
  FPopupActive := false;
end;

procedure TfrmMain.PaintBoxMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if FPopupActive then
  begin
    FPreventMouseUp := True;
    exit;
  end;
  {…}
end;

procedure TfrmMain.PaintBoxMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if FPreventMouseUp then
  begin
    FPreventMouseUp := False;
    exit;
  end;
  {…}
end;
Vielleicht sollte man noch eine Kontrolle einführen, ob MouseDown und MouseUp sich auf den gleichen MouseButton beziehen, aber vielleicht ist das auch schon wieder Overkill.

So funktioniert es jedenfalls erstmal.

Danke euch allen
  Mit Zitat antworten Zitat