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

C++Builder Discussion :

Classe et instanciation de composants au Runtime


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Février 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 11
    Par défaut Classe et instanciation de composants au Runtime
    Bonjour,

    Je n'ai plus fait de C++ depuis longtemps, et je bute depuis des heures sur un problème qui doit être assez simple :

    J'ai créé une classe qui devra pouvoir instancier des objets visuels lors de l'execution.

    J'utilise donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     TLabel *MonLabel=new TLabel(NomduControleParent);
     MonLabel->Parent=NomduControleParent;
    Mon problème étant que je ne parviens pas à utiliser "Form1" comme nom de contrôle parent... ( "Undefined Symbol "Form1" ")

    Pourtant la classe figure dans la même fiche que Form1 . Je pensais que la portée ce contrôle était publique, non ?

    Par contre, si j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     TLabel *MonLabel=new TLabel(FindControl(Form1));
     MonLabel->Parent=FindControl(Form1);
    
            //Edité suite au Post de bakaneko

    Alors, je n'ai pas de message d'erreur (mais mon label ne s'affiche tout de même pas... )



    Merci d'avance.
    Merci de bien vouloir m'éclairer sur ce problème de débutant

  2. #2
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par défaut
    Est-ce que tu peux utiliser this ou sinon je ne suis pas certain, j'ai pas BCB ici :-( la classe n'est pas TForm1?

  3. #3
    Membre Expert
    Avatar de bakaneko
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 268
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 268
    Par défaut
    Question :
    tu as fait quel genre de code précisement???

    Celui-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    TLabel *MonLabel=new TLabel(Form1);
    MonLabel->Parent=Form1;
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    TLabel *MonLabel=new TLabel("Form1");
    MonLabel->Parent="Form1";

  4. #4
    Membre habitué
    Inscrit en
    Février 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 11
    Par défaut
    Merci pour cette réponse

    Malheureusement, non , je ne peux pas utiliser "this" car je dois l'assigner à un objet visuel de type TWinControl .

    J'aurais en fait voulu que ce label, bien que faisant partie de l'objet, soit affiché dans un TWinControl externe à l'objet.

    A moins que la seule solution pour afficher un objet visuel depuis une classe personnalisée soit obligatoirement de dériver la classe entière d'un TWinControl ?

  5. #5
    Membre habitué
    Inscrit en
    Février 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 11
    Par défaut
    Bakaneko , j'ai tenté les deux. mais je présume que le deuxieme est incorrect.

    Enfin...le premier aussi apparemment

    Je viens de remarquer l'erreur d'ajout des guillemets lors de la transposition du code sur le forum, mais c'est dû à l'enneverment

    En fait ce que je n'ai pas précisé c'est que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    TLabel *MonLabel=new TLabel(Form1);
    MonLabel->Parent=Form1;
    fonctionne parfaitement lorsque je l'utilise en dehors de ma classe.

  6. #6
    Membre habitué
    Inscrit en
    Février 2004
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 11
    Par défaut
    Eh bien je savais que c'était une erreur simple et vraiment stupide...


    J'ai déclaré mes classes à la suite des classes générées automatiquement afin de faire un code "propre".

    Je savais qu'il n'y avait pas à déclarer à proprement parler Form1 puisque c'est déjà le cas, mais sachant qu'il l'est dans le fichier .CPP, il fallait simplement s'assurer de mettre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    extern PACKAGE TForm1 *Form1;
    avant la déclaration de classe perso....

    Et une après midi de perdue pour une erreur ridicule, une !

    Ps : merci d'avoir tenté de m'aider.

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

Discussions similaires

  1. Accéder à une variable d'une classe déjà instanciée
    Par gbonnet dans le forum Services Web
    Réponses: 1
    Dernier message: 03/04/2008, 14h01
  2. Netbeans 6.0 - GlassFishV2 : Classe Main du client invisible au runtime
    Par davisumboy dans le forum Glassfish et Payara
    Réponses: 6
    Dernier message: 21/02/2008, 18h31
  3. Réponses: 3
    Dernier message: 15/01/2008, 17h10
  4. Methode pour recuperer la classe qui instancie une JFrame
    Par ceres02 dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 07/08/2007, 15h47
  5. VB.NET : utilisation de classe sans instanciation
    Par mexong dans le forum Windows Forms
    Réponses: 2
    Dernier message: 10/10/2006, 11h00

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