Progress Dialog modal anzeigen
-
Verstehe ich das richtig, dein Timer soll dafür sorgen das nach dem Öffnen
des Dialogs das Programm trotzdem weiterausgeführt wird?
-
Timer ist nur bei mir.
nimm einfach ein Button. mit Button1 wird wir Process angestoßen.
1. PostMessage sendet eine Nachricht an die Botschaftsbehandlungsroutine fder Form. Die Nachricht wird abgefangen (BEGIN_MESSAGE_MAP...END_MESSAGE_MAP) und entsprechende Routine gestartet. in meinem Fall DataRefresh();.
da PostMessage nicht auf Abarbeitung der Routine wartet, wird FrmActivity->ShowModal(); sofort danach aufgerufen.
DataRefresh() und FrmActivity laufen dann parallel.void __fastcall TRES_VentanaMain::Button1Click(TObject *Sender) { PostMessage(Handle, WMU_DATAREFRESH, 0, 0); // !!! FrmActivity->ShowModal(); // !!! } //---------------------------------------------------------------------------
-
Das klingt vernüftig.
Ich muss zu meiner Schande gestehen das ich in Sachen WinAPI noch deutlichen
Nachholbedarf habe.Kannst Du mir erläutern was die einzelnen Zeilen machen?
Ich nehme an das folgende Zeile die Funktion DataRefresh der WinAPI bekannt
macht und ihr die Parameterliste (TMessage) sowie einen Funktionspointer auf
DataRefresh übergibt.MESSAGE_HANDLER(WMU_DATAREFRESH, TMessage, DataRefresh);
Was bedeutet aber das TControl hier?
END_MESSAGE_MAP(TControl)
PostMessage veranlaßt dann die Funktion von der WinAPI direkt aufzurufen.
Richtig? Zu welchem Zeitpunkt ruft PostMessage dann die Funktion auf?
-
Ich kann vom modalen Dialog aus Aufträge an die Hauptanwendung geben, die auch abgearbeitet werden - eben noch mal explizit ausgecheckt. - Also arbeitet die App im Hintergrund nur nicht, wenn/weil sie keine Aufträge hat.
Du könntest also die Funtionen zur Abarbeitung vom modalen Dialog aus aufrufen und nach dem Arbeitsende den Dialog schließen/(wechseln) lassen, wie im InstallShield.
-
BEGIN_MESSAGE_MAP eintippen und F1 drucken
-
der Vorschlag von Omega-X funktioniert natürlich auch.
ict aber für einfache Vortschrit Anzeige nicht besonders geeignet. wenn die Form von mehreren Stellen im Programm für verschidene Aufgaben benutzt wird.
-
warum so kompliziert. die form einfach mit show anzeigen und mit einer hilfsvariable das schliessen (OnClose oder OnCloseQuery) verhindern, solange diese nicht den gültigen wert hat. oder bei focusverlust (OnDeactivate)!
-
es geht darum, dass so lange process nicht abgearbeitet ist, darf man in der hauptanwendung nix machen. und mit ShowModal() kann man das einfach erreichen
-
das kann ich auch! und wesentlich einfacher!
-
Da muss ich Xqgene beipflichten. Es ist schon wesentlich eleganter wenn der Dialog
nicht direkt den Prozess startet. Aber der Vorschlag von Sunday wäre auch eine
Möglichkeit, die ich bisher außer Acht gelassen habe.In meinem Fall werde ich jedoch Xqgene's Variante bevorzugen, da mein Dialog auf
Fortschritts-Events meines Vorgangs reagieren soll.