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 :

Convertir STRING --> Type PROCEDURE


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 10
    Par défaut Convertir STRING --> Type PROCEDURE
    Bonjour,

    Je cherche des solutions à un problème.

    Dans une classe, j'ai des attributs privés (attr1, attr2) et j'utilise des property en tant que getters et setters. En parsant un fichier XML, je récupère des STRING qui sont le nom des attributs de ma classe. En faisant une manipulation, j'ai ainsi le nom de la procedure associée à chaque attribut mais je l'est ai en STRING. Et il n'est pas possible de faire appel alors à ces procédures!!! Puisque un est de type procedure alors que moi j'ai un type string. Y a t il un moyen de faire une conversion de type dans ce cas.

    En résumé, comment peut on appeler une procédure dont on a juste le nom en String ??

    Ca serait sympa si quelqu'un avait une soultion pour moi... Merci

  2. #2
    Membre chevronné
    Profil pro
    xxxxxxxxxxx
    Inscrit en
    Juin 2004
    Messages
    308
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : xxxxxxxxxxx

    Informations forums :
    Inscription : Juin 2004
    Messages : 308
    Par défaut
    Bonjour,

    Je te suggère de jeter un oeil à l'unité typinfo.pas, et notamment à la fonction GetMethodProp...

    Bon courage.

  3. #3
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    Ce que tu cherche a faire c'est la base RTTI.
    Une petite recherche sur ce mot clef t'ouvrira certaines portes ...

    Par contre, je prefere personelement associer un code a chaques procedures/property et utiliser ce code.

    A la limite, tu peux aussi utiliser des strings ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Procedure ExecuteProcedure(ProcName : String);
    Begin
    if ProcName = "Proc1" then Proc1;
    [...]
    End;
    Astuce pour coder un case sur des chaines :
    Tu peux utiliser un case sur les ID d'une TStringListe au prealablement remplit des differentes chaines possible a tester.

    Ne pas oublier de faire un lowerCase sur la partie gauche et Droite du tests ... a moins que tu ne desire conserver le respect des majuscules.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 10
    Par défaut
    Ouais mais dans ton cas la, je rajoute autant de cas qu'il y a de chaine, ce qui ne m'interesse pas!
    La je regarde les RTTI ouai, avec la méthode donnée dans la 1ere réponse...
    Je fais des essais pour voir ce que ca donne. Je reviens par ici pour dire les résultats. Si qlq1 a d'autres idées, je suis preneur..

    a + tard

  5. #5
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    Citation Envoyé par l'elu
    Ouais mais dans ton cas la, je rajoute autant de cas qu'il y a de chaine, ce qui ne m'interesse pas!
    Par curiosité : en quoi ca gene ?

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 10
    Par défaut
    Alors en fait,

    Je récupère des chaines dans un fichier XML (monAttrtexte). Comme je vous l'indique, ces chaines sont le nom (en chaine) d'attribut appartenant à une des mes classes (monAttrib). A partir de la, j'ai une valeur à mettre dans l'attribut possédant ce nom.
    Donc j'ai besoin de chopper mon attribut a partir de son nom en string.
    Avec une methode pour accéder a mes attributs privés (FmonAttr), il me suffit d'ajouter un F a ma chaine du nom monAttrtexte et je le nom de ma methode d'accession a l'attribut. Reste maintenant a manipuler cette methode pour affecter la valeur a l'attribut!!

    Voila exacteemnt ce que j ai a faire...

  7. #7
    Membre Expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 568
    Par défaut
    Si les procédures ont toutes la même signature (même paramètres dans le même ordre), il est possible de créer simplement un conteneur indexé par le nom des procédures.
    Ce qui t'évitera de passer par les TypInfo et autres joyeusetés.

    Précise ton besoin.

    cdlt

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  8. #8
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    Citation Envoyé par e-ric
    Si les procédures ont toutes la même signature (même paramètres dans le même ordre), il est possible de créer simplement un conteneur indexé par le nom des procédures.
    ou d'utiliser les dispInterfaces .....
    D'ailleur on peut meme s'en servir avec des fonctions de parametres differents.

    Citation Envoyé par e-ric
    Ce qui t'évitera de passer par les TypInfo et autres joyeusetés.
    +1
    Disons que avant de chercher a utiliser les rtti, je chercherais si ya pas moyens moins hard.
    Si je peux eviter les rtti, je m'en porte pas plus mal

    Citation Envoyé par e-ric
    Précise ton besoin.
    ++1

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

Discussions similaires

  1. convertir du type string au type double
    Par nafroutabs dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 15/09/2008, 10h27
  2. convertir un tableau de type string en type double
    Par saraenim dans le forum Windows Forms
    Réponses: 8
    Dernier message: 12/05/2008, 15h45
  3. Réponses: 2
    Dernier message: 19/05/2007, 20h51
  4. Conversion string -> type procedure
    Par ludovic tambour dans le forum Langage
    Réponses: 5
    Dernier message: 11/05/2005, 19h53
  5. Convertir un string en type property ou object
    Par bencot dans le forum Langage
    Réponses: 2
    Dernier message: 20/11/2004, 20h18

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