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

Composants VCL Delphi Discussion :

Quel est l'équivalent de Findcomponent pour les Forms ?


Sujet :

Composants VCL Delphi

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2002
    Messages : 245
    Points : 154
    Points
    154
    Par défaut Quel est l'équivalent de Findcomponent pour les Forms ?
    Bonjour,

    Je cherche une fonction équivalente à Findcomponent qui fonctionne pour les Forms.
    J'ai des forms Form0, form1, form2, etc...
    Selon une variable i, je fais quelques traitement sur la form Form"i".
    Et ça ne m'interesse pas de faire une suite de if, ou de procéder avec un Case.
    Merci.

  2. #2
    Expert éminent sénior

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Points : 19 101
    Points
    19 101
    Par défaut
    Essaye sur le composant Application.
    Delphi :
    La F.A.Q. , 877 réponses à vos questions !
    264 sources à consulter/télécharger !

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2002
    Messages : 245
    Points : 154
    Points
    154
    Par défaut
    Citation Envoyé par Nono40
    Essaye sur le composant Application.
    Tu peux expliquer??
    Merci.

  4. #4
    Membre émérite
    Avatar de skywaukers
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2005
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 216
    Points : 2 303
    Points
    2 303
    Par défaut
    bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.FindComponent( 'Form0');
    @++
    Dany

  5. #5
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2002
    Messages : 245
    Points : 154
    Points
    154
    Par défaut
    Toujours avec FindComponent, pourquoi quand je change de form, j'ai un access violation??
    Je m'explique: Je suis dans la form0, si je met
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (Findcomponent('Form'+IntToStr(i)+'.Label1') as TLabel).Visible:=True;
    J'ai un access violation, même si je sais que ce composant existe sur cette form.
    Une suggestion?

    Merci.

  6. #6
    DMO
    DMO est déconnecté
    Membre averti
    Avatar de DMO
    Profil pro
    Inscrit en
    Février 2004
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 290
    Points : 343
    Points
    343
    Par défaut
    Un exemple d'utilisation de FindComponent existe dans la

    http://delphi.developpez.com/faq/?pa...#findcomponent

    Je te suggère d'aller voir.

    Si tu ne comprends toujours pas, essaye sur 'FindComponent'
    « La simplicité est la sophistication suprême » (Léonard de Vinci)

  7. #7
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2002
    Messages : 245
    Points : 154
    Points
    154
    Par défaut
    Citation Envoyé par DMO
    Un exemple d'utilisation de FindComponent existe dans la

    http://delphi.developpez.com/faq/?pa...#findcomponent

    Je te suggère d'aller voir.

    Si tu ne comprends toujours pas, essaye sur 'FindComponent'
    Je crois que tu as mal compris ma question.
    Je sais comment utiliser findcomponent, dans le lien que tu as donné, si tu remarques on cherche des composants dans la même Form. Moi je cherche un composant qui appartient à une form différente.
    Je sais que ce composant existe, que cette form existe et qu'elle est créée.

  8. #8
    DMO
    DMO est déconnecté
    Membre averti
    Avatar de DMO
    Profil pro
    Inscrit en
    Février 2004
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 290
    Points : 343
    Points
    343
    Par défaut
    Non je crois avoir très bien compris. Je t'explique :
    Peu importe que le parent soit l'application, ou un autre TComponent.
    Tu remarqueras que dans la FAQ, le résultat de FindComponent est récupéré dans une variable et que cette variable est testée avant d'être utilisée.

    C'est exactement ce que tu dois faire pour éviter les Access Violation. Tu en as car tu utilises directement le résultat de FindComponent qui peut être potentiellement à Nil. C'est le cas pour toi. Donc au cas ou le résultat de FindComponent est Nil (fais 'as' plutot que le transtypage TClasse(...) dans la FAQ), tu n'utilises pas la variable, ou encore mieux tu leves une exceptions ou fais un assert. Ainsi cela t'aidera à mieux débugger ton application.

    Bon courage.
    « La simplicité est la sophistication suprême » (Léonard de Vinci)

  9. #9
    Membre du Club

    Inscrit en
    Juillet 2005
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 48
    Points : 58
    Points
    58
    Par défaut
    le composant nommé Form1.Label1 existe sur la Form1 ?
    Ce ne serait pas plutot Label1 de la Form1 ?

  10. #10
    rsc
    rsc est déconnecté
    Membre éprouvé
    Avatar de rsc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 711
    Points : 918
    Points
    918
    Par défaut
    A mon avis, tu ne peux pas faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FindComponent ("Form1.Label1");
    mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Form1 .FindComponent ('Label1');
    d'où l'erreur : le composant n'est pas trouvé, le retour est nil, et un
    c'est le Access Viloation assuré
    Roland

  11. #11
    Expert éminent sénior

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Points : 19 101
    Points
    19 101
    Par défaut
    Citation Envoyé par Ben_Le_Cool
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (Findcomponent('Form'+IntToStr(i)+'.Label1') as TLabel).Visible:=True;
    Faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    (TForm(Application.Findcomponent('Form'+IntToStr(i))).FindComponent('Label1') as TLabel).Visible:=True;
    Delphi :
    La F.A.Q. , 877 réponses à vos questions !
    264 sources à consulter/télécharger !

  12. #12
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2002
    Messages : 245
    Points : 154
    Points
    154
    Par défaut
    Citation Envoyé par Nono40
    Citation Envoyé par Ben_Le_Cool
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (Findcomponent('Form'+IntToStr(i)+'.Label1') as TLabel).Visible:=True;
    Faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    (TForm(Application.Findcomponent('Form'+IntToStr(i))).FindComponent('Label1') as TLabel).Visible:=True;
    Merci bien Nono, ça marche très bien.

    Pour jouer aux exigeants, j'ai une autre question
    J'ai le même problème avec les procédures. Je veux appeler une procedure qui se trouve dans une autre form.
    Si je met ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (TForm(Application.Findcomponent('Form'+IntToStr(i))).MaProcedure;
    j'ai une erreur de compilation.
    Une astuce??
    Merci.

  13. #13
    Expert éminent sénior

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Points : 19 101
    Points
    19 101
    Par défaut
    Plus compliqué mais possible, deux solution :
    Tu crées un modèle de fiche et tes fiches doivent ensuite descendre de ce modèle plutot que du simple TForm. Dans ce modèle tu définie une méthode virtuelle que tu surcharges dans les fiches finales.

    Tu utilises RTTI pour obtenir l'adresse de la méthode :
    http://nono40.developpez.com/sources/source0086/
    Delphi :
    La F.A.Q. , 877 réponses à vos questions !
    264 sources à consulter/télécharger !

Discussions similaires

  1. Réponses: 7
    Dernier message: 20/05/2010, 17h04
  2. Réponses: 18
    Dernier message: 31/07/2007, 17h29
  3. Quel est l'index qui sert pour les For Each ?
    Par Nixar dans le forum VB.NET
    Réponses: 5
    Dernier message: 04/06/2007, 08h23
  4. Réponses: 26
    Dernier message: 06/01/2007, 13h11
  5. Réponses: 4
    Dernier message: 21/09/2003, 15h50

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