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 SHFileOperation-Dialog modal anzeigen (https://www.delphipraxis.net/151277-shfileoperation-dialog-modal-anzeigen.html)

Guido Eisenbeis 11. Mai 2010 02:49


SHFileOperation-Dialog modal anzeigen
 
In meinem Projekt lösche ich eine große Anzahl von Dateien (in den Papierkorb) mit SHFileOperation. Das dauert eine Weile und dabei wird der Standard-Löschen-Dialog von Windows angezeigt. Leider kriege ich es nicht hin, dass dieser Dialog modal angezeigt wird. Dadurch kann ich zum einen mein Programm nach dem Löschen nicht akutalisieren, da ich nicht feststellen kann, wann die Lösch-Routine fertig ist. Zum anderen kann man alle Buttons der Form erneut drücken, während das erste Löschen noch im Gange ist.

Ich hab schon einiges dazu gegooglet und mit dem SHFILEOPSTRUCT-wnd experimentiert (Application.-, MainForm.-, Form1.Handle, ...). Das hat entweder keine Modal-Wirkung, bzw. teilweise hat das unerwünschte Wirkungen (SHFileOperation-Dialog reagiert nicht mehr, usw.) Einen Hook habe ich nicht hingekriegt.

Wie kann ich den SHFileOperation-Dialog modal anzeigen?

Guido.

messie 11. Mai 2010 08:19

Re: SHFileOperation-Dialog modal anzeigen
 
Zitat:

Zitat von Guido Eisenbeis
(...)da ich nicht feststellen kann, wann die Lösch-Routine fertig ist.

Komisch, das ist doch eine Function, die ein Ergebnis zurückliefert. Die müsste also nach dem Löschen irgendwas liefern. Während sie arbeitet, kann man evtl. das Form deaktivieren.

Grüße, Messie

Guido Eisenbeis 11. Mai 2010 14:28

Re: SHFileOperation-Dialog modal anzeigen
 
Zitat:

Zitat von messie
Komisch, das ist doch eine Function, die ein Ergebnis zurückliefert. Die müsste also nach dem Löschen irgendwas liefern. Während sie arbeitet, kann man evtl. das Form deaktivieren.

OK, :oops: ich weiß garnicht, wo ich mich verstecken soll! *schäm* :oops: Ob, oder welches Ergebnis die Funktion liefert, ist zwar nicht von Belang, sondern ob sie in ihrem (Shell-)Kontext mit meiner Applikation verbunden ist.

Ich war so überzeugt davon, dass ein Shell-Objekt trotz übergebenem Handle asynchron (also unabhängig) von der aufrufenden Applikation in einem eigenen Thread läuft, dass ich das nicht überprüft habe. So wie man das zum Beispiel von einem API- oder MM-Timer kennt, usw. Zusätzlich davon überzeugt hat mich, dass die übrigen Funktionen/Buttons sich weiterhin aufrufen/bedienen lassen. Insbesondere auch, dass sich die Löschroutine ein zweites, drittes, ... Mal für die selben Dateien aufrufen lässt, die ja gerade gelöscht werden.

Da ich aber jeden Hinweis ernst nehme, hat mich deiner auf die "richtige Spur" gebracht und ich hab' das jetzt getestet. "Richtige Spur" deshalb in Anführungszeichen, weil es mir eigentlich hätte klar sein müssen. Hab da vielleicht zu kompliziert gedacht, statt einfach zu machen.

Wie dem auch sei, vielen Dank für den Hinweis, der mich dazu gebracht hat, das zu überprüfen! Hat soweit geklappt und kann als gelöst angesehen werden.

Guido.


Edit: Schreibfehler korrigiert.


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