AGB  ·  Datenschutz  ·  Impressum  







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

Erkennen, wenn ein TPopupmenu verschwindet

Ein Thema von bernau · begonnen am 14. Sep 2006 · letzter Beitrag vom 8. Okt 2006
Antwort Antwort
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.295 Beiträge
 
Delphi 12 Athens
 
#1

Erkennen, wenn ein TPopupmenu verschwindet

  Alt 14. Sep 2006, 09:44
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
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Erkennen, wenn ein TPopupmenu verschwindet

  Alt 14. Sep 2006, 14:06
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: How to Detect a TPopupMenu's OnClose (OnpupDown) Event

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Erkennen, wenn ein TPopupmenu verschwindet

  Alt 14. Sep 2006, 14:09
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: Erkennen, wenn ein TPopupmenu verschwindet

  Alt 14. Sep 2006, 14:17
Zitat von bernau:
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.
Wenn Du in deiner Berechnung ab-und-zu ProcessMessages aufrusfst, dann kann dein Formular auch seine Anzeige aktualisieren und das Popup bleibt nicht stehen.
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.295 Beiträge
 
Delphi 12 Athens
 
#5

Re: Erkennen, wenn ein TPopupmenu verschwindet

  Alt 14. Sep 2006, 15:01
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
  Mit Zitat antworten Zitat
Bora4d

Registriert seit: 8. Okt 2006
26 Beiträge
 
Delphi 7 Professional
 
#6

Re: Erkennen, wenn ein TPopupmenu verschwindet

  Alt 8. Okt 2006, 23:49
Ich habe in einer meiner Komponenten das verwendet:
Delphi-Quellcode:
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;
Erkärung:
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.
  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 17:28 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