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 :

Transtypage dynamique en ayant le nom de classe en string?


Sujet :

Langage Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2002
    Messages : 109
    Points : 71
    Points
    71
    Par défaut Transtypage dynamique en ayant le nom de classe en string?
    Bonjour,

    Voici mon problème:

    Ma classe de base est TDocument.
    J'ai plusieurs sous-classes de TDocument (TDoc1, TDoc2, etc).

    J'avais déjà demandé comment faire pour appeler des méthodes de façon dynamique est ça fonctionne bien comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    TMethod(Methode).Code := 
    TDocument(lstItem.Data).MethodAddress('ma_methode');
     
    if (Assigned(Methode)) then
       strTemp := Methode;
    Ça fonctionne bien mais la méthode doit être dans la classe de base. J'aimerais modifier mon code afin d'être en mesure d'appeler dynamiquement les méthodes en fonction de la sous-classe.

    En clair, dans le code ci-dessous, j'aimerais changer le TDocument pour le nom de la sous-classe (j'ai cette information dans une table, comme je l'avais pour le nom de la méthode).

    Est-ce possible?

    Merci!

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 859
    Points : 11 307
    Points
    11 307
    Billets dans le blog
    6
    Par défaut
    pê qqch style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if TObject(lstItem.Data).ClassName='TMyClass' then p:=TMyClass(lstItem.Data).MethodAddress('MaMethode')
    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
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 429
    Points : 5 836
    Points
    5 836
    Par défaut
    salut

    exemple si ton document n'est pas instancié

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    procedure TForm1.Button1Click(Sender: TObject);
    var 
       MetaClass : TPersistentClass;
       ComponentMetaClass : TComponentClass;
       ADoc: TComponent;
    begin
      MetaClass := FindClass( 'TDoc1');
      ComponentMetaClass := TComponentClass( MetaClass );
      ADoc := ComponentMetaClass.Create( self );
      (ADoc as TDocument).Show;
    end;
    elle peut s'écrire en une ligne de code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TDocument(TComponentClass( FindClass( 'TDoc1' ) ).Create( Self )).Show;
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  4. #4
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    euhhh je suis peut etre a l'ouest, mais ce que tu recherche n'est pas le principe des methodes virtual ?

Discussions similaires

  1. css et noms de classe dynamiques ?
    Par tintin72 dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 22/11/2013, 08h32
  2. [AC-97] Exécuter une procédure ayant un nom dynamique
    Par samuelsiffert dans le forum VBA Access
    Réponses: 3
    Dernier message: 20/01/2011, 09h54
  3. Réponses: 1
    Dernier message: 25/11/2007, 12h28
  4. Réponses: 4
    Dernier message: 18/01/2007, 05h46
  5. Réponses: 4
    Dernier message: 09/03/2005, 11h13

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