Hi DPler,
diesen Beitrag habe ich zum ersten Mal am 1.11.2000 bei Delphi3000.com veröffentlicht. Nach und nach werde ich verschiedene meiner Beiträge hier einbringen.
Die Prozedure DoFileWork, welche ich hier vorstelle, ermöglicht es Dateioperationen (kopieren, löschen, verschieben, ...) mit Hilfe der
WinAPI Funktion
SHFileOperation durchzuführen.
Der Syntax
Delphi-Quellcode:
function DoFileWork(
aWnd: HWND; aOperation: UINT; aFrom, aTo: TStrings; aFlags: FILEOP_FLAGS
): Integer;
Ein BeispielDoFileWork(Self.Handle, FO_DELETE, strlFiles, nil, FOF_ALLOWUNDO);
Dieser Aufruf verschiebt alle Dateien und Verzeichnisse, welche in der StringListe strlFiles stehen in den Windows-Papierkorb.
Parameter:
- aWnd - Handle zum aufrufenden Fenster
- aOperation - eine der folgenden Konstanten
- FO_MOVE
- FO_COPY
- FO_DELETE
- FO_RENAME (Wildcards können nicht genutzt werden!)
- aFrom - Namen der Quellen (vollständige Pfadangaben !)
- aTo - Namen der Ziele wenn nötig (nil für FO_DELETE)
- aFlags - mögliche Flags zur Verarbeitung
- FOF_ALLOWUNDO - Ermöglicht eine Umkehrung der letzten Operation
- FOF_FILESONLY - Verzeichnisse ignorieren
- FOF_MULTIDESTFILES - aTo hat einen Eintrag für jeden Eintrag in der aFrom Liste
- FOF_NOCONFIRMATION - Der User muss keine Bestätigung zum Überschreiben, etc. geben
- FOF_NOERRORUI - Fehlermeldugen unterdrücken
- FOF_NORECURSION - Unterverzeichnisse ignorieren
- FOF_RENAMEONCOLLISION - Datei umbenennen, wenn diese bereits im Zielverzeichnis existiert (Kopie 1 von ...)
- FOF_SILENT - Fortschrittsanzeige unterdrücken.
Es existerien weitere Flags, welche in der Online Hilfe stehen.
Ergebnisse der Funktion:
- 0 - erfolgreich
- <> 0 - Windows Fehlercode
Hinweis: Die
Unit ShellAPI muss in der Uses Klausel stehen!
Delphi-Quellcode:
function DoFileWork(
aWnd: HWND; aOperation: UINT; aFrom, aTo: TStrings; aFlags: FILEOP_FLAGS
): Integer;
var
I: Integer;
FromPath, ToPath: string;
SHFileOpStruct: TSHFileOpStruct;
begin
FromPath := '';
for I := 0 to aFrom.Count - 1 do
FromPath := FromPath + aFrom.Strings[I] + #0;
FromPath := FromPath + #0;
if Assigned(aTo) then
begin
ToPath := '';
for I := 0 to aTo.Count - 1 do
ToPath := ToPath + aTo.Strings[I] + #0;
ToPath := ToPath + #0;
if aTo.Count > 0 then
aFlags := aFlags or FOF_MULTIDESTFILES;
end;
with SHFileOpStruct do
begin
Wnd := aWnd;
wFunc := aOperation;
pFrom := PChar(FromPath);
if Assigned(aTo) then
begin
pTo := PChar(ToPath)
end else begin // target available
pTo := nil;
end; // target not available
fFlags := aFlags;
end; // structure
Result := SHFileOperation(SHFileOpStruct);
end;
...
...