IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Nono40.developpez.com
Le petit coin du web de Nono40
SOURCES TESTS DELPHI WIN32 AUTOMATISMES DELPHI .NET QUICK-REPORT
Retour à l'accueil
19 - SHFILEOPERATION

PRÉSENTATION : Programme de présentation de la fonction API ShFileOperation()
ZIP : Téléchargez le zip APERÇUS :

NOTES : Cette fonction est très utile pour toutes les fonctions groupées de fichiers. Il est possible de copier/suprimer/décplacer des répertoires complets, de gérer les collisions de noms, la création automatique des sous-répertoire en une seule opération. Cette fonction permet aussi de renommer des groupes de fichiers
Et autre avantage, elle accepte les caractères génériques * et ?.

CODE :
// Définition de la fonctionen Pascal, c'est plus facile à utiliser que l'API
//
// Définition d'un type ensemble pour les options de la fonctions
Type TSHFileOperationOptions = Set Of (oFOF_MULTIDESTFILES    ,
                                       oFOF_CONFIRMMOUSE      ,
                                       oFOF_SILENT            ,
                                       oFOF_RENAMEONCOLLISION ,
                                       oFOF_NOCONFIRMATION    ,
                                       oFOF_WANTMAPPINGHANDLE ,
                                       oFOF_ALLOWUNDO         ,
                                       oFOF_FILESONLY         ,
                                       oFOF_SIMPLEPROGRESS    ,
                                       oFOF_NOCONFIRMMKDIR    ,
                                       oFOF_NOERRORUI         );

// Prototype de la fonction en Pascal
Function ShFileOperationPascal(Operation:Cardinal;NomsFROM,NomsTO:TStrings;
                               Options:TSHFileOperationOptions;Titre:String):Boolean;
Var Info        :TSHFileOPStruct;
    ChaineFROM  :String;
    ChaineTO    :String;
    fl          :Word;
      // Fonction interne de conversion d'un TStrings et Chaine à zéro terminal multiple.
      // Le résultat est retourné en String plutot qu'en PChar pour plus de facilité de manipulation
      Function ConcatTStrings(Liste:TStrings):String;
      Var i:Integer;
      Begin
        If (Liste=NilOr (Liste.Count=0)
        Then Result:=#0#0
        Else Begin
          Result:='';
          For i:=0 To Liste.Count-1 Do Result:=Result+Liste[i]+#0;
          Result:=Result+#0;
        End;
      End;
Begin
  // Transformation des TStrings en Chaine à zéro terminal multiple.
  ChaineFROM:=ConcatTStrings(NomsFROM);
  ChaineTO  :=ConcatTStrings(NomsTO  );
  Titre     :=Titre+#0;

  // Préparation des options sous forme de 'flag' pour la fonction API
  fl:=0;
  If oFOF_MULTIDESTFILES    In Options Then Inc(fl,FOF_MULTIDESTFILES   );
  If oFOF_CONFIRMMOUSE      In Options Then Inc(fl,FOF_CONFIRMMOUSE     );
  If oFOF_SILENT            In Options Then Inc(fl,FOF_SILENT           );
  If oFOF_RENAMEONCOLLISION In Options Then Inc(fl,FOF_RENAMEONCOLLISION);
  If oFOF_NOCONFIRMATION    In Options Then Inc(fl,FOF_NOCONFIRMATION   );
  If oFOF_WANTMAPPINGHANDLE In Options Then Inc(fl,FOF_WANTMAPPINGHANDLE);
  If oFOF_ALLOWUNDO         In Options Then Inc(fl,FOF_ALLOWUNDO        );
  If oFOF_FILESONLY         In Options Then Inc(fl,FOF_FILESONLY        );
  If oFOF_SIMPLEPROGRESS    In Options Then Inc(fl,FOF_SIMPLEPROGRESS   );
  If oFOF_NOCONFIRMMKDIR    In Options Then Inc(fl,FOF_NOCONFIRMMKDIR   );
  If oFOF_NOERRORUI         In Options Then Inc(fl,FOF_NOERRORUI        );

  // Préparation de la structure TSHFileOPStruct qui contient tous les paramètres de la fonction
  // Il n'est pas utile de donner une fenêtre parent pour la progresion si elle est affichée. Dans ce
  // cas l'affichage de la progression n'est pas liée à votre application.
  // Vous remarquerez que ChaineFROM et ChaineTO ne sont pas converties en PChar, mais
  // on donne seulement l'adresse du premier caractère. Ceci est possible car les #0 ont été ajoutés
  // dans les chaines au préalable.
  // Le titre de la fenêtre n'est utilisé que si la progression est active et en mode simple,
  // c'est à dire sans l'option oFOF_SILENT et avec l'option oFOF_SIMPLEPROGRESS
  With Info Do
  Begin
    Wnd                   :=0;                // Handle de la fenêtre parent de la progression
    wFunc                 :=Operation;        // Type d'opération
    pFrom                 :=@ChaineFROM[1];   // Noms de fichiers en entrée
    pTo                   :=@ChaineTO  [1];   // Noms de fichiers en sortie
    fFlags                :=fl;               // Options
    fAnyOperationsAborted :=False;            // Code de retour
    hNameMappings         :=Nil;              // Mapping de retour des opérations effectuées
    lpszProgressTitle     :=@Titre[1];        // Tire de la fenêtre de progression
  End;
  Result:=Not Boolean(ShFileOperation(Info)) And Not Info.fAnyOperationsAborted;
End;

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2003 Bruno Guérangé. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.