AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Position Popupmenu bei 2 Monitoren

Ein Thema von flippinho · begonnen am 1. Apr 2010 · letzter Beitrag vom 3. Apr 2010
Antwort Antwort
flippinho

Registriert seit: 3. Mai 2009
7 Beiträge
 
Delphi 5 Enterprise
 
#1

Position Popupmenu bei 2 Monitoren

  Alt 1. Apr 2010, 17:22
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
  Mit Zitat antworten Zitat
blauweiss

Registriert seit: 19. Jun 2007
142 Beiträge
 
#2

Re: Position Popupmenu bei 2 Monitoren

  Alt 1. Apr 2010, 21:07
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
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Position Popupmenu bei 2 Monitoren

  Alt 1. Apr 2010, 21:11
Delphi7 hat auch schon den Code mit InvalidPoint(Pt)
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
flippinho

Registriert seit: 3. Mai 2009
7 Beiträge
 
Delphi 5 Enterprise
 
#4

Re: Position Popupmenu bei 2 Monitoren

  Alt 3. Apr 2010, 13:43
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:34 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