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 :

Forms "dynamiques" [Non suivi]


Sujet :

C++Builder

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 11
    Points : 11
    Points
    11
    Par défaut Forms "dynamiques"
    Bonjour,
    Je vais tenter de faire bref et clair pour vous exposer mon problème :

    J'ai pour objectif de creer une application qui a besoin d'un nombre de Forms non définis.

    Quelle methode me conseillez-vous donc d'utiliser ?

    Pour illustrer mon probleme, voici un exmple concret :

    Lorsque l'on utilise un logiciel de messagerie instantanée, il est possible d'ouvrir autant de fenetre que l'on a de contacts.
    Comment faire pour generer ces fenêtres (qui seront toutes identiques) dynamiquement ?

    En vous remerciant !

  2. #2
    Nouveau membre du Club
    Inscrit en
    Février 2004
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 43
    Points : 32
    Points
    32
    Par défaut
    il faudrait que tu déclenches un new sur un événement comme par exemple le clic sur un contact.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 11
    Points : 11
    Points
    11
    Par défaut
    euh, l'histoire de la messagerie instantanée c'est juste un exemple.
    Mais bon on peut l'utiliser pour "imager" nos propos

    Bon, sinon, le new me parait dans tous les cas indispensable mais en fait ce que j'aimerais savoir c'est comment "dupliquer" la fenetre de reference afin d'obtenir d'autre fenetres identiques mais complétements indépendantes.

    Je suis pas sûr d'être clair ...

    Pour info, j'ai bien vu l'article de la FAQ qui parle de la création dynamique de composant mais je ne vois pas comment faire la même chose sur toute une fiche.

    Merci.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Février 2004
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 43
    Points : 32
    Points
    32
    Par défaut
    pour dupliquer, ne peux tu pas utiliser la surcharge de l'opérateur = qui te permet d'affecter une Form à une autre?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Form2->operator = (Form1)

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 11
    Points : 11
    Points
    11
    Par défaut
    Peux-être, je n'ai pas essayé.
    Le problème que je vois dans ce cas c'est que si j'ai 3 fenêtres à creer dynamiquement, il faudra que je déclare
    Form2, Form3, Form4
    mais peux être que j'en aurais 5
    Form2, Form3, Form4, Form5, Form6
    ou peut être 100 ...

    Le nombre de forms n'est pas défini.

    Sinon quelqu'un à déjà tenté la surchage = comme le décrit leycho ci-dessus ?

    Merci !

  6. #6
    say
    say est déconnecté
    Membre expérimenté
    Avatar de say
    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 176
    Points : 1 300
    Points
    1 300
    Par défaut
    bonjour,
    tu es dans une application MDI?

    quoi qu'il en soit, j'ai pas du piger le problème...
    si tu fais plusieurs new à la suite avec une seule Form1 (par ex), tu auras plusieurs forms d'afficher.

    En revanche, si tu veux pouvoir les manipuler, il faudrait les mettre dans un vecteur (par ex.)

    A+
    Ils ne savaient pas que c'était impossible alors ils l'ont fait (Mark Twain)
    _ _ _ _ _ _ _ _ _

    La planète ne nous appartient pas, elle nous a été prêtée par nos enfants
    _ _ _ _ _ _ _ _ _

    Technos : Access, C++ Builder, SQL, PostgreSQL, Crystal Reports, XML entre autres

  7. #7
    Membre averti

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 351
    Points : 446
    Points
    446
    Par défaut
    Comme ce sont des fenêtres identiques, tu crées une seule classe (p.ex. TMyForm) mais plusieurs instances. Pour chaque instance, tu as un pointeur que tu devras sauver dans un conteneur (TList, vector<>, etc. selon tes besoins) si tu as besoin d'y accéder depuis la fenêtre principale.

    Un exemple (non testé)
    Dans le .h de ta fenêtre principale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #include "TMyForm.h"
    ...
    TList *myForms;
    En réaction d'un événement (p.ex. le click sur un bouton) dans le .cpp de ta fenêtre principale:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     TMyForm* newForm=new TMyForm(this);
     newForm->Top=...
     newForm->Left=...
     ...
     myForms->Add(newForm);
     newForm->Show();
     ...

  8. #8
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Seine Maritime (Haute Normandie)

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Points : 578
    Points
    578
    Par défaut
    Hello

    Pas besoin de connaître le nombre max de fenêtres à créer

    Mettons que tu aies une fiche TForm_monform
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    TForm_monform* monObjet = new TForm_monform(NULL);
    liste->Add((void *)monObjet);
    monObjet->Show();
    Quand tu auras besoin d'une des fenêtres, l'exemple de la faq avec les TLabel s'utilise tout pareil avec les TForm.

    Après, quand tu veux détruire une des fenêtres (la numéro i par exemple):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    delete (TForm_monform*)liste->Items[i];  // Destruction de la fenêtre
    liste->Delete(i);     // Suppression de la référence de la fenêtre
    A++

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

Discussions similaires

  1. [xsl]simuler le mecanisme OO de "liaison dynamique"
    Par philemon_siclone dans le forum XSL/XSLT/XPATH
    Réponses: 10
    Dernier message: 19/12/2003, 11h34

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