Fermer la boîte de dialogue Delphi après [x] secondes
Est-il possible d'obtenir Delphi pour fermer un ShowMessage ou MessageDlg Dialogue après un certain laps de temps?
Je veux afficher un message à l'utilisateur, lors de l'arrêt de l'application, mais ne veux pas arrêter l'application à partir de l'arrêt pendant plus de 10 secondes.
Puis-je obtenir la boîte de dialogue par défaut de fermer après un temps défini, ou ai-je besoin d'écrire mon propre forme?
source d'informationauteur Dan Kelly
Vous devez vous connecter pour publier un commentaire.
Votre application est en fait encore de travail lors d'une boîte de dialogue modale ou le système de la boîte de message ou similaire est active (ou si un menu est ouvert), c'est juste qu'une deuxième boucle de message est en cours d'exécution qui traite tous les messages, tous les messages envoyés ou publiés, et il fera la synthèse (et processus)
WM_TIMER
etWM_PAINT
messages lorsque nécessaire.Donc il n'y a pas besoin de créer un thread ou de sauter à travers toutes les autres cerceaux, il vous suffit de programmer le code qui ferme la boîte de message pour être exécuté après ces 10 secondes se sont écoulées. Une façon simple de le faire est d'appeler
SetTimer()
sans cibleHWND
mais une fonction de rappel:Erreur de manipulation oublié, mais ce devrait vous obtenir a commencé.
Vous pouvez essayer de le faire avec un standard de la boîte de dialogue de Message. Créer le dialogue avec CreateMessageDialog procédure de Dialogues et après ajouter les contrôles dont vous avez besoin.
Dans un formulaire avec un TButton définir onClick:
La propriété OnTimer comme ceci:
De définir les variables et la procédure:
Et de le tester.
La forme se fermer automatiquement lorsque le compte à rebours final, le compte à Rebours. Semblables à cela, vous pouvez ajouter d'autres types de pièces.
Ce qui concerne.
OK. Vous avez 2 choix:
1 - Vous pouvez créer votre propre MessageDialog forme. Ensuite, vous pouvez l'utiliser et ajouter un TTimer qui va fermer le formulaire quand vous le voulez.
2 - Vous pouvez continuer à l'utiliser showmessage et de créer un thread qui va utiliser la fonction FindWindow (pour trouver le messadialog de la fenêtre), puis le fermer.
Je vous conseille de l'utiliser vous propre Forme avec une minuterie. Sa plus propre et plus facile.
Essayez ceci:
J'ai été en utilisant ce assez pour un certain temps; il fonctionne un régal.
J'ai pensé à utiliser un thread séparé, mais elle va probablement vous obtenir dans beaucoup de code inutile etc. Boîtes de dialogue Windows n'étaient tout simplement pas fait pour cela.
Que vous devriez faire votre propre formulaire. Sur le bon côté, vous pouvez avoir un code personnalisé/INTERFACE utilisateur avec un compte à rebours comme chronométrés les boîtes de dialogue ne.
Pas. ShowMessage et MessageDlg sont à la fois des fenêtres modales, ce qui signifie que votre application est en fait suspendu alors qu'ils sont affichés.
Vous pouvez concevoir votre propre remplacement de la boîte de dialogue qui dispose d'une minuterie. Dans le FormShow cas, activer le minuteur, et dans le FormClose cas de le désactiver. Dans l'événement OnTimer, désactiver le minuteur, puis fermez le formulaire lui-même.
Vous pouvez brancher l'Écran.OnActiveFormChange événement et l'utilisation de l'Écran.ActiveCustomForm si c'est un intéressées forme que vous souhaitez pour le raccordement de la minuterie pour le fermer
profiter de
Cela fonctionne très bien avec windows 98 et newers...
Je n'utilise pas le "MessageBoxTimeOut" parce que les vieux windows 98, ME, ne l'a pas...
cette nouvelle fonction, qui fonctionne comme un "CHARME"..
//ajouter cette procédure
////////////////////////////Comment L'Appeler//////////////////
DialogBoxAutoClose ("Alerte", "Ce message sera fermé dans les 10 secondes',10);
/////////////////////////////////////////////////////////
MessageBox appelle cette fonction en interne et passer 0xFFFFFFFF comme paramètre de délai d'expiration, de sorte que la probabilité de retrait est minime (merci à Maurizio)
Meilleur moyen est d'utiliser un stayontop forme et de gérer un compteur à disparaître à l'aide de la alfpha mélange propriété de la forme, à la fin du comte il suffit de fermer la forme, mais
le contrôle est passé à l'actif de contrôle nécessaires avant l'affichage du formulaire, de cette façon, l'utilisateur aura un message qui disparaît automatiquement et l'habitude de prévenir l'utilisation de la fonction suivant, très cool truc pour moi.
Vous pouvez faire cela avec WTSSendMessage.
Vous pouvez le trouver dans la JWA bibliothèquesou composez vous-même.