AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

SHFileOperation-Dialog modal anzeigen

Ein Thema von Guido Eisenbeis · begonnen am 11. Mai 2010 · letzter Beitrag vom 11. Mai 2010
Antwort Antwort
Guido Eisenbeis

Registriert seit: 9. Apr 2006
389 Beiträge
 
Delphi 10.3 Rio
 
#1

SHFileOperation-Dialog modal anzeigen

  Alt 11. Mai 2010, 02:49
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.
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#2

Re: SHFileOperation-Dialog modal anzeigen

  Alt 11. Mai 2010, 08:19
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
  Mit Zitat antworten Zitat
Guido Eisenbeis

Registriert seit: 9. Apr 2006
389 Beiträge
 
Delphi 10.3 Rio
 
#3

Re: SHFileOperation-Dialog modal anzeigen

  Alt 11. Mai 2010, 14:28
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, ich weiß garnicht, wo ich mich verstecken soll! *schäm* 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.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 00:47 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