Bonjour,
Quelqu'un à déjà essayer de griser les fenêtres en arrière plan ? J'aimerai assombrir les fenêtres qui sont en arrière plan afin de ne pas surcharger mon application avec des fenêtres superposé.
Merchiche![]()
Bonjour,
Quelqu'un à déjà essayer de griser les fenêtres en arrière plan ? J'aimerai assombrir les fenêtres qui sont en arrière plan afin de ne pas surcharger mon application avec des fenêtres superposé.
Merchiche![]()
Salut,
Bonne question, je ne sais pas y répondre lol.
Ce que je fais, pour éviter d'avoir trop de fenêtre à l'écran, soit je détruis la fiche si j'en ai plus besoin, ou soit je mets false à la propriété visible de la Form.
Après tu peux afficher une fenêtre via un ShowModal, ce qui a pour conséquence d'empêcher à l'utilisateur aux autres fiches. Seul la fiche qui vient d'être appelée via le ShowModal est "utilisable".
Enfin bref, je ne crois pas que je réponds à ta question donc j'arrête la discussion ici![]()
@ +
Effectivement, j'utiliserai ta technique si vraiment je ne trouve pas comment faire pour griser les fenêtres. Mais je suis sûr que c'est possible, vu que sous certains environnements (windev par ex) cette fonction de grisage est activé par défaut.
Si quelqu'un à une idée...
PS: je ne peux pas détruire les fenetres, puisque c'est une appli mdi, qui appel une fenetre d'insertion, puis confirmation... En fait, j'ai au plus trois ou quatre étage" .
A la limite, si quelqu'un sait comment appliquer un masque à une fenêtre afin de griser cette fenêtre (par l'utilisation d'une image...) je pourrais programmer une fonction de grisage.
Salut !
Peut-être en essayant de surcharger la méthode TCustomForm::PaintWindow qui se présente comme ceci :
Il suffit donc de déclarer la nouvelle méthode dans la classe dérivée (la MDIForm) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part virtual void __fastcall PaintWindow(HDC DC);
A ce stade, on aura donc deux méthodes qui vont coexister :
Code : Sélectionner tout - Visualiser dans une fenêtre à part void __fastcall PaintWindow(HDC DC);
- la première relève de la classe TCustomForm
- le deuxième relève de la classe dérivée de TCustomForm : la MDIForm
Si c'est possible (donc aussi simple que ça...), la surcharge devient :
C'est juste une idée parce que je n'ai pas le temps pour l'instant de tester et donc d'aller plus loin... !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 void __fastcall TForm...::PaintWindow(HDC DC) { if(Form1->ActiveMDIChild == this) { TCustomForm::PaintWindow(DC); // fait le travail normal de dessin } else { //... a faire mais j'en sais pas plus pour l'instant... } }
A plus !
Salut !
J'ai testé ce que je pensais être une astuce... hélas, à première vue.... !
Voici ce que tu peux faire :
- Ajouter une propriété dans la class des MDIChild
- Affecter le code suivant à l'événement OnPaint de chaque MDIChild, ici pour ma TForm2 et j'ai fait pareil pour ma TForm3, chacune étant doté de composants divers...
Code : Sélectionner tout - Visualiser dans une fenêtre à part TColor ActiveColor;
- Dans le constructeur de chaque MDIChild rajouter l'initialisation de la propriété ActiveColor :
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 void __fastcall TForm2::FormPaint(TObject *Sender) { if(Form1->ActiveMDIChild == this) { if(Color != ActiveColor) { Color = ActiveColor; for(int j = 0; j < ControlCount; j++) { Controls[j]->Visible = true; } for(int j = 0; j < Form1->MDIChildCount; j++) { if(Form1->ActiveMDIChild != Form1->MDIChildren[j]) { Form1->MDIChildren[j]->Repaint(); } } } } else { if(Color != clGray) { Color = clGray; for(int j = 0; j < ControlCount; j++) { Controls[j]->Visible = false; } } } }
J'ai pris comme couleur le clGray (gris foncé) pour les MDIChild inactives.
Code : Sélectionner tout - Visualiser dans une fenêtre à part ActiveColor = Color;
Ne pas oublier d'inclure le header de la fiche MDIForm dans l'unité des fiches enfants (MDIChild)
En attendant et à défaut d'avoir plus simple... (c'est un simple premier jet)
A plus !
Partager