![]() |
PopupMenü poppt nur ganz kurz auf
Moin ihr,
ich hab praktisch soeine Prozedur
Delphi-Quellcode:
diese erstellt eigentlich nur ein PopupMenü und "soll" es anzeigen
Procedure TToolMain._ShowMenu(MenuID: Integer);
Var Item: TMenuItem; P: TPoint; Begin SetForegroundWindow(Application.Handle); _Menu.Items.Clear; ... Item := TMenuItem.Create(_Menu); Item.Caption := 'Optionen'; Item.OnClick := OptionClick; _Menu.Items.Add(Item); Item := TMenuItem.Create(_Menu); Item.Caption := 'Exit'; Item.OnClick := ExitClick; _Menu.Items.Add(Item); P := Mouse.CursorPos; _Menu.Popup(P.X, P.Y); End; erstellt wurde es bei Programmstart so
Delphi-Quellcode:
Sooo, nun funktioniert es unter D2009 komischer Weise, :shock:
_Menu := TPopupMenu.Create(Application);
_Menu.AutoPopup := False; _Menu.MenuAnimation := [maBottomToTop]; aber in TurboDelphi und Delphi 7 überhaupt nicht. Dort taucht es ganz kurz auf und verschwindet sofort wieder. In Delphi 2009 bleibt es zwar sichtbar und ist auch bediehnbar, allerdings wird die Abarbeitung des Programmes wärend _Menu.Popup angehalten, also die nächste Programmzeile wird erst nach Schließen des Popups ausgführt. (hier wäre es schön, wenn das Programm dort weiteraufen würde, aber das könnte och notfalls noch verkraften) Aber daß es in älteren Delphis nicht funktioniert, wundert mich etwas :gruebel: Ach ja: - es handelt sich um eine VCL-Anwendung ohne Fenster (dieses Optionsfenster wird nur manchmal später manuell erzeugt)
Delphi-Quellcode:
Statt der Schleife hätt ich auch gern Application.Run; genommen, aber ohne Fenster beendet sich dieses ja sofort wieder.
Program theTool;
Uses Main, Forms; {$R *.res} Begin Application.Initialize; Repeat Try Application.HandleMessage; Except Application.HandleException(Application); End; Until Application.Terminated; End. [add] wenn ich Pech hab, werd ich wohl doch noch die Options-Form ständig unsichtbar im Hintergrund mitlaufen lassen müssen :? |
Re: PopupMenü poppt nur ganz kurz auf
![]() So, ich hab alles mal auf ein Minimum reduziert:
Delphi-Quellcode:
Es läuft immer noch nur in D2009 richtig, aber nicht in D2006/TDE oder D7.
Var _Menu: TPopupMenu;
Procedure TForm1.Button2Click(Sender: TObject); Begin Hide; End; Procedure TForm1.Timer1Timer(Sender: TObject); Var P: TPoint; Item: TMenuItem; Begin //SetForegroundWindow(Application.Handle); P := Mouse.CursorPos; _Menu.Items.Clear; Item := TMenuItem.Create(_Menu); Item.Caption := 'Test 1'; _Menu.Items.Add(Item); Item := TMenuItem.Create(_Menu); Item.Caption := 'Test 2'; _Menu.Items.Add(Item); _Menu.Popup(P.X, P.Y); End; Initialization _Menu := TPopupMenu.Create(nil); _Menu.AutoPopup := False; _Menu.MenuAnimation := [maBottomToTop]; Finalization _Menu.Free; End. > z.B. Timer auf 10 Sekunden, Form verstecken und warten Das Probem ist jetzt: * solange SetForegroundWindow auskommentiert ist, wird das Popup angezeigt allerdings schließt es dann nicht mehr richtig (es geht z.B. nicht zu, wenn man igendwo anders hinklickt, solange man nicht mal kurz in das Popup reingeklickt hab) * ist SetForegroundWindow aktiv, dann öffnet und schließt es in D2009 richtig, aber in den anderen Delphis geht es sofort wieder zu. * außerdem arbeiter meine Anwendung im Hinergrund und auch beim Anzeigen des Popups hat die Taskbar (das Trayicon) den Fokus und nicht meine Anwendung und das Popup schließt erst wichtig, wenn dieses oder die Anwendung den Fokus verliert nur hat es ja standardmäßig keinen Fokus und demnach bleibt das Popup dann geöffnet (ohne SetForegroundWindow) |
Re: PopupMenü poppt nur ganz kurz auf
Hatte grad eben 'nen Gedankenblitz :coder2:
Delphi-Quellcode:
und es scheint zu laufen :cheer:
SetForegroundWindow(PopupList.Window);
|
Re: PopupMenü poppt nur ganz kurz auf
Jetzt wo Du den Thread als Alleinunterhalter gestaltet und auch gelöst hast fällt mir das Problem samt Lösung auch wieder ein (zu spät und sinnlos).
Man könnte es als Spam werten oder als Bestätigung, dass Deine gefundene Lösung die richtige ist ;)
Delphi-Quellcode:
case Message.LParamLo of
WM_RBUTTONUP: begin SetForegroundWindow(Handle); PopupMenu1.Popup(tp.x,tp.y); |
Re: PopupMenü poppt nur ganz kurz auf
im Prinzip hatte ich deinen Vorschlag schon, nur daß es weder mit Form- noch Application-Handle richtig funktionierte,
aber das Nachrichtenfenster für Popups, welches die VLC erstellt, hilft (wobei ich es schon komisch finde, daß nicht gleich das Application-Nachrichtenfenster genutzt und stattdessen noch ein Weiteres erstellt wird) |
Re: PopupMenü poppt nur ganz kurz auf
Hmmm, hängt evtl. mit dem Status des gewählten Fensters zusammen, das man als "Mutter" des PopUp vorwählt.
Auch ganz nett, was meine Bibliothek eben noch ausgespuckt hat, man beachte das Datum (Namen zensiert): Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:04 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