Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Dialog während Aufgabe anzeigen (https://www.delphipraxis.net/117336-dialog-waehrend-aufgabe-anzeigen.html)

Marco Steinebach 16. Jul 2008 08:40


Dialog während Aufgabe anzeigen
 
Hallo Delphianer,
schlagt mich nicht, ich hätte gern gesucht, mir ist nur nicht klar, nach was! ;-)
Folgendes, eigentlich Standard-Problem:
Ich Starte eine Aufgabe, in meinem Fall eine ganze Menge Dateien Scannen. Während des Scanns soll ein Dialogfeld angezeigt werden, meinetwegen mit Fortschrittsbalken, und, wenn der Scan fertig ist, schließt sich ds Dialogfeld wieder automatisch.
Ich suche einen Lösungsansatz, der auch der OOP entspricht.
Wie geht das: Timer, Ereignissteuerung, oder viel einfacher?
Eine Multi-Thread-Lösung macht hier keinen sinn, bevor die Dateien nämlich nicht gescannt sind, kann man sowieso nicht weiterarbeiten. ;-)
Und wer macht die Kommunikation zwischen Programm und dem Dilogfeld?
Also fragt das Modale Form mittels Timer ab, wieviele Dateien schon gescannt sind, oder sagt der Scan dem Formular bescheid ...
Hiiilfe! ;-)
Bitte um Hilfe!
Marco

HeinzJ 16. Jul 2008 08:48

Re: Dialog während Aufgabe anzeigen
 
Anzeigeformular mit Fortschrittsbalken läuft in etwa so ab:
1. Bedarf ermiiteln (Anzahl Scans ...)
2. Anzeigeformular erzeugen, aufrufen ...
3. Vorgang (Scan) beginnen
4. Anzeigeformular.Fortschrittsbalken aktualisieren je nach Fortschritt
5. Anzeigeformular schliessen bei Vorgang Ende

Luckie 16. Jul 2008 08:49

Re: Dialog während Aufgabe anzeigen
 
Zitat:

Zitat von Marco Steinebach
Eine Multi-Thread-Lösung macht hier keinen sinn, bevor die Dateien nämlich nicht gescannt sind, kann man sowieso nicht weiterarbeiten. ;-)

Wirst du aber brauchen, denn du willst ja zwei Dinge parallel machen: Scannen und gleichzeitig einen Dialog mit einer Fortschrittsanzeige anzeigen lassen. Desweiteren wäre es auch ohne die Fortschrittsanzeige keine schlechte Idee das Scannen in einen Thread auszulagern, damit das Fenster noch reagiert.

calculon 16. Jul 2008 08:55

Re: Dialog während Aufgabe anzeigen
 
Du könntest eine Form modal anzeigen lassen. Da die Scans i.d.R. rekursiv ablaufen weißt du ProgressBar.Max erstmal nicht. Um diesen Wert zu bekommen könntest du zunächst einen Initialisierungsdurchlauf machen in dem du nur die Ordner zählst. Währenddessen zeigst du auf einem Label "Initialisiere..." an. Wenn der Durchlauf fertig ist setzt du ProgressBar.Max auf die Anzahl der gefundenen Ordner und startest im Anschluss den richtigen Scan und inkrementierst hier nach den durchsuchten Ordnern. Da kann bestimmt noch viel optimieren. Einen Abbrechen-Button könntest du über eine globale bool'sche Variable lösen: if bAbbruch then ... Das musst du dann halt in deiner Scan-Routine mit einbauen.

@rote Kasten: :hi:

HTH Gruß
--

Marco Steinebach 16. Jul 2008 16:16

Re: Dialog während Aufgabe anzeigen
 
Hallo Leuts,
Erstmal vielen Dank für die raschen und sehr hilfreichen Antworten - also einfacher, als ich gedacht hatte. ;-) Ich wollte nur nicht wieder in meine Nicht-OOP-Weise verfallen. ;-)
Aber eine grundsätzliche Frage habe ich doch noch:
Wo liegt der Sinn, bei meinem Beispiel der Multi-Threading-Fähigkeit, weil:
Dialogfeld anzeigen,
Scannen und während des scans den Balken aktualisieren,
Ende scan und Ende Formular.
Klar sind es, streng genommen, zwei dinge. Aber, bis nicht alles gescannt ist, kann der User mit dem Programm ohnehin nix tun.
Es geht mir hier nicht um Sinn oder Unsinn, ich will's einfach verstehen.
Vielen Dank und viele Grüße
Marco


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:12 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