![]() |
Erkennen, wenn ein TPopupmenu verschwindet
Tach zusammen,
Die Vorgeschichte: In meinem Programm ist ein Timer aktiv. In OnTimer, der jede Sekunde durchlaufen wird, soll je nach Programmzustand eine komplexe Berechnung durchgeführt werden. Diese Berechnung dauert dann ca. 10 Sekunden. Weiterhin gibt's in diesem Programm ein Popupmenu, mit dem einige Einstellungen durchgeführt werden können. Wenn aber nun das Popup geöffnet ist, und danach die Berechnung gestartet wird, dann friert das Popupmenu ein. Ich kann hinklicken wohin ich will, das PopupMenu belibt sichtbar, bis die Berechnungsroutine durchgelaufen ist. Mein Lösungsansatz: Ist eingendlich ganz einfach. Wenn das Popupmenu aufpoppt, dann Disable ich einfach den Timer. Dazu gibt es ja OnPopup. Damit wird die Berechnung nicht gestartet und für das Popupmenu gibt's keinen Grund einzufrieren. Mein Problem: Wenn das PopupMenu verschwindet, soll der Timer wieder enabled werden. Aber wie? Ich habe kein Ereignis oder Eigenschaft gefunden, an der ich sehen kann, ob ein Popup noch sichtbar ist. Gerd |
Re: Erkennen, wenn ein TPopupmenu verschwindet
Hallo Gerd,
laut MS Windows Platform SDK sendet ein PopupMenu verschiedene Nachrichten an seinen Eigentümer. Unter Delphi ist das PopupList. Wenn du dort die Nachrichtenbehandlung anzapfst, dann hast du was du brauchst. Abschreiben kannst du hier: ![]() Grüße vom marabu |
Re: Erkennen, wenn ein TPopupmenu verschwindet
ich fände es sinvoller einen Thread zu verwenden denn sonst hat man ja auch den Nachteil das man warten muss bis die Berechnung abgeschlossen ist bevor man das Menü öffnen kann.
|
Re: Erkennen, wenn ein TPopupmenu verschwindet
Zitat:
|
Re: Erkennen, wenn ein TPopupmenu verschwindet
Erst einmal Danke an alle,
marabu hat mir erst mal den Tipp gegeben, den ich wohl ehesten gebrauchen kann. Ein Thread zu verwenden wäre wohl das besste. Aber mit Threads habe ich noch nicht die grosse Erfahrung, weshalb ich mich voererst mit dem Tip von marabu zufrieden gebe. Wenn ich etwas Zeit habe, werde ich das ganze in Threads umwandeln. ProcessMessages verwende ich in der Regel, wenn noch was anderes vom Programm gemacht werden muss. Aber in diesem Fall aus diversen Gründen unerwünscht. Gerd |
Re: Erkennen, wenn ein TPopupmenu verschwindet
Ich habe in einer meiner Komponenten das verwendet:
Delphi-Quellcode:
Erkärung:
procedure TForm1.PopUpMyDropDownMenu;
var atp:TPoint; Msg:TMsg; begin atp := ClientToScreen(Point(0, Height)); MyDropDownMenu.Popup(atp.x,atp.y); while PeekMessage(Msg, 0, WM_MOUSEFIRST, WM_MOUSELAST, PM_REMOVE) do; //warten damit falls nicht in menü sondern in irgend andere Control geklickt wird, unten gedrückt wieder entfernt wird MouseUp(mbLeft,[],1,1); end; MyDropDownMenu ist ein TPopupMenu; Du rufst einfacht in dein Programm PopUpMyDropDownMenu anstatt MyDropDownMenu.Popup; Die Prozedur PopUpMyDropDownMenu öffnet das Menü und wartet bis irgendwas gewählt ist. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:41 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