Hallo,
Ich möchte hier meine Wrapper-
Unit für SHFileOperation vorstellen.
Erstmal geht mein Dank an
sakura, der den unten genannten Code-Library Eintrag veröffentlich hat und von dem ich auch einige Teile verwendet habe
Das ganze ist eine Ergänzung zum Code-Library Eintrag
"Dateioperationen mit SHFileOperation"
Das ganze ist eine Klasse, die sich TSHFileOperation nennt
Deklaration
Delphi-Quellcode:
type
TSHFileOperation = class(TObject)
private
FParentWnd : HWND;
FSourceList: TStrings;
FTargetList: TStrings;
FMappings : Pointer;
FSimpleProgressTitle: string;
FOperation : TSHFileOperationType;
FAPIOperation: UINT;
FFlags : TSHFileOperationFlags;
FAPIFlags : FILEOP_FLAGS;
FAborted : Boolean;
FFileOpResult: Integer;
procedure SetFlags(AFlags: TSHFileOperationFlags);
procedure SetOperation(AOperation: TSHFileOperationType);
procedure SetSourceFile(const Value: string);
procedure SetTargetFile(const Value: string);
function GetSourceFile: string;
function GetTargetFile: string;
public
property ParentWnd: HWND read FParentWnd write FParentWnd;
property SourceList: TStrings read FSourceList;
property TargetList: TStrings read FTargetList;
property SourceFile: string read GetSourceFile write SetSourceFile;
property TargetFile: string read GetTargetFile write SetTargetFile;
property NameMappings: Pointer read FMappings write FMappings;
property SimpleProgressTitle: string read FSimpleProgressTitle
write FSimpleProgressTitle;
property Flags: TSHFileOperationFlags read FFlags write SetFlags;
property Operation: TSHFileOperationType read FOperation write SetOperation;
property Aborted: Boolean read FAborted;
property FileOpResult: Integer read FFileOpResult;
constructor Create(ParentWindow: HWND);
destructor Destroy; override;
function ExecuteOperation: Integer;
procedure Reset;
procedure SetOperationByAPI(Operation: UINT);
procedure SetFlagsByAPI(Flags: FILEOP_FLAGS);
end;
Wie auch bei dem Original SHFileOperation können verschiedene Optionen verwendet werden.
Ich habe zusätzlich noch fehlende Konstanten, die in der ShellAPI.pas fehlen, hinzugefügt.
Die genaue Bedeutung kann im
PSDK nachgeschlagen werden.
Einige Flags stehen möglicherweise nicht in jeder Windows-Version zur Verfügung.
Delphi-Quellcode:
type
TSHFileOperationType = (fotCopy, fotMove, fotDelete, fotRename);
TSHFileOperationFlag = (fofMultiDestFiles, fofConfirmMouse, fofSilent,
fofRenameOnCollision, fofNoConfirmation, fofWantMappingHandle,
fofAllowUndo, fofFilesOnly, fofSimpleProgress, fofNoConfirmMakeDir,
fofNoErrorUI, fofNoCopySecurityAttributes, fofNoRecursion,
fofNoConnectedElements, fofWantNukeWarning, fofNoRecurseReparse);
TSHFileOperationFlags = set of TSHFileOperationFlag;
- Operationen
- fotCopy (entspricht "FO_COPY") - Elemente werden kopiert (Wildcards möglich)
- fotMove (entspricht "FO_MOVE") - Elemente werden verschoben (Wildcards möglich)
- fotDelete (entspricht "FO_DELETE") - Elemente werden gelöscht (Wildcards möglich)
- fotRename (entspricht "FO_RENAME") - Elemente werden umbenannt (keine Wildcards möglich)
- Flags (nur die wichtigsten)
- fofMultiDestFiles (entspricht "FOF_MULTIDESTFILES") - Jeder Eintrag in SourceList hat einen Pendanten in TargetList.
- fofSilent (entspricht "FOF_SILENT") - Die Fortschrittsanzeige wird unterdrückt.
- fofRenameOnCollision (entspricht "FOF_RENAMEONCOLLISION") - Die Datei wird umbenannt, falls diese im Zielverzeichnis bereits existiert (Kopie von...)
- fofNoConfirmation (entspricht "FOF_NOCONFIRMATION") - Die User muss keine Bestätigung zum Überschreiben etc. geben.
- fofAllowUndo (entspricht "FOF_ALLOWUNDO") - Die Aktion kann rückgängig gemacht werden.
- fofFilesOnly (entspricht "FOF_FILESONLY") - Es werden nur Dateien verarbeitet.
- fofNoRecursion (entspricht "FOF_NORECURSION") - Es werden keine Unterverzeichnisse berücksichtigt.
Die Eigenschaften und Methoden- ParentWindow - Beschreibt das Fenster, unter welchem der entsprechende Dialog angezeigt werden soll.
- SourceList und TargetList - Das sind Listen, die die jeweiligen Quell bzw. Zieldateien enthalten (Zieldateien nur erforderlich bei Opertion <> fotDelete)
- SourceFile und TargetFile - Falls man nur eine Datei verarbeiten will, kann man sich dieser beiden string-Properties behelfen (Zieldatei nur erforderlich bei Operation <> fotDelete)
- NameMappings - (Nur gültig bei der Option fofWantMappingHandle). Pointer auf die gewünschten Name Mappings.
- SimpleProgressTitle - (Nur gültig bei der Option fofSimpleProgress). Beschreibungstext in der Fortschrittsanzeige.
- Flags - Optionen für die Operationen (Möglichkeiten siehe oben)
- Operation - Typ der Operation.
- Aborted - Wird gesetzt nach dem ExecuteOperation aufgerufen wurde und bestimmt, ob der Benutzer den Vorgang abgebrochen hat.
- FileOpResult - Ergebniskennnug von ExecuteOperation (Entspricht dem Result von SHFileOperation). Dieser Wert ist 0, falls der Vorgang erfolgreich war, andernfalls ist ein Windows-Fehlercode.
- Create und Destroy - Konstruktor und Destruktor der Klasse. Im Konstruktor ist standardmäßig fotCopy als Operation gesetzt.
- ExecuteOperation - Ruft SHFileOperation mit den angebenen Flags auf und führt die in Operation spezifizierte Operation durch. Gibt da Ergebnis von SHFileOperation zurück (siehe FileOpResult)
- Reset - Leert alle Dateilisten und setzt den Status von Aborted und FileOpResult zurück. Die Flags und Operation Eigenschaften verbleiben so wie sie vorher waren.
- SetOperationByAPI - Es können die WinAPI Werte übergeben werden, die dann entsprechend umgewandelt werden.
- SetFlagsByAPI - Es können die WinAPI Werte übergeben werden, die dann entsprechend umgewandelt werden.
Als letztes noch ein kleines Anwendungsbeispiel:
Delphi-Quellcode:
var
Operation: TSHFileOperation;
begin
Operation := TSHFileOperation.Create(Self.Handle);
try
Operation.Operation := fotCopy;
Operation.Flags := [fofNoConfirmation, fofFilesOnly];
Operation.SourceList.Assign(Self.SomeSourceList);
Operation.TargetList.Assign(Self.SomeTargetList);
if Operation.ExecuteOperation <> 0 then
ShowMessage('Fehler: ' + IntToStr(Operation.FileOpResult));
finally
Operation.Free;
end;
end;
Die komplette
Unit befindet sich im Anhang, sie ist unter der
MPL 1.1 veröffentlicht
mfG
mirage228
[edit=Matze] Mfg, Matze[/edit]