Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Position Popupmenu bei 2 Monitoren (https://www.delphipraxis.net/149888-position-popupmenu-bei-2-monitoren.html)

flippinho 1. Apr 2010 17:22


Position Popupmenu bei 2 Monitoren
 
Hallo

Ich habe ein Problem mit der Positionierung eines Popupmenu bei 2 Monitoren:

Wenn ich den 2. Monitor so eingestellt habe, das er den links neben dem Haupmonitor angeordnet ist und die Anwendung sich auf dem 2. monitor befindet, wird das Popup-position an der Position x=0,y=0 von dem aufrufenden Control angezeigt.

Diese Verhalten tritt nur auf, wenn das Popup durch die Autopopup-Eigenschaft aufgerufen wird. Wird das Popup durch die Funktion "Popup" mit den aktuellen Mauskoordinaten aufgerufen, erscheint das Popup an den Mauskoordinaten.

Kann mir jemand ein Tip geben, wie in diesem Fall auch über die Autopopup-eigenschaft das popupmenu richtig positioniert bekomme?

Danke im Voraus und frohe Ostern,
flippinho

blauweiss 1. Apr 2010 21:07

Re: Position Popupmenu bei 2 Monitoren
 
Hallo flippinho,

das hat mich auch schon geärgert. Es ist ein Bug in der Controls.pas von Delphi5:

Delphi-Quellcode:
procedure TControl.WMContextMenu(var Message: TWMContextMenu);
...
  if (PopupMenu <> nil) and PopupMenu.AutoPopup then
  begin
    SendCancelMode(nil);
    PopupMenu.PopupComponent := Self;
    [b]if Pt.X < 0 then[/b]
      Pt := ClientToScreen(Point(0,0));
    PopupMenu.Popup(Pt.X, Pt.Y);
    Message.Result := 1;
  end;
Im Vergleich dazu die Controls.pas von BDS2009:
Delphi-Quellcode:
procedure TControl.WMContextMenu(var Message: TWMContextMenu);
...
  if (PopupMenu <> nil) and PopupMenu.AutoPopup then
  begin
    SendCancelMode(Self);
    PopupMenu.PopupComponent := Self;
    [b]if InvalidPoint(Pt) then[/b]
      Pt := ClientToScreen(Point(0, 0));
    PopupMenu.Popup(Pt.X, Pt.Y);
    Message.Result := 1;
  end;
Wenn Du nicht die Controls.pas manipulieren willst, gibt es vielleicht die Möglichkeit, die WMContextMenu-Message in Deiner Form abzufangen und das Popupmenu selber aufzupoppen...!?

Frohe Ostern zurück
blauweiss

Helmi 1. Apr 2010 21:11

Re: Position Popupmenu bei 2 Monitoren
 
Delphi7 hat auch schon den Code mit InvalidPoint(Pt)

flippinho 3. Apr 2010 13:43

Re: Position Popupmenu bei 2 Monitoren
 
Hallo Ihr beiden,

danke für Eure Antworten, die Infos sind anscheinend genau das was ich brauche.
Ich werde sofort nach Ostern ausprobieren, wie ich es am besten zum funktionieren bringe.

Dank und Gruß,
flippinho


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:46 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz