AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Code-Bibliothek Library: Dateien / Laufwerke Delphi Wrapper-Unit für SHFileOperation
Thema durchsuchen
Ansicht
Themen-Optionen

Wrapper-Unit für SHFileOperation

Ein Thema von mirage228 · begonnen am 28. Mär 2005
Antwort Antwort
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#1

Wrapper-Unit für SHFileOperation

  Alt 28. Mär 2005, 12:25
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]
Angehängte Dateien
Dateityp: pas ushfileoperation.pas (8,2 KB, 129x aufgerufen)
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)

Geändert von mkinzler (20. Jul 2010 um 16:35 Uhr) Grund: Namen des Anhangs geändert
  Mit Zitat antworten Zitat
Antwort Antwort

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 12:29 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