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 :

Fenêtre enfant MDI : passage paramètre à la création


Sujet :

C++Builder

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 71
    Points : 75
    Points
    75
    Par défaut Fenêtre enfant MDI : passage paramètre à la création
    Bonjour

    Avec BCB 6.0
    Dans une application MDI la plus simple possible, que je crée en utilisant l'expert du Borland pour une appli MDI standard, donc j'ai le squelette de base, sur lequel je ne modifie que ceci :
    je veux passer un paramètre à chaque fenêtre enfant MDI, donc je modifie le constructeur de la classe comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    __fastcall TMDIChild::TMDIChild(TComponent *Owner, char afftype) : TForm(Owner)
    {  	Memo1->Lines->Add("afftype = " + AnsiString(afftype));
    }
    Et pour l'appel ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    	TMDIChild *Child;
    	Child = new TMDIChild(Application, 'z');
    Si je passe un char comme paramètre, c'est parait bon.
    Mais si je modifie pour passer un entier (int), j'ai une exception de débordement de pile à la création de la fiche enfant. Le déboggueur m'indique la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	/* TCustomForm.Create */ inline __fastcall virtual TForm(Classes::TComponent* AOwner) : TCustomForm(AOwner) { }
    dans le fichier forms.hpp.

    Je cherche à comprendre pourquoi. Est-ce que je fais une erreur qq part ?
    Est-il interdit de passer un paramètre au constructeur d'une fenêtre MDI enfant ?
    Si vous avez une idée....
    Merci

  2. #2
    Membre chevronné
    Avatar de Gilles Louïse
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2002
    Messages : 421
    Points : 1 911
    Points
    1 911
    Par défaut
    Je ne crois pas qu'on puisse modifier le prototype du constructeur étant donné que c'est le progiciel qui s'en occupe. Une possibilité (celle que j'utilise en ce qui me concerne) est de créer une classe par vous-même incluant un pointeur de fenêtre qui sera décrit au moment de sa création comme enfant de la fenêtre principale, dans ces conditions vous pourrez créer vous-même le constructeur puisque vous êtes le créateur de la classe.

    À bientôt
    Gilles

  3. #3
    Membre habitué
    Inscrit en
    Mars 2002
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 105
    Points : 133
    Points
    133
    Par défaut
    Bonjour,

    En fait, le problème vient du fait qu'il existe déjà un constructeur prenant un int en argument. Le redéclarer entraine un bouclage entre les constructeurs (ce qui entraine un débordement de pile).

    Il existe 2 solutions simples :
    - soit déclarer le constructeur en lui passanr un int* (au lieu de int)
    - soit déclarer le constructeur en lui passant 2 int (dont 1 inutile...)

    Nicolas

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 71
    Points : 75
    Points
    75
    Par défaut
    Bonjour

    Ah oui, je comprends mieux.
    J'ai aperçu effectivement le 2ème constructeur dans le fichier Forms.hpp, mais je ne m' en suis pas trop occupé pensant que le compilateur m'indiquerait une erreur ou au moins un avertissement si cette double déclaration était la cause de l'erreur.
    Je déclare donc un constructeur avec 2 int, et ça marche.
    Merci.

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

Discussions similaires

  1. Création automatique de fenêtre enfant MDI
    Par kimlee dans le forum C++Builder
    Réponses: 1
    Dernier message: 09/06/2007, 15h39
  2. Réponses: 5
    Dernier message: 11/09/2006, 10h05
  3. Comment fermer une fenêtre enfant MDI ?
    Par DeveloMagaly dans le forum Composants VCL
    Réponses: 2
    Dernier message: 30/09/2005, 13h10
  4. Réponses: 7
    Dernier message: 16/06/2004, 15h02
  5. [MDI] comment fermer la bonne fenêtre enfant ?
    Par KThrax dans le forum Langage
    Réponses: 5
    Dernier message: 01/09/2002, 09h42

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