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 :

Déclaration d'une structure initialisée avec pointeur sur composant


Sujet :

C++Builder

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Juillet 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur validation
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2013
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Déclaration d'une structure initialisée avec pointeur sur composant
    Bonjour,

    Je souhaite déclarer un tableau de structure en global et pré-initialisé. Ce tableau me permettra de standardiser pas mal de mes fonctions.

    Le hic c'est que dans les variables d'initialisation il y a des pointeurs sur des composants des Forms (TLabel). Builder créé en premier ce tableau avant même la création des Forms elles-mêmes et par conséquent crash dès le lancement.

    Voilà un exemple de mon tableau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    typedef struct
    {
    	int VariableAddress;
    	AnsiString VariableName;
    	bool Read;
    	bool Write;
    	TLabel* VariableLabel;
    	AnsiString VariableText;
    	AnsiString VariableType;
    }TFormatTable;
     
    const TFormatTable Table [] = {
      {175, "Var1", false, false,Form1->Label1,"","Type1"},
      {177, "Var2", false, false,Form1->Label2,"","Type1"}
      };
    Est ce que quelqu'un sait comment faire pour déclarer un tableau initialisé avec des pointeurs (sans les rajouté à la main par la suite).

    Merci de votre aide.

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 452
    Points : 24 863
    Points
    24 863
    Par défaut
    Comment veux tu faire une const sur un pointeur Form1 et un sous pointeur Label1 en compilation alors qu'ils ne seront connus qu'en RunTime ?

    Ce que tu veux faire est impossible sans fournir le pointeur dans un second temps !
    Ajoute les éléments dans le constructeur de TForm1

    Je pense qu'il te faudrait avoir une approche plus OO, tu sembles vouloir faire une uzinagaz qui ne profite pas des astuces de la VCL
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Juillet 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur validation
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2013
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Salut ShaiLeTroll,

    Merci de ta réponse.
    C'est ce qui a été fait et effectivement ça marche:
    - Table déclaré en non constant
    - Pointeur sur les Label ajouté par la suite

    Aurais-tu une autre solution à me proposer que celle-ci?

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 374
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 374
    Points : 1 759
    Points
    1 759
    Par défaut
    Salut !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class jStruct : public TComponent
    {
    public :
    TLabel *Label;
    // autres propriétés de cette classe...
     
        __fastcall jStruct(TForm *AOwner, AnsiString N, TRect *R);
        __fastcall ~jStruct();
        // autres méthodes de cette classe ...
    };

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    __fastcall jStruct::jStruct(TForm *AOwner, AnsiString N, TRect *R)
        : TComponent(AOwner) // l'objet jStruct a pour propriétaire AOwner
    {
    // l'objet jStruct est propriétaire du label
    Label = new TLabel(this);
    // mais le label saura se dessiner sur l'AOwner du type TForm
    Label->Parent = AOwner;
    Label->SetBounds(R->Left, R->Top, R->Right, R->Bottom);
    Label->Caption = N;
    }
     
    __fastcall jStruct::~jStruct()
    {
    }
    Usage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    jStruct *StructA;
    jStruct *StructB;
    //-----------------
    __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
    {
    TRect R = Rect(10,10,80,21);
    StructA = new jStruct(this, "Label A", &R);
    R.Top = R.Top + 30;
    StructB = new jStruct(this, "Label B", &R);
    }
    //-----------------
    REM : ce qui dérive de TComponent se détruit automatiquement avec son propriétaire.

    A plus !

Discussions similaires

  1. Réponses: 4
    Dernier message: 28/03/2014, 09h56
  2. Réponses: 7
    Dernier message: 11/03/2013, 10h15
  3. Réponses: 6
    Dernier message: 31/03/2011, 08h55
  4. Réponses: 4
    Dernier message: 08/02/2005, 20h47
  5. fuite de memoire dans une liste de pointeur sur composant
    Par Nicolos_A dans le forum Composants VCL
    Réponses: 2
    Dernier message: 16/12/2004, 08h46

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