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

Langage Delphi Discussion :

Récupérer le nom d'une méthode


Sujet :

Langage Delphi

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 32
    Points : 25
    Points
    25
    Par défaut Récupérer le nom d'une méthode
    Bonjour,

    Ayant créé un tableau à 2 dimensions contenant
    des pointeurs de méthodes, je souhaite parcourir ce
    tableau pour afficher le nom des méthodes présentes
    dans chaque cellule.

    Le but étant de générer un document avec
    la liste des actions du tableau pour vérification...

    Je pense qu'il existe une API exploitant les RTTI pour obtenir cela,
    mais laquelle ?

    merci

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 563
    Points : 25 165
    Points
    25 165
    Par défaut
    Si c'est des Méthodes dans des TObject, MethodAddress et MethodName devrait te plaire !
    Cela s'applique sur la classe contenant la méthodes, je te conseille de couplé cela avec un FindClass et RegisterClass !

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 32
    Points : 25
    Points
    25
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Si c'est des Méthodes dans des TObject, MethodAddress et MethodName devrait te plaire !
    Cela s'applique sur la classe contenant la méthodes, je te conseille de couplé cela avec un FindClass et RegisterClass !
    ce que je ne comprend pas, c'est que j'ai un pb de type :
    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
     
    type TACTIONS = array[1..4] of array[1..4] of function(): boolean of object;
     
     
    type
        TSample = class(TObject)
        private
            Actions : TACTIONS;
        public
     
            procedure Genere_map();
     
            function Creer_element() : boolean ;
            function Modifier_element() : boolean ;
            function Supprimer_element() : boolean ;
     
    end;
     
    ...
    procedure TSample.Genere_map();
    begin
        Actions[1][1] := Creer_element;
        ShowMessage( 'Action : ' +  MethodName( Creer_element) );
    end;
    cela ne compile pas : Types incompatibles : 'Boolean' et 'Pointer' sur
    l'appel de MethodeName.

    Pourquoi 'Creer_element' est typé en boolean ?

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 563
    Points : 25 165
    Points
    25 165
    Par défaut
    Il me semble que ces codes sont similaires
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Actions[1][1] := Creer_element;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Actions[1][1] := @Creer_element;
    Le Compilateur est assez malin pour se rendre compte que tu souhaite affecter une "function(): boolean of object" et non executer la fonction, ce qui t'a induit en erreur pour

    MethodName utilisant un simple Pointer, le compilateur ne rend pas @ implicite, il faut donc le faire soit-même !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        ShowMessage( 'Action : ' +  MethodName( @Creer_element) );

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 32
    Points : 25
    Points
    25
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        ShowMessage( 'Action : ' +  MethodName( @Creer_element) );
    Ca compile, mais Methodename me retourne une chaine vide
    J'ai pourtant ( je pense ) activé le RTTI avec :
    {$M+} {$TYPEINFO ON}

    Une piste ?

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 563
    Points : 25 165
    Points
    25 165
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    {$M+} 
    type
      TSample = class(TObject)
        ... 
      end;
    {$M-}
    Utilise un TPersistent sinon !

    {$M+} c'est pareil que {$TYPEINFO ON}
    {$M-} c'est pareil que {$TYPEINFO OFF}
    C'est soit la syntaxe courte soit verbeuse, pas besoin de mettre les deux !

    Dans le sujet Créer un jeu d'aventure textuel , j'avais proposé un petit moteur de jeu avec MethodAddress, tu devrais lire ce sujet !

  7. #7
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Il faut surtout que tes méthodes soient dans published et non dans public.

  8. #8
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 563
    Points : 25 165
    Points
    25 165
    Par défaut
    Tu as l'oeil SJRD !
    En même temps, penser à la directive {M+} mais oublier published , c'est Ballot !

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 32
    Points : 25
    Points
    25
    Par défaut
    Citation Envoyé par sjrd Voir le message
    Il faut surtout que tes méthodes soient dans published et non dans public.
    Merci !
    Tout fonctionne comme prévu...

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

Discussions similaires

  1. Récupérer le nom d'une classe et d'une méthode
    Par hanubis37 dans le forum Langages
    Réponses: 2
    Dernier message: 21/11/2014, 11h50
  2. récupérer le nom d'une méthode
    Par awalter1 dans le forum Général Python
    Réponses: 13
    Dernier message: 30/01/2012, 08h53
  3. [javascript]Récupérer le nom d'une image
    Par LE NEINDRE dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 18/10/2005, 13h56
  4. [Debutant] Récupérer le nom d'une image
    Par Djoul dans le forum Débuter
    Réponses: 4
    Dernier message: 30/05/2005, 09h52
  5. Récupérer le nom d'une base
    Par nic_moq dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 24/03/2004, 10h50

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