de ma candidature, je souhaite ouvrir une boîte de dialogue, qui devrait se fermer immédiatement (après un court message) dans certaines circonstances.
J'ai essayé ceci: p>
procedure TForm2.FormActivate(Sender: TObject); begin if SomeCondition then begin ShowMessage('You can''t use this dialog right now.'); close; modalresult := mrCancel; end; end;
4 Réponses :
Ne serait-il pas plus facile de vérifier la certaine circonstance avant que le formulaire ne s'ouvre et ne pas l'ouvrir? P>
Je ne peux pas voir une raison pour que le formulaire reste ouvert, il devrait disparaître immédiatement après avoir cliqué sur Le showMessage bloque de sorte que vous ne serez pas capable de fermer jusqu'à ce que ça soit OK'D (si vous avez besoin de fermer avant, vous pouvez retourner un résultat modal différent (ou faire votre choix qui ne vous heurte pas avec l'existant ceux comme mrunparavailable = 12). Ensuite, vous pourriez montrer le message si le modalresult était en mrunparavailable. P>
S'il exécute le code et s'il ne ferme pas, essayez d'utiliser EDIT: strong> Si vous réutilisez le même formulaire à plusieurs endroits, n'utilisez pas de libération, sauf si vous souhaitez recréer le formulaire à chaque fois! Postez le message proche lorsque les autres ont suggéré p> OK code> dans la boîte de dialogue Afficher le message. P>
version code> au lieu de fermer. p>
J'ouvre la boîte de dialogue de plusieurs endroits et je ne veux pas vérifier tous les endroits.
Utilisez ensuite une méthode que vous pouvez appeler à partir de plusieurs endroits. Faites les chèques dans cette méthode et si vous ne pouvez alors ouvrir que le formulaire
Postez un message WM_Close au lieu d'appeler directement directement;
ShowMessage('You can''t use this dialog right now.'); PostMessage(Handle, WM_CLOSE, 0, 0); modalresult := mrCancel;
J'ai accepté la réponse de Bharat, même si votre réponse était presque identique. Désolé. Il vous a battue deux secondes :-)
@Svein - ici, alors montre ma réponse battant son avec 37 secondes. Mais de toute façon, il est assez proche de ne pas faire de bruit à ce sujet. :-)
Comme l'a dit Einstein: la perception du temps dépend de votre vitesse.
Voté pour cette réponse à cause de MrCancel
Essayez celui-ci
procedure TForm2.FormActivate(Sender: TObject); begin ShowMessage('You can''t use this dialog right now.'); PostMessage(Self.Handle,wm_close,0,0); end;
Vous pouvez essayer une minuterie: p>