IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

Syntaxe sur un TJvSearchFiles


Sujet :

Delphi

  1. #1
    Membre régulier

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    536
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 536
    Points : 121
    Points
    121
    Par défaut Syntaxe sur un TJvSearchFiles
    Bonjour à tous

    Ici, un exemple de paramétrage en dynamique, et non à travers l'inspecteur d'objets.

    Là, je plante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    
    Function Thrd_Lister_Rep_Dyn ( lpParam : Pointer ) : LongWord ; stdcall ;
    Var
      JvSearch : TJvSearchFiles;
      i : integer;
      Options_Dir : TJvDirOption;
      Options_SearchType : TJvSearchOption;
      Ptr_Lst_F : ^TStringList;
      Ptr_Lst_Rep : ^TStringList;
      Options_Search : TJvSearchOption;
    
    begin
    
      Param_Listage_Rep.Nb_F := 0;
      Param_Listage_Rep.Nb_Rep := 0;
      Param_Listage_Rep.Surface := 0;
    
      if AnsiCompareText(Param_Listage_Rep.Masque_Rech, '') = 0 then
        begin
          Param_Listage_Rep.Err := 1; // Masque de recherche est une chaîne vide
          ExitThread(0);
          Exit;
        end;
    
      If DirectoryExists(Param_Listage_Rep.Rep_Cible) = False then
        begin
          Param_Listage_Rep.Err := 2; // Rep_Cible n'existe pas
          ExitThread(0);
          Exit;
        end;
    
      Param_Listage_Rep.Nb_F := 0;
      Param_Listage_Rep.Nb_Rep := 0;
      Param_Listage_Rep.Surface := 0;
    
      JvSearch := TJvSearchFiles.Create(Nil);
    
      // PARAMETRAGE DU JvSearchFiles ------------------
      JvSearch.FileParams.FileMask := Param_Listage_Rep.Masque_Rech;
      JvSearch.RootDirectory := Param_Listage_Rep.Rep_Cible;
    
    // Ici : le compilo ne laisse pas passer : 
      Options_SearchType :=  soAllowDuplicates OR soCheckRootDirValid OR soOwnerData OR soSearchDirs
                             OR soSearchFiles OR soIncludeSystemHiddenDirs OR soIncludeSystemHiddenFiles;
    
      if Param_Listage_Rep.Racine_Seule = True then
        begin
          JvSearch.DirOption := doExcludeSubDirs;
        end;
    
      JvSearch.Search;
    
      Param_Listage_Rep.Nb_F := JvSearch.TotalFiles;
      Param_Listage_Rep.Nb_Rep := JvSearch.TotalDirectories;
      Param_Listage_Rep.Surface := JvSearch.TotalFileSize;
    
      for i := 0 to JvSearch.TotalDirectories -1 do
        begin
          Param_Listage_Rep.Lst_R.Add(JvSearch.Directories.Strings[i]);
        end;
    
      for i := 0 to JvSearch.TotalFiles -1 do
        begin
          Param_Listage_Rep.Lst_F.Add(JvSearch.Files.Strings[i]);
        end;
    
      JvSearch.Free;
      ExitThread(0);
    
    end;
    Avec le JvSHFileOPertations, je peux m'y prendre comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    Procedure Appel_JvSHF;
    Var
      Jv_SHF : TJvSHFileOperation;
      Options_SHF : TJvSHFileOptions;
     
    begin
     
      Jv_SHF := TJvSHFileOperation.Create(Nil);
     
      // Include(Options,fofAllowUndo);    // Si activé, déplace ds la corbeille
      Include(Options_SHF,fofMultiDestFiles);
      Include(Options_SHF,fofNoConfirmation);
      Include(Options_SHF,fofNoConfirmMkDir);
      Include(Options_SHF,fofSilent);
      Include(Options_SHF,fofWantMappingHandle);
      Include(Options_SHF,fofNoErrorUI);
      Include(Options_SHF,fofRenameOnCollision);    // Désactivé
      Include(Options_SHF,fofNoRecursion);
      Include(Options_SHF,fofNoConnectedElements);
      Include(Options_SHF,fofNoRecurseParse);
      Include(Options_SHF,fofWantNukeWarning);
     
      Jv_SHF.Options := Options_SHF;
      Jv_SHF.SourceFiles.Add('D:\ALPHA3');
      ForceDirectories('D:\TEST\ALPHA');
      Jv_SHF.DestFiles.Add('D:\TEST\ALPHA');
     
      Jv_SHF.Operation := foCopy;
      Jv_SHF.Execute;
     
      Jv_SHF.Free;
     
    end;
    C'est le paramétrage du TJvSearchFiles qui me pose problème au niveau des options. Include ne passe pas.

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 694
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 694
    Points : 13 130
    Points
    13 130
    Par défaut
    Ca ira mieux avec le bon type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var
      Options_SearchType : TJvSearchOptions;
    
    Options_SearchType := [soAllowDuplicates, soCheckRootDirValid, soOwnerData, soSearchDirs, soSearchFiles, soIncludeSystemHiddenDirs, soIncludeSystemHiddenFiles];
    Puisqu'il n'y a aucune condition pour remplir cet ensemble, une constante irait aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    const
      Options_SearchType : TJvSearchOptions = [soAllowDuplicates, soCheckRootDirValid, soOwnerData, soSearchDirs, soSearchFiles, soIncludeSystemHiddenDirs, soIncludeSystemHiddenFiles];

    Dans ton remplissage de JvSHFileOPertations, il faudrait tout de même initialiser la variable sur un ensemble vide avant les Include :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Options_SHF := [];
    Include(Options_SHF, fofMultiDestFiles);
    ...

  3. #3
    Membre régulier

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    536
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 536
    Points : 121
    Points
    121
    Par défaut
    Bon sang !!

    Je corrige et donne le retour.

  4. #4
    Membre régulier

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    536
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 536
    Points : 121
    Points
    121
    Par défaut
    Bonjour :hello:

    Bon. Ca marche ! Sauf que le Thread ne me prend pas les répertoires... :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    Function Thrd_Lister_Rep_Dyn ( lpParam : Pointer ) : LongWord ; stdcall ;
    Var
      JvSearch : TJvSearchFiles;
      i : integer;
      Options_SearchType : TJvSearchOptions;
      Ptr_Lst_F : ^TStringList;
      Ptr_Lst_Rep : ^TStringList;
    
    begin
    
      Param_Listage_Rep.Nb_F := 0;
      Param_Listage_Rep.Nb_Rep := 0;
      Param_Listage_Rep.Surface := 0;
    
      if AnsiCompareText(Param_Listage_Rep.Masque_Rech, '') = 0 then
        begin
          Param_Listage_Rep.Err := 1; // Masque de recherche est une chaîne vide
          ExitThread(0);
          Exit;
        end;
    
      If DirectoryExists(Param_Listage_Rep.Rep_Cible) = False then
        begin
          Param_Listage_Rep.Err := 2; // Rep_Cible n'existe pas
          ExitThread(0);
          Exit;
        end;
    
      Param_Listage_Rep.Nb_F := 0;
      Param_Listage_Rep.Nb_Rep := 0;
      Param_Listage_Rep.Surface := 0;
    
      JvSearch := TJvSearchFiles.Create(Nil);
      // PARAMETRAGE DU JvSearchFiles ------------------
      JvSearch.FileParams.FileMask := Param_Listage_Rep.Masque_Rech;
      JvSearch.RootDirectory := Param_Listage_Rep.Rep_Cible;
      // MODIFIE SELON TES CONSEIL, ET CA FONCTIONNE
      Options_SearchType := [];
      Options_SearchType := [soAllowDuplicates, soCheckRootDirValid, soOwnerData, soSearchDirs, soSearchFiles, soIncludeSystemHiddenDirs, soIncludeSystemHiddenFiles];
    
      if Param_Listage_Rep.Racine_Seule = True then
        begin
          JvSearch.RecurseDepth := 0;
        end
      Else
        begin
          JvSearch.RecurseDepth := 1000;
          JvSearch.DirOption := doIncludeSubDirs;  // Là, le JvSearch n'en tient pas compte
        end;
    
      JvSearch.Search;
    
      Param_Listage_Rep.Nb_F := JvSearch.TotalFiles;
      Param_Listage_Rep.Nb_Rep := JvSearch.TotalDirectories;
      Param_Listage_Rep.Surface := JvSearch.TotalFileSize;
    
      for i := 0 to JvSearch.TotalDirectories -1 do
        begin
          Param_Listage_Rep.Lst_R.Add(JvSearch.Directories.Strings[i]);
        end;
    
      for i := 0 to JvSearch.TotalFiles -1 do
        begin
          Param_Listage_Rep.Lst_F.Add(JvSearch.Files.Strings[i]);
        end;
    
      JvSearch.Free;
      ExitThread(0);
    
    end;
    Il ne tient pas compte des sous-répertoires. Exactement comme si je mettais, ds la structure des paramètres :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      Param_Listage_Rep.Rep_Cible := 'd:\Alpha2';
      Param_Listage_Rep.Lst_F := @Lst_F;
      Param_Listage_Rep.Lst_R := @Lst_R;
      Param_Listage_Rep.Masque_Rech := '*';
      Param_Listage_Rep.Ptr_JvSearchF := Nil;
      Param_Listage_Rep.Racine_Seule := True;
    Voici l'inspecteur d'objets pour le JvSearchFiles appelé, cette fois, par l'une de mes routines (qui, elle a besoin de ce composant et ne le crée pas en dynamique) :



    Bizarre...

Discussions similaires

  1. [MySQL] Erreur de syntaxe sur requête
    Par winnie82 dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 21/03/2006, 13h51
  2. [MySQL] Erreur de syntaxe sur ma requête SELECT
    Par vincedjs dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 08/03/2006, 11h50
  3. [MySQL] Erreurs de syntaxe sur requêtes DELETE
    Par vincedjs dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 06/03/2006, 15h53
  4. Erreur de syntax sur JOIN
    Par helje dans le forum Requêtes
    Réponses: 2
    Dernier message: 05/03/2006, 17h36
  5. Erreur de syntaxe sur la création d'une vue.
    Par cgougeon dans le forum Installation
    Réponses: 3
    Dernier message: 09/09/2005, 11h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo