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 :

Instancier une TForm


Sujet :

C++Builder

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 371
    Par défaut Instancier une TForm
    Bonjour

    J'ai une applicatication MDI , donc plusieurs feuilles
    Une seule est crée automatiquement ( Mon choix perso qu'en pensez vous? ) , les autres étant crées de la facon suivante suite a un clic sur TButton ...

    J'ai cependant l'impression qu'avec cette methode , la nouvelle feuille instanciée , est instanciée sur l'adresse de l'ancienne ...
    Comment je dois faire ? Tableau de TForm dynamique ( je sais pas faire ... ) ?

    .h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class TF_test;
    class TF_accueil : public TForm
    {
    __published:	// Composants gérés par l'EDI
    // etc ......        
    public:		// Déclarations de l'utilisateur
            __fastcall TF_accueil(TComponent* Owner);
            //  etc .......
    protected :  // Déclarations de l'utilisateur
                 TF_test *F_test;  
    };
    .cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    F_test = new TF_test(this); 	//Création de la fiche
    help me

  2. #2
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Oui, la forcement, as chaque clic tu perd l'ancienne fiche, en effet un tableau serait le bien venu, je pencherai même pour un std::vector.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 371
    Par défaut
    Dsl je sais pas ce que c'est je suis inculte ^^

  4. #4
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152

  5. #5
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 76
    Par défaut
    Petite précition vu ton code tu créé effectivement la nouvelle par dessus l'ancienne ... sans jamais libéré la mémoire aloué a l'ancienne ... y'a pas bon tout ca.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 371
    Par défaut
    Si si je la libere jai juste pas mis le code
    Bon jai regardé vite fait std::vector jvai voir ske je peux faire avant de vous demander la reponse

  7. #7
    Membre émérite
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Par défaut
    Une fiche enfant peut ce libérer d'elle même.

    Il suffit de mettre dans l'evenement OnClose : Action = caFree;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action)
    {
            Action = caFree;
    }
    Citation Envoyé par Aide BCB
    caFree La fiche est fermée et toute la mémoire allouée à la fiche est libérée.
    Donc si tu n'as pas besoin du pointeur, tu peut le laisser perdre, la memoire sera tout de même libérée à la fermeture de la fiche.

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 371
    Par défaut
    je savais deja ca , le probleme cest quon ferme pas forcemment la feuille avant de creer la nouvelle

  9. #9
    Membre émérite
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Par défaut
    Ça change rien, quand tu fermera ta fiche elle ce liberera.

    Citation Envoyé par Pugebad
    J'ai cependant l'impression qu'avec cette methode , la nouvelle feuille instanciée , est instanciée sur l'adresse de l'ancienne ...
    Non, la nouvelle fiche sera à une adresse differente, et ton pointeur pointera sur cette nouvelle adresse.

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 371
    Par défaut
    Vous me donner tous des reponses diffentes ... j'en deduis quoi?

  11. #11
    Membre émérite
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Par défaut
    Plusieurs solutions sont possible, c'est à toi de choisir celle qui te convient le mieux, ou la plus adaptée à ton application.

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 371
    Par défaut
    je parlais pas de ca ...
    un me dit que ladresse est prise par la suivante ( mon sentiment aussi )
    et lucien dit non ladresse nest pas prise par la nouvelle ...

  13. #13
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    L'adresse est bien une nouvelle adresse (a moins que la précédente ai déjà été libéré, dans ce cas ça peut être la même) mais est enregistré dans la même variable (F_test), donc si tu veut accéder à ta fenêtre par cette variable, tu ne pourra le faire que sur la dernière que tu as créé, d'où le fait de créer un vector, maintenant, si tu n'as pas besoin d'y accéder, tu peut laisser comme ça en mettant caFree dans le OnClose

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 371
    Par défaut
    Non je veux pouvoir y acceder ...
    Et meme si jveux pas y acceder jaimerais reussir ce truc de vector

    edit : bon jai regardé le code de vector mais bon , cest pour un int ,et la un tableau de tform dynamique me parait plus dur a mettre en place

  15. #15
    Membre émérite
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Par défaut
    Vu que tu utilise la VCL tu peux aussi utiliser une TList pour stocker tes pointeurs...

  16. #16
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    C'est pas plus compliqué pour les TForm que pour les int, en int tu as :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    std::vector<int> vectorDeInt;  //créé le vector
    vectorDeInt.push_back(5);      //ajoute un int
    vectorDeInt[index];                //récupère le int à la position index
    vectorDeInt.size();                 //nombre d'élément dans le vector
    En TForm* tu as :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    std::vector<TForm*> vectorDeInt;    //créé le vector de TForm
    vectorDeInt.push_back(new TForm);  //ajoute une TForm
    vectorDeInt[index];                         //récupère la TForm à la position index
    vectorDeInt.size();                          //nombre d'élément dans le vector

Discussions similaires

  1. Réponses: 7
    Dernier message: 27/06/2005, 22h05
  2. [Débutant(e)]Instancier une classe connaissant son nom (String)
    Par Invité dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 17/06/2005, 11h05
  3. [JAR] instancier une Image contenue dans un jar
    Par celine31 dans le forum Général Java
    Réponses: 3
    Dernier message: 03/04/2005, 15h55
  4. Problèmes avec une TForm créée dynamiquement
    Par Pascal Jankowski dans le forum Composants VCL
    Réponses: 5
    Dernier message: 30/03/2005, 11h55
  5. [Débutant(e)]servlet qui instancie une classe personelle
    Par NiBicUs dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 08/02/2005, 12h00

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