problème probablement trivial pour un po :
je dois rendre la form principale ainsi que celle des fenêtre enfants d'une application
innamovible dans l'écran.
comment doit-on proceder?
compilateur : Borland C++ 6.
Merci de vos réponses!
problème probablement trivial pour un po :
je dois rendre la form principale ainsi que celle des fenêtre enfants d'une application
innamovible dans l'écran.
comment doit-on proceder?
compilateur : Borland C++ 6.
Merci de vos réponses!
Mettre BorderStyle de la Form a bsNone, mais ca fait peut etre plus que ce que tu veut
Que voulez-vous dire exactement par inamovible? qu'on ne peut déplacer ? qu'on ne peut fermer ? ou qui doit rester au dessus des autres fenêtres?
Merci de cette réponse! mais cela n'est pas la solution...
Bien sur BsNone fair disparaitre la barre qui n'appartient pas à l'application et qui est responsable de ma question mais:
je doit faire une applic qui sera child d'un système nettement plus vate et pour des questions d'homogénéité de présentation, cette barre "du haut" doit rester présente.
J'y ai juste supprimé tous les icones minimize, maximize, Exit, ...
pour ce faire a l'event oncreate j'execute :
Je cherche donc à rendre innamovible des fenêtre possédant cette header qui est sous le controle de window et non de l'application
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 TBorderIcons tempBI = BorderIcons; tempBI >> biMaximize; tempBI >> biMinimize; tempBI >> biHelp; tempBI >> biSystemMenu; BorderIcons = tempBI;
Par innamovible j'entends qu'elle ne puisse être déplacée par l'utilisateur.
Les autres aspects de la question sont résolus par le petit code que j'ai cité préalablement
Je comprends un peu mieux.
Je n'ai pas testé ces solutions, mais ce sont peut-être des pistes:
1) utiliser les propriétés Position poDefaultPosOnly et poDefaultSizeOnly de TForm.
2) (hack-o-rama) dans OnShow, enregistrer Left, Top, Height and Width; dans OnResize, restaurer ces valeurs. A voir si il n'y a pas un message windows que l'on pourrait attraper lrsque la fenêtre est déplacée.
Bonsoir,
Eventuellement, une idée afin de 'bloquer' l'accés aux zones non clientes de la TForm, afin d'éviter de la déplacer même si la barre de titre est visible :
. dans le .h de la TForm, en private:
. dans le .cpp:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 private: // Déclarations de l'utilisateur void __fastcall OnNCLBUTTONDOWN(TMessage& msg);//bouton gauche enfoncé, dans la zone non client BEGIN_MESSAGE_MAP MESSAGE_HANDLER(WM_NCLBUTTONDOWN,TMessage,OnNCLBUTTONDOWN) END_MESSAGE_MAP(TForm)
On ne peut donc plus 'saisir' la fenêtre par la barre de titre et la déplacer ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 void __fastcall TForm2::OnNCLBUTTONDOWN(TMessage& msg) { msg.Msg = WM_NCLBUTTONUP; }
En espérant t'aider,
@ +
Suite :
Par contre, dans mon cas, on ne peut plus cliquer sur les boutons de la barre de titre (mais j'ai cru comprendre que dans ton cas, il n'y en avait pas).
Sinon, on peut toujours imaginer rester sur cette idée et tester le paramètre wParam du message, qui est le 'hit-test':
voir alors aussi WM_NCHITTEST peut être, pour selectionner les cas ou l'on peut cliquer sur la zone non cliente ou non.
non ?
M E R C I !!!
Cela rempli en tout cas 95% de mon attente!
Bonsoir,
Mais alors .... c'est quoi les 5 % restant ?
![]()
avec la macro dans la zone private, il n'est pas à priori aisé de pouvoir switcher cette option de ON à OFF à travers le soft lui-même. Mais cela reste marginal pour mon application.
J'ai essayé - mais sans résultat positif - de changer
msg.Msg = WM_NCLBUTTONUP; par msg.Msg = WM_NCLBUTTONDOWN; suivant les conditions d'appels. J'aurrais pensé que l'interception de l'event WM_NCLBUTTONUP; et le substituer à lui-même aurait rendu la mobilité à la fenêtre : mais non...
Mais je n'ai pas réfléchi plus que cela et je ne pourrais pas m'avancer trop sur ses conclusions.
en tout cas encore MERCI
Bonsoir,
Content d'avoir pu t'aider ...
Et avec une variable bool (en private, dans la TForm), initialisée a false au lancement de la form, qui passerais a true en fonction des cas ?
On écrirais alors :
On peut imaginer capter le message WM_NCMOUSEMOVE (de la même manière que pour WM_NCLBUTTONDOWN), et faire changer la valeur de la variable booléenne en fonction de la zone survolée (par exemple) si besoin.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 void __fastcall TForm2::OnNCLBUTTONDOWN(TMessage& msg) { if (Libre == true) { msg.Msg = WM_NCLBUTTONUP; } else { this->DefaultHandler(&msg); } }
A moins que je me trompe gravement, cette évènement sera capter de toute façon avant le click dans la zone non cliente.
@ +
![]()
Partager