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 :

MDI


Sujet :

C++Builder

  1. #1
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 35
    Par défaut MDI
    Est-ce que quelqu'un sait si il est possible de désactiver les redimentionnements automatique des fenêtre enfant lors de l'utilisation de MDI?

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 13
    Par défaut
    Est ce que la propriété AutoSize de ta fiche est bien à False ?
    Vérifie également que la propriété WindowState soit à wsNormal

    J'espère que ça pourra t'aider..

    Linda

  3. #3
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 35
    Par défaut
    Oui et c'est la qu'est mon problème! en fait je voudrai qu'une fenêtre enfant (principal) reste en wsMaximized alors que d'autre soit en wsNormal mais apparament dans une MDI toute les fenêtres enfant son a un instant donnée a la même configuration!

  4. #4
    Membre Expert
    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
    Par défaut
    Il faut mettre la propriété BorderStyle des fenêtres enfants à bsSingle dans l'inspecteur d'objets (ou bien par programme si ce sont des fenêtres créées dynamiquement).

    À bientôt
    Gilles

  5. #5
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 35
    Par défaut
    J'ai essayer mais j'ai toujours le même problème lorsque je crée une deuxième fenêtre enfant la premiere et automatiquement redimensionnée!

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 13
    Par défaut
    Est ce que tu peux me donner le bout de code associé à l'ouverture d'une fenêtre enfant ? je voudrais le comparer au mien ca je n'ai pas de redimensionnement..

    Linda

  7. #7
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 35
    Par défaut
    Désolé pour le retart, j'espére que ca poura t'aider mais il n'y a rien d'extraordinaire je la déclare comme une fénétre normal créée dynamiquement mais son type et MDIChild c'est tout enfin voila le morceaux qui t'intéresse:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    TWinZeta2f *WinZeta;
    WinZeta = new TWinZeta2f(this);  //Création de la fenêtre enfant principal
    WinZeta->Caption = "WinZet@2f";
    Sinon tu peut aussi regarder celui qui est donné par C++Builder lorsque tu crée une nouvelle application MDI c'est peu être mieux.
    bye

  8. #8
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    if(ActiveMDIChild != NULL)
        {
        if(ActiveMDIChild->WindowState == wsMaximized)
            {
            ActiveMDIChild->WindowState = wsNormal;
            ActiveMDIChild->SetBounds(0,0,ClientWidth-4, ClientHeight-4);
            }
        }
    TForm2 *F = new TForm2(this);
    F->WindowState = wsNormal;
    //pour les distinguer entre elles...
    F->Caption = "Fenêtre " + IntToStr(Ordre);
    Ordre++;
    En espérant que ce soit une solution...

    A plus !

  9. #9
    Membre Expert
    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
    Par défaut
    Je ne sais pas si henderson répond à la question, il déclare la fenêtre en wsNormal alors qu'il s'agit de créer une fenêtre-enfant donc du type fsMDIChild.

    Précisions que pour les applications MDI, il faut absolumemt avoir un menu principal (TMainMenu) pour que le comportement des fenêtres enfants soient corrects. Partez d'un projet vierge. Déclarez une TList (liste de pointeurs quelconques) dans la classe principale (i.e. dans le header unit1.h)

    Créez la liste dans le constructeur de la forme principale.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    __fastcall TForm1::TForm1(TComponent* Owner)
       : TForm(Owner)
    {
    LisFen=new TList;
    }
    Détruisez cette liste dans l'événement OnDestropy de la forme principale.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void __fastcall TForm1::FormDestroy(TObject *Sender)
    {
    delete LisFen;   
    }
    Mettez un TMainMenu (obligatoire pour les applications MDI) sur la forme principale et créez une fonction par exemple CREER (pour créer une nouvelle fenêtre enfant). Voici l'événement OnCLick de cette option de menu.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void __fastcall TForm1::CREER1Click(TObject *Sender)
    {
    TForm* f=new TForm(Form1);
    LisFen->Add(f);
    f->FormStyle=fsMDIChild;
    f->Width=100;
    f->Height=100;
    f->Top=0;
    f->Left=200*(LisFen->Count-1);
    f->BorderStyle=bsSingle;
    f->Color=clRed;
    }
    Les fenêtres sont bien créées, toutes leurs adresses sont disponibles dans la TList et on ne peut pas les redimensionner. Quand vous en créez une nouvelle, les autres restent telles quelles, ce que vous demandiez si j'ai bien compris votre énoncé.

    À bientôt
    Gilles

  10. #10
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Oui c'est bien wsNormal qui lui donne une dimension normale.
    Tu faisais sans doute allusion à fsNormal (FormStyle).
    Par contre il existe aussi une façon peu orthodoxe de gérer des
    StayOnTop comme des MDIChild, du moins de créer l'illusion
    qu'elle sont attachées comme tel à la form principale. Mais
    c'est relativement lourd à mettre en place !

    PS j'espère moi aussi avoir bien compris la question !

    A plus !

  11. #11
    Membre Expert
    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
    Par défaut
    Autant pour moi, j'ai confondu ws et fs. Cela dit, vous ne déclarez pas votre fenêtre en fsMDIChild, c'est ce qui m'a trompé, si c'est une fenêtre enfant, il faut le dire par une instruction du genre F->FormStyle=fsMDIChild;, ce qui n'apparaît pas dans votre code. De toute façon la question est bizarre, je ne vois pas du tout pourquoi la première fenêtre enfant serait redimensionnée au moment de la création de la deuxième, d'où ma proposition qui le prouve. Attendons la réaction du demandeur (et merci en passant de votre participation).

    À bientôt
    Gilles

  12. #12
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    C'est vrai... mais j'ai cru aussi que ActiveMDIChild suffisait en soi puisque cette propriété
    entre en jeu uniquement dans un contexte MDI.

    Je crois qu'ici le mécanisme est controlé par le mode MDI et qu'on ne
    peut pas le modifier... jusqu'à preuve du contraire... Sait-on jamais !

    Ici je fais en sorte que la dernière fenêtre à avoir été active soit plein écran
    bien qu'ayant récupéré sa barrede titre.
    Disons qu'elle occupe le maximum de la zone client de la fiche
    principale (MDIForm), la dernière fiche créée prenant le focus vient donc se
    placer par dessus elle.

    A plus !

  13. #13
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 35
    Par défaut
    En fait si j'avais un problème de redimensionnement de mes fenêtres enfants c'est parceque la première fenêtre que je créai possédait sa propriété WindowState à wsMaximized et les suivantes à wsNormal, or il semble que dans une application MDI, il ne peut avoir de fenêtre enfant qui soit en wsMaximized et d'autres en wsNormal en même temps (je ne sais pas prouquoi d'allieur!), et c'est ce qui me donnait mon redimensionnement. Mais je comtourne le problème en dimensionnant toutes mes fenêtres en mode wsNormal. Merci d'avoir porté autant d'atention à mon problème.

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

Discussions similaires

  1. [VB6] [MDI] Signaler la fermeture d'une fille à la mère
    Par cpri1shoot dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 13/04/2004, 08h57
  2. [MDI] comment fermer la bonne fenêtre enfant ?
    Par KThrax dans le forum Langage
    Réponses: 5
    Dernier message: 01/09/2002, 09h42
  3. MDI sans MFC, possible ?
    Par delire8 dans le forum MFC
    Réponses: 4
    Dernier message: 17/06/2002, 07h38
  4. pb fenêtre MDI
    Par dédé dans le forum C++Builder
    Réponses: 7
    Dernier message: 08/06/2002, 18h41
  5. enregistrer dans un fichier avec une appli mdi
    Par ferrari dans le forum C++Builder
    Réponses: 4
    Dernier message: 05/05/2002, 15h17

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