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 :

showmodal et fenetre fille


Sujet :

C++Builder

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 21
    Points : 8
    Points
    8
    Par défaut [resolu]showmodal et fenetre fille
    bonsoir

    j'utilise Borland C++ builder 6.
    Je vais essayer d'etre clair dans le probleme que je rencontre.
    J'ai une fenetre mere Form1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Form1->FormStyle=fsMDIForm;
    Sur ce Form1 j'ai un menu principal.

    Avec ce menu j'ouvre une fenetre dynamique comme expliqué tres clairement dans le cours http://glouise.developpez.com/cbcons...seils4.php#L73

    A partir de cette fenetre dynamique je veut ouvrir une fenetre fille de Form1 pour que de cette fenetre je puisse accéder au menu principal. Mais pour l'insant je n'arrive qu'a ouvrir une autre fenetre dynamique comme la premiere. Car des que je met
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    f->FormStyle=fsMDIChild;
    pour la fenetre. La fonction showmodal ne marche plus et l'erreur suivant s'affiche:Cannot make a visible window modal.

    Je ne vois pas en quoi le fait de changer ma fenetre de fenetre dynamique normal à fenetre dynamique fille de form1 change l'utilisation de showmodal?

    merci de m'éclairer sur ce sujet...
    Je n'ai pas une grande experience avec c++ builder...

    francois

  2. #2
    Membre confirmé
    Homme Profil pro
    Consultant MOA
    Inscrit en
    Juillet 2004
    Messages
    289
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2004
    Messages : 289
    Points : 635
    Points
    635
    Par défaut
    En fait pour moi ton problème me parait logique:
    ShowModal permet d'afficher une Form et de ne pouvoir accéder qu'à elle seule tant que l'on ne l'a pas quittée.
    Or une appli MDI permet justement de travailler avec plusieurs Form, donc , pour moi en tout cas, ca me parait complètement incompatible, et pas que de la faute à Builder.

    Ca me parait bizarre quand même que tu veuille utiliser ShowModal dans une appli MDI , et si tu ne veux travailler qu'avec une fenêtre à la fois, tu peux toujours créer le même menu pour toutes tes fenêtres ...

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 21
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    merci de ta réponse, je vais donc essayer de faire sans showmodal pour mes fenetre fille.
    Un évenement on click sur des boutons de la fenetre devrait marcher aussi pour ce que je veux faire.
    Je vais essayer ce soir.

    francois

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 21
    Points : 8
    Points
    8
    Par défaut
    bonsoir,
    j'ai un nouveau probleme pour gerer les boutons de ma fenetre en utilisant les evenement onclick. je m'explique:

    J'ai une class :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     class NewBilleterie
    {
    public:
    TForm* f;
    TListBox* list;
    TButton* OK;
    TButton* Annul;
    NewBilleterie();
    ~NewBilleterie();
    void __fastcall Okclick(TObject*);
    };
    Puis dans mon programme je fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NewBilleterie* g=new NewBilleterie();
    je met ensuite des données dans la listbox de la class
    Puis:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g->OK->OnClick=g->Okclick;
    Ce qui appel la methode suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     void __fastcall NewBilleterie::Okclick(TObject* Sender)
      {
      }
    Dans cette methode je voudrais encore avoir acces au g que j'ai cré par new au dessus pour recupérer des infos sur le selection dans la listbox.

    Mais je n'ai pas acces a g, cela doit etre normal je doit mal m'y prendre mais je vois pas comment faire autrement.
    J'aimerais bien aussi faire un delete g une fois le bouton cliqué. Mais j'ai vu que le delete devait toujours etre exterieur a la class.

    voila
    merci de votre aide

    francois

  5. #5
    Membre confirmé
    Homme Profil pro
    Consultant MOA
    Inscrit en
    Juillet 2004
    Messages
    289
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2004
    Messages : 289
    Points : 635
    Points
    635
    Par défaut
    En fait si j'ai bien compris tu crées une instance de NewBilleterie qui s'appele g
    A mon avis (ce n'est que le mien), tu garde quelque part un pointeur vers l'objet qui crée g (genre la propriété Parent de la form incluse dans NewBilleterie ou autre)
    A ce moment à partir de ce pointeur tu peux récupérer les infos qu'il contient (genre la ListBox)

    Par contre tu ne passe aucun paramètres lors de la création de g, donc je me demande comment tu crées la form f (en passant NULL peut être ...) Parce que dans ce cas tu pourrais passer en paramètre l'objet qui le crée, du genre : NewBilleterie (TObject *Parent), et ensuite quand tu dois récupérer les infos de la ListBox : ((TForm1*)Parent)->ListBox1...

    Je ne sais pas si je suis très clair mais moi c'est ce que je ferais (et vais faire vu que j'suis en plein dans une appli MDI )

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 21
    Points : 8
    Points
    8
    Par défaut
    bonjour,

    Lorsque je fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NewBilleterie* g=new NewBilleterie();
    j'appelle le constructeur suivant:

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     /* Constructeur, création de la fenêtre et de ses composants */
    NewBilleterie::NewBilleterie()
    {
    f=new TForm(Form1);
    f->FormStyle=fsMDIChild;
     
    f->Width=250;
    f->Height=310;
    f->Left=Form1->Left+Form1->Left/2;
    f->Top=Form1->Top+Form1->Top/2;
    f->Width=250;
    f->Height=310;
    f->Caption="Projet";
     
    titre=new TLabel(f);
    titre->Parent=f;
    titre->Caption="Selectionner votre projet:";
     
    list= new TListBox(f);
    list->Parent=f;
    list->Top=20;
    list->Left=20;
    list->Height=200;
    list->Width=200;
     
    OK=new TButton(f);
    OK->Parent=f;
    OK->Top=230;
    OK->Left=145;
    OK->Caption="OUVRIR";
     
    Annul=new TButton(f);
    Annul->Parent=f;
    Annul->Top=230;
    Annul->Left=20;
    Annul->Caption="Annuler";
     
    }
    Donc si j'ai bien compris il faut que je rajoute un Parent sur le form f crée.

    f->Parent=???

    j'ai declarer un TObject dans ma class billeterie mis cet objet = au
    parent de f. Mais ca doit pas etre ca la syntaxe car il y a une erreur.
    j'essayerais plus longtemps ce soir.

    francois

  7. #7
    Membre confirmé
    Homme Profil pro
    Consultant MOA
    Inscrit en
    Juillet 2004
    Messages
    289
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2004
    Messages : 289
    Points : 635
    Points
    635
    Par défaut
    Ben en fait sur ton code le parent serait Form1

    Par contre d'où il sort Form1 ? c'est une variable globlabe

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 21
    Points : 8
    Points
    8
    Par défaut
    Form1 c'est le fenetre mere de depart :

    Elle est ensuite declarer comme fenetre mere:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
              Form1->FormStyle=fsMDIForm;
    }
    C'est cette fenetetre qui possede le menu principal.

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 21
    Points : 8
    Points
    8
    Par défaut
    La solution que j'ai trouvé pour l'instant c'est de déclaré au debut du prog:


    Puis quand j'ouvre ma fenetre je fait:

    Je peut alors acceder a g dans mon evenement.

    Maintenant je vais chercher a faire delete de cette fenetre mais j'ai vu qu'il y avait d'autres post a ce sujet

    merci
    francois

  10. #10
    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
    Citation Envoyé par fransouik
    La solution que j'ai trouvé pour l'instant c'est de déclarer au debut du prog:

    En principe, on déclare ce genre de variable dans la classe principale, elle est alors accessible par définition dans tout le programme soit sous la forme g si vous êtes dans une méthode préfixée par TForm1::, soit sous la forme Form1->g si vous êtes à l'extérieur.

    Quant au delete, en génréal on n'a aucun intérêt a supprimer ces fenêtres, on se contente de les rendre invisibles, ça suffit largement. Mais, bien entendu, tout dépend du contexte.

    À bientôt
    Gilles

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

Discussions similaires

  1. Bloquer fenetre mere attendant resultat fenetre fille
    Par fredo3500 dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 16/06/2010, 01h56
  2. Ecrire du texte dans les fenetres filles (MDI)
    Par trilomdor dans le forum MFC
    Réponses: 9
    Dernier message: 23/06/2004, 18h00
  3. [MFC] Maximiser à l'ouverture une fenetre fille !
    Par leskritiques dans le forum MFC
    Réponses: 15
    Dernier message: 28/04/2004, 09h50
  4. Réponses: 5
    Dernier message: 08/01/2004, 16h05
  5. [MDI] Ouvrir immédiatement une fenetre fille
    Par phil56 dans le forum C++Builder
    Réponses: 8
    Dernier message: 12/03/2003, 15h27

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