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 :

TComponent: vérifier l'existence d'une propriété [FAQ]


Sujet :

Delphi

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Par défaut TComponent: vérifier l'existence d'une propriété
    Bonjour ,

    Je souhaite détecter si on TComponent, possède la propriété 'Caption', et ensuite si c'est positif modifier mon caption.
    J'utilise FieldAddress qui est censé le faire, mais ca ne marche pas

    Voici le code que j'ai testé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var
       s:shortstring;
       pc:^TCaption;
    begin
         s := 'Caption';
         pc := Button1.FieldAddress( s );
    pc est systématiquement nil.
    J'ai essayé auparavant, pc : Pointer, c'est identique.

    si quelqu'un a une solution
    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 ;-)

  2. #2
    Membre Expert Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Par défaut
    si tu veut lire la valeur de caption (meme s'il n'existe pas) passé par les message de windows
    on plus TControl l'ancetre des composant ayant caption, alors pourqoi pas testé si c'est un TControl
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if control is TControl then p:=TControl(control).caption
    j'espére que j'ai pas dis de bétise

  3. #3
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Bonjour,

    Le problème vient probablement du fait que le caption n'est pas une variable mais une property avec Get/SetText comme methode read et write.

  4. #4
    Membre Expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Par défaut
    Dans ce cas il faut utiliser ce qu'il faut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function GetCaption(AComponent: TComponent): TCaption;
    begin
      Result := TCaption(GetObjectProp(AComponent, 'Caption', TCaption));
    end;
    Au besoin, ajouter uses TypInfo; en haut de projet.

    @++

  5. #5
    Membre éprouvé
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Par défaut
    Merci pour vos réponse

    @Edam
    Je n'ai pas trouvé de classe commune le plus en amont possible ayant la propriété Caption publiée.
    Mais c'est effectivement le 1er réflexe à avoir

    @Graffito, c'est peu être le problème. Mais L'aide de Delphi spécifie que cela permet de récupérer un pointeur sur un champ publié.
    Caption est publié pour un bouton...

    @Eric Sigoillot
    J'ai déjà croisé cette fonction dans mes recherches, merci donc pour l'utilisation. par contre, elle semble ne pas convenir dans mon cas, car le 3eme parametre attend un TClass descedant de TObject.

    Or, TCaption n'est pas un class of TObject...

    ca ne marche donc pas (viloation d'accès, si on place TCaption en 3eme param...).
    J'ai essayé par contre avec la propriété 'Font', cela fonctionne parfaitement car TFont descend de TObject.

    donc pas résolu
    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 ;-)

  6. #6
    Expert confirmé

    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 : 35
    Localisation : Suisse

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Par défaut
    Utilise IsPublishedProp pour savoir si la propriété existe, et GetPropValue pour en récupérer la valeur.
    pour de plus amples détails
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  7. #7
    Membre éprouvé
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Par défaut
    sjrd MERCI

    tu m'as mis sur la bonne voie.

    En fait, une seule ligne suffit pour arriver à mes fins:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    try SetStrProp( Button1, 'Caption', 'toto' ); except end;
    plus généralement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    try SetStrProp( UnComposant, 'UnePropriété string', UneChaine );
    Pour infos, cela se décline dans tous les types existants:
    SetObjectProp()... par exemple
    avec tous les get qui vont bien -> CTRL-CLICK sur SetStrProp et la liste est dans le source Delphi.

    Donc merci encore !
    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 ;-)

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

Discussions similaires

  1. [vbscript] vérifier l'existence d'une clé de registre
    Par xinu1.1 dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 16/06/2006, 10h50
  2. Vérifier l'existence d'une valeur?
    Par ashen dans le forum Access
    Réponses: 8
    Dernier message: 19/05/2006, 17h10
  3. Vérifier l'existence d'une table SQL
    Par rock_thunder159 dans le forum C++Builder
    Réponses: 5
    Dernier message: 16/02/2006, 13h41
  4. vérifier l'existance d'une table dans une base de donnée
    Par zidenne dans le forum Bases de données
    Réponses: 1
    Dernier message: 31/10/2005, 11h39
  5. Réponses: 3
    Dernier message: 05/04/2005, 14h36

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