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 :

fenetre MDI - problème d'allocation


Sujet :

C++Builder

  1. #1
    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 fenetre MDI - problème d'allocation
    Bonjour,
    j'ai un soucy avec une fenetre MDI.
    j'ai une form principale en fsMDIForm et une form enfant.
    Lorsque j'alloue ma form enfant, j'ai le message suivant :

    impossible de créer la fiche, aucune Form non MDI Active
    Alors le détail qui tue, en fait j'ai une form normale en fenêtre principale de mon projet qui me permet d'ouvrir (allouer la form fsMDIForm), or si je place cette derniere en démarrage, tout se passe bien.

    y'a-t-il kkchose de spécial à faire à l'allocation dynamique d'une form MDI parent?

    Merci d'avance


    P.S : j'espère que j'ai été clair...pas sur
    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

  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
    C'est le message qu'on obtient quand on met FormStyle de la forme principale en fsMDIChild, vous avez dû vous tromper. Si vous mettez fsMDIForm, ça marchera.

    Avec simplement une forme en fsMDIForm et un bouton qui crée la fenêtre enfant, ça marche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    TForm* f;
    f= new TForm(Form1);
    f->Parent=Form1;
    f->Visible=true;
    }
    À bientôt
    Gilles

  3. #3
    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
    donc, je n'ai pas été très clair

    En effet, si j'ai une form{fsMDIForm} et une formFille{fsMDIChild} ça se passe bien.

    En revanche, ce que je veux faire c'est une form principale (démarrage) en fsNormal qui me permet de gérer l'ouverture de session et la gestion des droits d'accès (à savoir l'accès à des modules différents).

    Cette form ouvre donc plusieurs modules donc plusieures form en fsMDIForm qui ouvriront des fsMDIChild.

    c'est là que ça bloque.
    En fouinant un peu , il semble que cela soit vraiment problématique de gérer plusieurs MDIForm...ça m'arrange pas vraiment.

    si j'ai été plus clair, avez vous une idée?

    merci d'avance
    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

  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 !

    Est-ce qu'il ne serait pas préférable de monter le projet avec une seule
    MDIForm gérant les fonctionnalités selon un contexte précis ?

    A plus !

  5. #5
    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
    pourquoi souhaitable?

    ceci dit je suis en train de réfléchir à une solution dans ce sens.
    je cherche un compromis entre ergonomie, facilité de maintenance et de développement en équipe.
    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

  6. #6
    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 say
    Cette form ouvre donc plusieurs modules donc plusieures form en fsMDIForm qui ouvriront des fsMDIChild.
    Je ne crois pas qu'il soit possible de procéder ainsi car la forme principale est en réalité le type l'application et cette application n'a qu'un seul style possible.

    Ce que vous pouvez faire, c'est d'avoir une première fenêtre fsNormal qui va créer d'autres fenêtres en fsNormal mais vous pourrez déclarer ensuite des fenêtres enfant d'une fenêtre fsNormal, cela donnera l'impression de plusieurs MDI.

    Par exemple, mettez un bouton sur la forme principale, on va créer deux autres formes qui chacune contiendront une fenêtre enfant. Ensuite on rend invisible Form1. Il faudra simplement ruser pour terminer l'application car la fermeture des fenêtres visibles ne la termine pas.

    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
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    TForm *f1, *f2 ;
    f1= new TForm(Form1);
    f1->Visible=true;
     
    f2= new TForm(f1);
    f2->Parent=f1;
    f2->Visible=true;
     
    f1= new TForm(Form1);
    f1->Visible=true;
     
    f2= new TForm(f1);
    f2->Parent=f1;
    f2->Visible=true;
     
    Form1->Visible=false;
    }
    Mais il est impossible de créer plusieurs MDI. Il faut passer par des fenêtres normales et en créer d'autres en tant qu'enfant de ces fenêtres normales, simulant plusieurs applications MDI.

    À bientôt
    Gilles

  7. #7
    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 !

    Tout simplement parce qu'il n'y a qu'une seule main form !
    Le plus simple étant de prendre une MDIForm comme form principale et de gérer le contexte
    soit globalement avec autant de main menu qu'il y a de niveaux d'accès ou bien en gérant
    manuelement les rubriques (MenuItems) en jouant avec les propriétés Visible ou Enabled
    selon que...

    A l'ouverture, on peut très facilement faire apparaître une boite de dialogue pour la saisie
    d'un code d'accès.
    Plus loin, on peut développer des MDIChild en fonction des niveaux d'accès ou bien
    on le gère localement (Ca peut être poussif !!! ).

    Il suffit de suprimer la création des MDIChild dans le source du projet pour que la MDIForm
    soit vide au lancement du programme.

    L'affichage d'une dialogue à l'ouverture (avant même la form principale) peut se faire depuis
    la OnCreate de la Dialogue... ( ... sinon je peux apporter une bidouille...)

    A plus !

  8. #8
    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
    Citation Envoyé par Gilles Louïse

    Mais il est impossible de créer plusieurs MDI. Il faut passer par des fenêtres normales et en créer d'autres en tant qu'enfant de ces fenêtres normales, simulant plusieurs applications MDI.
    OK, je vais tenter ça, c'est ce qui s'approche le plus de l'ergonomie que je veux sans avoir à gérer des contextes particuliers.

    Citation Envoyé par henderson
    Tout simplement parce qu'il n'y a qu'une seule main form !
    Je viens de comprendre ça.
    Je vais tester les différentes solutions, celle de Gilles, la tienne et éventuellement revenir à l'ergonomie que j'avais prévu au départ (à savoir, des onglets notamment)

    Merci à vous deux pour des réponses aussi précises, même si ça m'arrange pas, ça fait bien plaisir.

    je vais mettre résolu mais si c'est bancal par rapport à ce que je cherchais.

    Bonne continuation.

    Simon
    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

  9. #9
    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
    Citation Envoyé par henderson
    Le plus simple étant de prendre une MDIForm comme form principale et de gérer le contexte
    soit globalement avec autant de main menu qu'il y a de niveaux d'accès
    je viens de comprendre!!!!
    ça peut être pas mal, sachant que de toute façon j'ai une classe qui va me gérer les privilèges...en revanche, ça m'oblige à une même ergonomie pour tous les modules....enfin vu d'ici.


    je vais creuser tout ça...deux bonnes idées, vraiment merci encore
    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

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

Discussions similaires

  1. Problème SplitContainer et fenetre MDI
    Par zaiany dans le forum VB.NET
    Réponses: 10
    Dernier message: 08/06/2007, 17h39
  2. [VB.NET]une seule instance par fenetre MDI
    Par pat59 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 20/02/2006, 11h14
  3. Problème d'allocation de mémoire dans la pile
    Par prophet666 dans le forum x86 32-bits / 64-bits
    Réponses: 6
    Dernier message: 19/01/2006, 02h22
  4. Question sur la gestion des fenetres MDI
    Par RémiONERA dans le forum C++Builder
    Réponses: 6
    Dernier message: 06/07/2005, 07h58
  5. Question sur les problèmes d'allocation dynamique
    Par slylafone dans le forum C++
    Réponses: 23
    Dernier message: 25/10/2004, 14h18

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