Bonjour,
Comment rendre une fenetre prioritaire, c'est-à-dire qui ne permet pas au programme de continuer tant qu'elle n'est pas fermée (validée)?
Merci d'avance.
Version imprimable
Bonjour,
Comment rendre une fenetre prioritaire, c'est-à-dire qui ne permet pas au programme de continuer tant qu'elle n'est pas fermée (validée)?
Merci d'avance.
Tu lèves un flag à l'ouverture de la fenêtre (OnFormShow) et tu le baisses à la fermeture de la fenêtre (OnFormClose). Tu n'as qu'a te servir du flag dans le reste de ton programme pour gérer la priorité des actions.
Salut pasqual,
tu peux aussi mettre le style de ta fenêtre à bsDialog.
Ainsi tant que celle-ci n'est pas fermé, rien ne se passe dans ton programme !
@+
Xav
Merci pour vos réponses.
J'ai essayer ta proposition Xav++, mais cela ne semble pas marcher.
J'ai oublier de préciser que je travaille sur une application MDI, peut etre est-ce pour cela que ça ne marche pas?
Bonjour,
Il faut utiliser ShowModal pour afficher la fiche :
Exemple tiré de l'aide :Citation:
Affiche une fiche sous forme de boîte de dialogue modale.
virtual int __fastcall ShowModal(void);
Description
Utilisez la méthode ShowModal pour afficher une fiche comme fiche modale. Dans une fiche modale, l'application ne peut pas continuer à s'exécuter jusqu'à ce que la fiche soit fermée. Par conséquent, ShowModal ne renvoie rien avant la fermeture de la fiche. Lorsque la fiche se ferme, elle renvoie la valeur de la propriété ModalResult.
Pour fermer une fiche modale, affectez une valeur non nulle à sa propriété ModalResult.
Remarque : Si la fiche contient des boutons dont la propriété ModalResult a une valeur autre que mrNone, elle se ferme automatiquement lorsque l'utilisateur clique sur l'un de ces boutons et renvoie la valeur de ModalResult comme valeur de renvoi de ShowModal.
Vous pouvez comparer la valeur renvoyée aux valeurs habituellement renvoyées en utilisant la fonction IsAbortResult, IsAnAllResult, IsNegativeResult ou IsPositiveResult globale.
NicolasCitation:
Les méthodes suivantes sont utilisées pour les boutons dans une fiche utilisée comme une boîte de dialogue modale. Les méthodes provoquent la fin de la boîte de dialogue lorsque l'utilisateur clique sur OK ou Annuler, renvoyant respectivement mrOk ou mrCancel de ShowModal. Vous pourriez aussi initialiser la valeur ModalResult à mrOk pour le bouton OK, et mrCancel pour le bouton Annuler afin d'accomplir la même chose. Lorsque l'utilisateur clique sur l'un des deux boutons, la boîte de dialogue se ferme.
void __fastcall TOKRightDlg::OKBtnClick(TObject *Sender)
{
ModalResult = mrOk;
}
void __fastcall TOKRightDlg::CancelBtnClick(TObject *Sender)
{
ModalResult = mrCancel;
}
Ce code fait apparaître la boîte de dialogue modale à partir de Form1 lorsque l'utilisateur clique sur un bouton. Cela provoque un message sonore s'il s'agit du bouton OK.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (OKRightDlg->ShowModal() == mrOk)
MessageBeep(0);
}
En effet comme l'a dit Nicolas tu dois utiliser ShowModal()
Code :
et cela fonctionne parfaitement avec les fenêtres MDI.Code:
1
2 Form2 = new TForm(); Form2->ShowModal();
@+ ;)
Xav
Je ne suis pas sûr que c'est cela qu'il veut faire. Une fenêtre modale est tout simplement une fenêtre qui se met en avant plan par rapport aux autres, et seule cette fenêtre peut intéragir avec l'opérateur. Or si par exemple un timer est appelle dans Form1 pour actualiser un TEdit et que Form1 appelle Form2 en tant que fenêtre modale, l'actualisation du TEdit s'effectura encore dans la Form1 alors que c'est Form2 qui à prit la main sur les évènements utilisateur ... . Pour moi c'est ce résonnement qu'il souhaite effectuer, si j'ai bien compris, dès que Form2 est en avant plan, le timer arrête d'actualiser le TEdit dans Form1, non ?
Merci pour vos réponses, la fonction showModal() me convient parfaitement.
A plus