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 :

Erreur avec une fonction créée


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2009
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 67
    Par défaut Erreur avec une fonction créée
    Bonjour à tous !

    Une p'tite question pour la forme ! Toujours sur mon projet, je souhaite supprimer un dossier qui contient des sous-dossiers, fichiers... Pour cela, j'ai une fonction qui me permet de faire ce que je souhaite mais malheureusement encore un petit hic:

    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
    Function Deltree(sDir : String) : Boolean;
    var
         iIndex    : Integer;
         SearchRec : TSearchRec;
         sFileName : String;
    begin
         //Result := False;
         sDir := sDir + '\*.*';
         iIndex := FindFirst(sDir, faAnyFile, SearchRec);
         while iIndex = 0 do
         begin
              sFileName := ExtractFileDir(sDir)+'\'+SearchRec.Name;
              if SearchRec.Attr = faDirectory then
              begin
                   if (SearchRec.Name <> '' ) and
                             (SearchRec.Name <> '.') and
                             (SearchRec.Name <> '..') then
                        Deltree(sFileName);
              end else begin
                   if SearchRec.Attr <> faArchive then
                        FileSetAttr(sFileName, faArchive);
                   DeleteFile(sFileName);
              end;
              iIndex := FindNext(SearchRec);
         end;
         FindClose(SearchRec);
         RemoveDir(ExtractFileDir(sDir));
         Result := True;
    end;

    Lorsque j'appuie sur le speedbutton, la fonction est appelée, donc:
    J'obtiens un message d'erreur:
    [Erreur] Unit1.pas(51): Déclaration forward ou external non satisfaite : 'TForm1.Deltree'

    Qu'est-ce qu'il y a d'oublié ?

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 931
    Billets dans le blog
    6
    Par défaut
    Tu as dû déclarer la fonction DelTree dans la déclaration de type de TForm1.

    Or tu la codes comme une procédure isolée, non méthode d'objet.

    Il suffit de corriger en sortant la déclaration de DelTree de TForm1, ou en préfixant comme ceci son implémentation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Function TForm1.Deltree(sDir : String) : Boolean;
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Membre Expert
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 288
    Par défaut
    Bonjour,

    Regarde pour des idées :

    http://delphi.about.com/cs/adptips19...ltip1199_2.htm

    @+

  4. #4
    Membre confirmé
    Inscrit en
    Novembre 2009
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 67
    Par défaut
    Merci Droïde Système7 pour ton lien

    Aaahhh d'accord... Je viens de changer mais sur le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Function TForm1.Deltree(sDir : String) : Boolean;
    J'ai un message d'erreur '=' attendu mais '(' trouvé

  5. #5
    Membre Expert
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 288
    Par défaut
    Tourlourou était passé juste au dessus

    Bon... juste au dessus de cette ligne : tout est OK ?

  6. #6
    Membre confirmé
    Inscrit en
    Novembre 2009
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 67
    Par défaut
    Re,

    Je vois d'où vient mon erreur: je déclarais ma fonction comme les procédures dans les déclarations type au début du programme.

    Encore merci pour vos informations précieuses avec toujours autant de rapidité Super forum YEAHHH !!

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 582
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 582
    Par défaut
    Bonjour à toutes et à tous,

    @ ptitemeuh, tu dois avant tout tester si ton dossier existe, et ta fonction fonctionne très bien.

    Mon test :



    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
     
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    Uses Shellapi;
     
    Function Deltree(sDir : String) : Boolean;
    var
         iIndex    : Integer;
         SearchRec : TSearchRec;
         sFileName : String;
    begin
         //Result := False;
         sDir := sDir + '\*.*';
         iIndex := FindFirst(sDir, faAnyFile, SearchRec);
         while iIndex = 0 do
         begin
              sFileName := ExtractFileDir(sDir)+'\'+SearchRec.Name;
              if SearchRec.Attr = faDirectory then
              begin
                   if (SearchRec.Name <> '' ) and
                             (SearchRec.Name <> '.') and
                             (SearchRec.Name <> '..') then
                        Deltree(sFileName);
              end else begin
                   if SearchRec.Attr <> faArchive then
                        FileSetAttr(sFileName, faArchive);
                   DeleteFile(sFileName);
              end;
              iIndex := FindNext(SearchRec);
         end;
         FindClose(SearchRec);
         RemoveDir(ExtractFileDir(sDir));
         Result := True;
    end;
    Utilisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    if not DirectoryExists('C:\Data\Delphi\Effacer dossier\test') then exit else deltree('C:\Data\Delphi\Effacer dossier\test');
    end;
    Then exit ou showmessage('Ce dossier n''existe pas !');

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    if not DirectoryExists('C:\Data\Delphi\Effacer dossier\test') then begin
    showmessage('Ce dossier n''existe pas !');
    exit
    end
    else deltree('C:\Data\Delphi\Effacer dossier\test');
     
    end;
    @+,

    Cincap

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Erreur avec une fonction
    Par nO_life dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 20/08/2008, 22h39
  2. Probleme avec une fonction Erreur : undefined symbol
    Par hassenman dans le forum C++Builder
    Réponses: 4
    Dernier message: 03/06/2008, 16h55
  3. erreur de linkage avec une fonction extern
    Par ali.ensi dans le forum C
    Réponses: 5
    Dernier message: 12/03/2008, 23h23
  4. #Erreur dans une requête avec une fonction personnalisée
    Par pguiheu dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 04/07/2006, 15h45
  5. Erreur sur une fonction avec des paramètres
    Par Elois dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 05/05/2004, 21h00

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