Accueil
Rechercher:
sur developpez.com sur les forums
Forums | Tutoriels | F.A.Q's | Participez | Hébergement | Contacts
Club Emploi Blogs   TV   Dév. Web PHP XML Python Autres 2D-3D-Jeux Sécurité Windows Linux PC Mac
Accueil Conception Java DotNET Visual Basic  C  C++ Delphi MS-Office SQL & SGBD Oracle  4D  Business Intelligence
FORUMS DELPHI F.A.Q DELPHI TUTORIELS DELPHI LIVRES COMPOSANTS SOURCES DEFI TELECHARGEZ DELPHI TV
Nono40.developpez.com
Le petit coin du web de Nono40
SOURCES ARTICLES NONOVISU ACCUEIL NOUVELLES
Retour à l'accueil
19 - SHFILEOPERATION

PRÉSENTATION : Programme de présentation de la fonction API ShFileOperation()
ZIP : Téléchargez le zip : miroir 1 , miroir 2 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 oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © 2003 Bruno Guérangé. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD.

Responsables bénévoles de la rubrique Delphi : Nono40 et Pedro - Contacter par EMail :
Vos questions techniques : forum d'entraide Delphi - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Copyright © 2000-2008 www.developpez.com - Legal informations.