Entwickler-Ecke
Windows API - Problem mit Popupmenu
LonghornUser - Do 12.03.09 12:34
Titel: Problem mit Popupmenu
Hallo,
ich möchte folgendes bewerkstelligen:
Ich habe hier ein Label und auf Linksklick soll ein Popupmenu geöffnet werden. Allerdings an der Stelle, wo es normalerweise in einem MainMenu geöffnet würde. Sprich: Ich will ein eigenes Mainmenü basteln.
Nun habe ich es so versucht:
Delphi-Quelltext
1: 2: 3:
| Label5OnClick: popupmenu1.Popup(form1.Left+label5.Left, form1.Top+label5.Top+label5.Height); |
Das funktioniert aber leider nicht ganz, weil Form1.Top mir die Position des Fensters bis zur Rahmengrenze liefert. Nun ist die Titelleiste in Vista ja höher als in XP und ich glaube, in Vista kann man die Höhe sogar verstellen. Das bedeutet, absolute Angaben helfen nicht weiter.
Habt ihr eine Idee, wie ich diesem Problem begegnen könnte ?
Ciao LHUser
jaenicke - Do 12.03.09 12:47
Wie wäre es mit ClientToScreen? ;-)
LonghornUser hat folgendes geschrieben : |
| Sprich: Ich will ein eigenes Mainmenü basteln. |
Was hat das eigentlich für einen Sinn, wenn ich fragen darf? :gruebel:
Gausi - Do 12.03.09 12:54
Sinn hin oder her, wenn ich bei Click auf etwas ein Popup-Menü haben möchte, dann mache ich das so:
Delphi-Quelltext
1: 2: 3: 4:
| var point: TPoint; GetCursorPos(Point); MyPopupMenu.Popup(Point.X, Point.Y); |
Gibt natürlich nicht den gewünschten Effekt, wenn man den Button per [Enter] bedient. ;-)
Ansonsten sollte ClientToScreen auch weiterhelfen.
LonghornUser - Do 12.03.09 14:13
ClientToScreen hat das gewünschte Ergebnis gebracht. Danke für den Tipp.
Zum Sinn des ganzen: Heutige Anwendungen haben ja schon den Anspruch, auch grafisch was herzumachen. Und da passt das MainMenu nicht wirklich rein. Daher das ganze und ich tausche ja nur die MenuBar aus, also nicht das eigentliche Menü.
Was mir aber nun auffällt. Wenn man versucht, das Verhalten von MainMenu nachzuahmen, muss es ja auch gehen, dass, wenn man ein Menü offen hat und mit der Maus auf den benachbarten Eintrag in der MainMenuBar fährt, sich dann das Popupmenü des benachbarten Eintrages öffnet und das des ersten Eintrages wieder schließt.
Gibt es im Popupmenu eine Methode zum Schließen (habe nix gefunden) ? Ich würde das Objekt ungern zerstören o.ä. ;)
jaenicke - Do 12.03.09 16:39
Die diversen Menükomponenten wie XPMenu usw. gefallen dir nicht? Denn ein so gutes Aussehen wie solche Komponenten wird dir mit deiner Methode kaum gelingen.
LonghornUser hat folgendes geschrieben : |
| Gibt es im Popupmenu eine Methode zum Schließen (habe nix gefunden) ? Ich würde das Objekt ungern zerstören o.ä. ;) |
http://www.swissdelphicenter.ch/de/showcode.php?id=2262
LonghornUser - Do 12.03.09 17:19
Naja, es geht nicht um "gefallen", sondern um "passen". Wenn man eine Anwendung in grün hat, passt ein blaues MainMenü halt nicht ;)
Der Code, den es bei SwissDelphiCenter gibt, funzt zwar, jedoch nicht in meinem fall. Es schein so, als ob keine Move-Events mehr erkannt werden, wenn ein Popupmenu offen ist.
LonghornUser - Fr 13.03.09 16:54
Keine Idee ? :(
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!