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