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 :

TIdFTP, pointeur de méthode et procédure normale


Sujet :

Delphi

  1. #1
    Futur Membre du Club
    Inscrit en
    Novembre 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 4
    Points : 6
    Points
    6
    Par défaut TIdFTP, pointeur de méthode et procédure normale
    J'utilise un TIdFTP que je créé à la volée :

    IdFTP:=TIdFTP.Create(ParentObject);
    with IdFTP do begin
    ...
    end;

    Je veux mettre du code dans le OnWork pour faire avancer une barre de progression. J'ai donc créer une procédure :

    procedure FTPOnWork(Sender:TObject;AWorkMode:TWorkMode; const AWorkCount:integer);
    begin
    ...
    end;

    J'arrive pas à lier cette procédure à mon objet IdFTP :
    OnWork:=FTPOnWork;
    Erreur de compil : pointeur de méthode et procédure normale.

    et là je suis au bout de mes compétances...

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Points : 754
    Points
    754
    Par défaut
    Bonjour Marc.

    Ne paniques pas ce n'est pas compliqué.
    La différence entre une procedure normale et une méthode tient au fait qu'une méthode est une procédure contenue dans une classe.

    Ceci étant précisé, on comprend l'erreur:
    -> le compilo attend une méthode et il reçoit une procédure.

    Cela se corrige par exemple par:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.FTPOnWork(Sender:TObject;AWorkMode:TWorkMode; const AWorkCount:integer);
    begin
    ...
    end;
    Ici on utilise TForm1 mais la méthode peut être encapsulée dans sa propre classe distincte.

    @+

  3. #3
    Futur Membre du Club
    Inscrit en
    Novembre 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 4
    Points : 6
    Points
    6
    Par défaut
    Merci pour la réponse rapide :-)

    Le pb est que je n'ai pas de form.
    J'ai une unité de procédures et functions FTP utilisées par diférentes forms :

    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
     
    unit UtilFTP;
     
    interface
     
    uses IdFTP,IdFTPCommon,IdComponent;
     
    FTPDownload(sDossierWeb,sFichierWeb,sHost,sUser,sPassW,sFichier:string; bProgress:boolean; ParentObject:TComponent): string;
     
    implementation
     
    function FTPDownload(sDossierWeb,sFichierWeb,sHost,sUser,sPassW,sFichier:string; bProgress:boolean; ParentObject:TComponent): string;
    var
      IdFTP: TIdFTP;
      procedure FTPOnWork(Sender:TObject;AWorkMode:TWorkMode; const AWorkCount:integer);
      begin
        ...
      end;
    begin
      result:='';
     
      IdFTP:=TIdFTP.Create(ParentObject);
      with IdFTP do begin
        ...
        OnWork:=FTPOnWork;//Ici, ça marche pas.
        Get(sFichierWeb,sFichier,true);
      end;
    end;
    Je souhaite que ma fonction FTPDownload encapsule tous le code FTP.
    Quelle est la déclaration correcte de ma méthode FTPOnWork?
    Comment l'assigner à IdFTP.OnWork? (ou le contraire ;-))

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Points : 754
    Points
    754
    Par défaut
    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
     
    unit UtilFTP;
     
    interface
     
    uses IdFTP,IdFTPCommon,IdComponent;
     
     TMyClass = Class(TObject)
     private
     protected
       function FTPDownload(sDossierWeb,sFichierWeb,sHost,sUser,sPassW,sFichier:string; bProgress:boolean; ParentObject:TComponent): string; 
     public    
     end;
     
    var
     MyClass: TMyclass;
     
    implementation
     
    function TMyCLass.FTPDownload(sDossierWeb,sFichierWeb,sHost,sUser,sPassW,sFichier:string; bProgress:boolean; ParentObject:TComponent): string;
    var
      IdFTP: TIdFTP;
     
      procedure FTPOnWork(Sender:TObject;AWorkMode:TWorkMode; const AWorkCount:integer);
      begin
        ...
      end;
    begin
      result:='';
     
      IdFTP:=TIdFTP.Create(ParentObject);
      with IdFTP do begin
        ...
        OnWork:=FTPOnWork;//Ici, ça marche pas.
        Get(sFichierWeb,sFichier,true);
      end;
    end;
    Et ensuite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      MyClass := TMyclass.Create(nil);
               IdFTP.OnWork := MyClass.FTPOnWork;
    @+

  5. #5
    Futur Membre du Club
    Inscrit en
    Novembre 2004
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 4
    Points : 6
    Points
    6
    Par défaut
    Ca marche, merci

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

Discussions similaires

  1. Pointeur de méthode managée
    Par pierre.chatelier dans le forum C++/CLI
    Réponses: 2
    Dernier message: 21/09/2007, 09h36
  2. Pointeur de Méthode et RTTI
    Par ShaiLeTroll dans le forum Delphi
    Réponses: 6
    Dernier message: 16/01/2007, 16h04
  3. [C++] Tableau de pointeurs de méthode ?
    Par Castagnems dans le forum C++
    Réponses: 13
    Dernier message: 15/05/2006, 16h45
  4. Pointeur de méthode
    Par John Fullspeed dans le forum Langage
    Réponses: 3
    Dernier message: 24/09/2004, 16h04
  5. Réponses: 10
    Dernier message: 26/08/2004, 13h06

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