![]() |
Dialog (TForm) soll PopUp-Menu nachahmen
Hallo Leute !
Ich möchte ein erweitertes Rechtsklick-Menü implemetieren. Normalerwesie würde ich ein TPopUpMenu nehmen. Die gestalterischen Möglichkeiten die ich darin habe, reichen aber nicht aus. Jetzt verwende ich ein "normales" Formular und rufe es mit ShowModal auf. Das ganze funtkioniert gut (und bietet auch alle Möglichkeiten die ich brauche). Nur eine Funktionalität eines PopUp-Menüs habe ich bis jetzt nicht hingekriegt: ein Popup-Fenster wird automatisch geschlossen, wenn der User außerhalb klickt. Wie kann ich einem auf TForm basierenden Dialog beibringen, dass er geschlossen wird, wenn man ausserhalb klickt ?? Hat jemand eine Idee ? Gruß Andreas |
Re: Dialog (TForm) soll PopUp-Menu nachahmen
Wenn deine Form den Fokus verliert, kannst du sie wieder schließen.
Das müsste das Verhalten nachahmen. Gruß alias5000 |
Re: Dialog (TForm) soll PopUp-Menu nachahmen
Verliert ein modales Fenster den Fokus, wenn man in die dazugehörige Applikation klickt? Für mich sieht das eher nicht so aus... Aber probieren geht über studieren ;)
Sherlock |
Re: Dialog (TForm) soll PopUp-Menu nachahmen
Naja, eigentlich wärs ja garnicht mal nötig, das Fenster modal zu machen ;)
|
Re: Dialog (TForm) soll PopUp-Menu nachahmen
Erstmal Danke für euer Engagement.
Ich muß den Dialog aus verschiedensten Gründen schon modal machen. Der Rechtsklick ist u.U. in eine größere Ablaufsteuerung eingebunden. Wie kann ein modales Fenster den Fokus verlieren ? Wo kann ich denn überhaupt das Klick-Ereigniss abgreifen ? Es scheint so, dass weder das Hauptprogramm das Klick-Ereigniss bekommt, noch der Dialog, wenn man ausserhalb des Modalen Dialogs klickt. Kann man evtl dem Dialog bei CreateParams noch irgendwelche Parameter geben ? Oder gibt´s ´ne API Funktion mit der man ein Fenster als Popup startet? |
Re: Dialog (TForm) soll PopUp-Menu nachahmen
Hast du schon mal drüber nachgedacht, ein Frame zu nutzen anstatt eines Forms?
|
Re: Dialog (TForm) soll PopUp-Menu nachahmen
hm.. Frame statt TForm ?
OK, aber wie dann weiter ? Frame auf einem PopUp-Menu plazieren ? Geht das ? Wie ? |
Re: Dialog (TForm) soll PopUp-Menu nachahmen
Du kannst das Frame auf dem Form plazieren, und über die Visible Eigenschaft ein- und ausblenden. Beim Verschieben des Forms verschiebt sich somit das Frame automatisch mit. Und über Click Ereignisse des Forms kannst du so auch das Frame wieder ausblenden, wenn du möchtest.
|
Re: Dialog (TForm) soll PopUp-Menu nachahmen
Der Witz ist aber, dass mein erweitertes PopUp-Menü - sei es nun durch ein Form oder einen Frame realisiert -
modal angezeigt werden muss. Hat ein Frame überhaupt eine ShowModal-Routine? Wenn ja, dann denke ich läuft das message handling gleich wie beim Formular, oder ? Ich denke mit Frames kommt man da auch nicht weiter. Gruß Andreas |
Re: Dialog (TForm) soll PopUp-Menu nachahmen
IMO widerspricht es sich, ein Form modal anzuzeigen, aber bei einem Klick außerhalb wieder zu schließen. Der Sinn von ShowModal ist ja, dass ich den Rest des Programms in der Zeit nicht benutzen kann.
|
Re: Dialog (TForm) soll PopUp-Menu nachahmen
Zitat:
Zitat:
|
Re: Dialog (TForm) soll PopUp-Menu nachahmen
Die Geschichte mit ein/ausblenden ist schon ok.
Ich will wie gesagt ein Popup-Menü simulieren, in dem anderere Items drin sind, als nur typische Menü-Punkte. Bei einem PopUp-Menü ist es ja so, dass sobald es aufpoppt, man sonst nichts vom Programm bedienen kann, ausser eben Punkte aus dem Popup-Menü anzuklicken. In diesem Sinne ist es ein modales Fenster und auch genau das was ich brauche. Eine Besonderheit hat ein Popup aber: Klickt man irgendwo ausserhalb, dann geht es zu. Um zu erreichen, dass man während mein Pseudo-Popup sichtbar ist, nichts anderes im Programm anklicken kann, zeige ich es mit ShowModal an. Damit erreiche ich genau das Gewünschte. Jetzt fehlt mir nur diese eine Besonderheit eines Popups: Ausserhalb klick --> Popup geht zu. Gruß Andreas |
Re: Dialog (TForm) soll PopUp-Menu nachahmen
Und wenn Du auf WM_KILLFOCUS reagierst?
[edit] Geht aber nicht bei modalen Fenstern. [/edit] |
Re: Dialog (TForm) soll PopUp-Menu nachahmen
Wie bereits gesagt solltest du es schließen wenn dein Menü den Focus verliert. Dies passiert zum Beispiel wenn jemand ein anderes Programm auswählt etc.
Wenn du dich für ShowModal entscheidest hast du dich ja bewusst dafür entschieden das der Rest deiner Formulare nicht bedienbar ist, entsprechend können diese natürlich auch nicht den Focus bekommen. Ich wüsste übrigens keinen Grund warum ein Popupmenü Modal angezeigt werden muss. Das ist auch nicht bei TPopupMenü so. Ich finde deine Aussage widerspricht sich einfach ein wenig. Du willst das dein Menü zu geht wenn du eines deiner anderen Forms auswählst, willst aber nicht das man diese auswählen kann (deswegen nimmst du ja ShowModal) In wie weit ein Frame hier helfen soll ist mir nicht klar. Ob ich nun die Dinge direkt auf dem Formular plaziere oder auf einem Frame welcher dann auf dem Formular plaziert hat den gleichen Effekt bezüglich Anzeige und Verhalten. |
Re: Dialog (TForm) soll PopUp-Menu nachahmen
Zitat:
Welche Anwendung verhält sich denn so wie von Dir beschrieben? |
Re: Dialog (TForm) soll PopUp-Menu nachahmen
Ich würde das einfach über den WindowsStyle 'WS_POPUP' regeln:
|
Re: Dialog (TForm) soll PopUp-Menu nachahmen
Ich persönlich würde mich auch "bedanken", wenn ein PopupMenu modal wäre. Versehentlich die rechte Maustaste geklickt und man müsste einen Funktion des Menüs ausführen, auch wenn man das gar nicht will.
|
Re: Dialog (TForm) soll PopUp-Menu nachahmen
Zitat:
Zitat:
|
Re: Dialog (TForm) soll PopUp-Menu nachahmen
Zusammenfassung:
Fenster nicht modal machen und wenns den Fokus verliert, schließen. Oder? Gruß alias5000 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:50 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz