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 :

[POO] Passer en paramètre à un objet une fonction de callback


Sujet :

Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 116
    Points : 112
    Points
    112
    Par défaut [POO] Passer en paramètre à un objet une fonction de callback
    Bonjor à tous,

    voila, depuis un classe j'instancie un objet que je fais travailler sur des données, j'aimerai pouvoir passer en paramètre à cet objet le nom de la méthode qui doit être appelée en fin de traitement, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
       callback := string;
    begin
       callback := 'TForm1.MontrerResultat';
       MonObjet := TMonObjet.create();
       MonObjet.Traitement(callback);
    end;
    Ainsi, quand l'objet MonObjet a fini d'executer sa méthode Traitement, il appelle la méthode donnée en paramètre callback,

    je ne vois pas du tout comment procéder,

    merci à vous de m'éclairer sur le sujet,


    Fred

  2. #2
    Membre expérimenté
    Avatar de Bloon
    Homme Profil pro
    Consultant Freelance
    Inscrit en
    Avril 2002
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant Freelance
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2002
    Messages : 467
    Points : 1 339
    Points
    1 339
    Par défaut
    Il y a plusieurs façons de faire, la plus propre est la suivante :

    1. Créer un type qui représente la fonction de callback :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    type
      TCallBack = procedure(s : string) of object; // of object : car on veut que notre fonction callback soit une méthode
    2. Dans la fenêtre, déclarer une méthode qui fera office de fonction callback :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      TForm1 = class(TForm)
      ...
      private
        procedure myCallback(s : string);
      ...
      end;
    3. Dans la classe, déclarer une propriété qui représentera la fonction callback à appeler :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      TMyClass = class
      public
        callBack : TCallBack;
        procedure doo;
      end;
    4. Il n'y a plus qu'à utiliser tout ç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
    { TForm1 }
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      with TMyClass.Create do
      try
        callBack := myCallBack;
        doo;
      finally
        Free;
      end;
    end;
    
    procedure TForm1.myCallback(s: string);
    begin
      showMessage('TForm1.myCallback' + sLineBreak + s);
    end;
    
    { TMyClass }
    
    procedure TMyClass.doo;
    begin
      showMessage('dans doo...');
      // Appel de la fonction callback (si elle est définie) :
      if assigned(callBack) then
        callBack('je suis TMyClass');end;
    Bloon
    A lire : Les règles du club
    Delphi : La FAQ - Articles

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 116
    Points : 112
    Points
    112
    Par défaut
    Merci beaucoup pour ta réponse très précise

    je vais essayer ça au plus vite !

  4. #4
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    un exemple

    1. définir le type de la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TObjetFunctionType = function( const SValeur : String ) : Boolean of object;
    2. Définir tes fonctions dans la classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     TMaForm = class( Form )
      ...
      Function MaFonction1( const SValeur : String ) : Boolean;
      Function MaFonction2( const SValeur : String ) : Boolean;
      Procedure MaFonctionAvecCallBack( MaFonction: TObjetFunctionType);
      end;
    3. Implémenter MaFonction1 et MaFonction2
    4. Utilisation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TMaForm.UneFonction()
    begin
      MaFonctionAvecCallBack( Fonction1 );
    end;
    5. Implémentation de la fonction utilisant le callback
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TMaForm.MaFonctionnAvecCallBack( MaFonction: TObjetFunctionType);
    var
      MonBool: Boolean;
    begin
     ...
      MonBool := MaFonction( 'hop' );
     ...
    end;
    Edit: trop tard ...
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 116
    Points : 112
    Points
    112
    Par défaut
    Merci bloon, j'ai adapté à mon projet et cela marche nickel !

    Merci TicTacToe

    Longue vie à ce forum et à ses contributeurs de qualité


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

Discussions similaires

  1. Réponses: 3
    Dernier message: 28/11/2005, 12h15
  2. Réponses: 1
    Dernier message: 18/11/2005, 11h38
  3. Passer le résultat (tableau) d'une fonction
    Par coyote90 dans le forum Access
    Réponses: 3
    Dernier message: 10/11/2005, 19h56
  4. Réponses: 5
    Dernier message: 09/02/2005, 18h50
  5. passer FILE* en argument d une fonction
    Par Monsieur_Manu dans le forum C
    Réponses: 9
    Dernier message: 10/04/2003, 17h56

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