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?
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?
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
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!
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
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!
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
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:
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.
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";
bye![]()
Salut !
En espérant que ce soit une solution...
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++;
A plus !
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 TList* LisFen;
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
5 __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { LisFen=new TList; }
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 void __fastcall TForm1::FormDestroy(TObject *Sender) { delete LisFen; }
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é.
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; }
À bientôt
Gilles
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 !
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
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 !
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.
Partager