begin process at 2012 02 12 15:55:35
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Message Box

 > [ASTUCE] MESSAGEBOX QUI N'ARRETE PAS LE PROCESSUS COURANT

[ASTUCE] MESSAGEBOX QUI N'ARRETE PAS LE PROCESSUS COURANT


 Information sur la source

Note :
10 / 10 - par 4 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Message Box Classé sous :modale, api, messagebox, msgbox Niveau :Débutant Date de création :19/09/2005 Vu :12 878

Auteur : econs

Ecrire un message privé
Commentaire sur cette source (24)
Ajouter un commentaire et/ou une note

 Description

La commande MsgBox permet d'afficher un message à l'écran, mais elle arrête tous les processus qui étaient en cours.
Avec l'API MessageBox, on affiche la même chose, mais les processus qui étaient en cours continuent de tourner.

Code à tester avec 2 CommandButtons, un Timer et un Label.


Vraiment con comme source, mais pas aperçue sur le site ( ou alors noyée dans le flot des générateurs de MsgBox ). Si c'est le cas, désolé pour la pollution. Elle peut être supprimée.
Bref, c'est plutôt son utilisation bien particulière qui m'interpelle ici, car je pensais dur comme fer qu'on était obligé de créer sa propre MessageBox quand on ne voulait pas arrêter les processus.

Source

  • Private Declare Function MessageBox Lib "user32" Alias "MessageBoxA" (ByVal hwnd As _
  • Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As _
  • Long) As Long
  • Private Sub Command1_Click()
  • ' L'appel à la MsgBox traditionnelle arrête tous les processus qui
  • ' étaient en cours. Regardez donc le Timer dans Label1.
  • MsgBox "Le Timer s'arrête"
  • End Sub
  • Private Sub Command2_Click()
  • ' L'appel à l'API MessageBox n'arrête pas les processus qui étaient
  • ' en cours. Regardez Label1 qui continue de défiler ...
  • MessageBox Me.hwnd, "Le Timer ne s'arrête pas.", "API MsgBox", vbOKOnly + vbExclamation
  • End Sub
  • Private Sub Form_Load()
  • ' Initialisation du Timer
  • Timer1.Interval = 100
  • Timer1.Enabled = True
  • End Sub
  • Private Sub Timer1_Timer()
  • ' Le label contient l'heure courante et est raffraichi tous les
  • ' Timer1.Interval [ms].
  • Label1.Caption = Time
  • End Sub
Private Declare Function MessageBox Lib "user32" Alias "MessageBoxA" (ByVal hwnd As _
Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As _
Long) As Long

Private Sub Command1_Click()
'   L'appel à la MsgBox traditionnelle arrête tous les processus qui
'   étaient en cours. Regardez donc le Timer dans Label1.
    MsgBox "Le Timer s'arrête"
End Sub

Private Sub Command2_Click()
'   L'appel à l'API MessageBox n'arrête pas les processus qui étaient
'   en cours. Regardez Label1 qui continue de défiler ...
    MessageBox Me.hwnd, "Le Timer ne s'arrête pas.", "API MsgBox", vbOKOnly + vbExclamation
End Sub

Private Sub Form_Load()
'   Initialisation du Timer
    Timer1.Interval = 100
    Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
'   Le label contient l'heure courante et est raffraichi tous les
'   Timer1.Interval [ms].
    Label1.Caption = Time
End Sub



 Sources du même auteur

Source avec Zip SUBCLASSING - RÉCUPÉRER PLUS D'EVENEMENTS.
DETECTER CANCEL SUR L'INPUTBOX
Source avec Zip Source avec une capture TRI NUMÉRIQUE LISTBOX COMBOBOX
Source avec Zip Source avec une capture PAINTFORM SANS API
VBA EXCEL IMPRESSION - FAIRE TENIR LES DONNÉES SUR MOINS DE ...

 Sources de la même categorie

Source avec Zip Source .NET (Dotnet) LOGICIEL DE MÉMO (POST-IT) par VBmasterX
Source avec Zip MESSAGE AUTO (MSG_AUTO) par omega8
Source avec Zip Source avec une capture MSG GENERATOR V 1.0 par ThePH267
Source avec Zip Source avec une capture [VB6] TOUT SAVOIR SUR LA POSITION ET LES DIMENTIONS DE LA BA... par lermite222
Source avec Zip Source avec une capture Source .NET (Dotnet) MESSAGE BOX A CHOIX MULTIPLE par mafieulemouton

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture UNE BOITE DE MESSAGE (MSGBOX) QUI SE PREND POUR UN POPUP par bigfish_le vrai
Source avec Zip Source avec une capture Source .NET (Dotnet) MESSAGEBOX HELPER par raffika
Source avec Zip Source .NET (Dotnet) INPUTBOX PERSONNALISABLE AVEC LE CODE SOURCE VB par Patrice99
Source avec Zip Source avec une capture Source .NET (Dotnet) MESSAGEBOX D'ERREUR COMPLET par NHenry
Source avec Zip ERROR MESSAGE : ENVOYER DES MESSAGE D'ERREUR EN MSGBOX AVEC ... par Alucard49000

Commentaires et avis

Commentaire de Alain Proviste le 19/09/2005 15:16:28 administrateur CS

la fonction msgbox n'arrete pas tous les processus qui tournent, seulement celui de ton application, n'est-ce pas

Commentaire de econs le 19/09/2005 15:20:27 administrateur CS

oui, bien entendu. C'est un peu 'raccourci' la chose ;o)

Commentaire de Neo.balastik le 19/09/2005 16:39:21

Bien bien...

Commentaire de Mikaels35 le 19/09/2005 17:19:48

Excellent, j'en avais assez de ces MSGBOX qui bloquent le programme en cours!

Commentaire de max12 le 19/09/2005 19:20:50 administrateur CS

C'est du déjà vu, mais celui que j'ai vu avant utilisait un thread :O

Commentaire de Neo.balastik le 19/09/2005 19:36:24

Vu qu'implanter un thread en VB est périlleux et incertain,...
Aussi, l'exemple proposé ici bloque tout de même le code jusqu'à ce que l'utilisateur ferme la messagebox tout en ne bloquant pas l'entièreté du processus.  
Via le thread, je suppose que rien n'était bloqué.  Ce qui est le but d'un thread.
Donc, les 2 exemples ne sont pas vraiment comparables.

Guy

Commentaire de BruNews le 19/09/2005 19:59:07 administrateur CS

On peut même dire que la seule chose incertaine avec un thread en VB est le moment du plantage mais plantage il finit par y avoir.

Commentaire de PCPT le 19/09/2005 21:47:50 administrateur CS

sans bloquer l'appli :
MessageBox 0, "ah ouai...", "___", 32
PCPT

Commentaire de Alain Proviste le 19/09/2005 23:47:16 administrateur CS

avec messagebox 0 on a une nouvel element dans la barre des taches de windows, ce qui est aussi un probleme à régler

Commentaire de draluorg le 20/09/2005 11:46:52

Salut,

Eh je dirai que c'est du deja vu et revu....

M'enfin apparement y en a plusieurs qui ne l'avaientt jamais vu donc ;)

@+

Commentaire de ScSami le 21/09/2005 03:25:56

Comme moi p.ex.!
Ce que je pige pas c'est que ça ne fonctionne qu'avec un timer ou toute l'apli continue à tourner en attendant!?!?
Sinon, faudrait en faire un ptit OCX... D'ailleurs, franchement, faudrait un jour faire un "pack" d'OCX regroupant les quelques APIs les plus courantes un peu à la manière du framework .Net mais pour VB6 (histoire de préserver encore un peu notre tant aimé VB6 ;-)...

Commentaire de draluorg le 21/09/2005 11:18:22

Yep "toute l'appli" dont tu  parle c'est le thread principal de ton appli, la messageBox va elle ouvrir un deuxieme thread de maniere a tourner independament du reste de l'appli...

Ce qui a pour consequence que ton appli n'est pas stoppee en attendant que l'utilisateur ne clic sur la MessageBox, cela peut etre tres utilile dans certains cas mais dans la plupart des cas il est preferable d'utiliser une MessageBox ordinaire (dans le meme thread)

Bonne prog @+

Commentaire de BruNews le 21/09/2005 11:36:04 administrateur CS

Pas du tout, MessageBox pas plus que nimporte quelle autre affichage de fenêtre ne crée de thread.
Il faut demander avant d'affirmer nimporte quoi. L'appel interne à DialogBoxParam avec 0 en fenêtre mère crée simplement une fenêtre non modale, absolument rien de plus.

Commentaire de draluorg le 21/09/2005 16:50:07

Yep en effet autant pour moi...
Je sais pas pq j'avais en tete que c'etait dans un autre thread

Enfin bon le principe est le meme ;)

@+

Commentaire de Alain Proviste le 21/09/2005 21:23:07 administrateur CS

ptetre à cause de lautre source du site qui elle passe part un autre thread

Commentaire de us_30 le 01/11/2005 10:07:34

... et bien, pour moi, c'est 10/10 ! Cela enlève une limitation de VB de simple et élégante ! (et courte !) qui était quelques fois gênante...

Amicalement,
Us.

Commentaire de amezghal le 11/04/2006 14:37:50

vous ne pensez pas que si en elmine l arret des processus en risque que le msgbox ne retourne rien
donc c en met
response=msgbox("test",vbokonly)
alors response devient nothing ?

Commentaire de Exploreur le 10/12/2006 19:01:48

Salut Econs,

Merci de cette function qui m'est très utile et de ta réponse dans le forum...
A+
10/10
Exploreur

Commentaire de Golard le 06/08/2008 11:04:23

Salut à tous,

Je ravive un peu ces anciens commentaires avec celui-ci:

Si je ne me trompe pas, MsgBox NE BLOQUE PLUS L'APPLI sous XP.
En effet, sous XP (idem sous Vista) le timer de l'exemple fournit par econs n'ai pluis bloqué, quelque soit la méthode utilisée.

Vrai ou faux ? Aurais-je loupé quelquechose ?

Commentaire de us_30 le 06/08/2008 12:12:47

" Vrai ou faux ? "
Faux.

" Aurais-je loupé quelquechose ? "
Oui.

Essayes donc le code proposé. Dans VB6 (même sous XP), mettre une Form avec un Label, 2 boutons, et un Timer...

... et relis le 1er d'Alain Proviste, c'est peut-être là ta confusion...

Amicalement,
Us.

Commentaire de Golard le 06/08/2008 12:40:43

"Essayes donc le code proposé. Dans VB6 (même sous XP), mettre une Form avec un Label, 2 boutons, et un Timer..."
Déjà fait avant mon premier commentaire.
J'ai compilé le code de econs sous Vb6 SP5 (Version 8988 VBA: Retail 6.0.8964 Forms3: 11.0.5601)
Sous XP SP2 : pas de blocage, ni par Command1, ni par Command2
Sous Vista SP1 : idem

"... et relis le 1er d'Alain Proviste"
C'est bien le timer de l'application dont la valeur est écrite dans le Label dont je parle.

" Aurais-je loupé quelquechose ? Oui."
Oui... mais quoi ????

Merci Us de ta réponse rapide. Peux-tu toi-même refaire le test?
Je reste pour l'instant interrogatif !!! Et j'attends ta réponse...

Amicalement,
Golard.

Commentaire de Alain Proviste le 06/08/2008 20:55:16 administrateur CS

moi aussi (j'attends la réponse)

Commentaire de PCPT le 06/08/2008 21:10:36 administrateur CS

de mémoire me semble que ce code était bel et bien utile sous XPSP1.
il l'est toujours (rappel : 'MSGBOX' bloque le thread de l'appli, pas 'MessageBox') sous Win2000 SP4

par contre en effet, sous win2003RS2 le MSGBOX classique ne bloque pas l'appli

(pas d'XPSP2 ou 3 à portée de main)

Commentaire de 78zerocool le 11/12/2011 22:43:34

ya encor plus simple tu cree une nouvelle form ...

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Comment créer une Frm MODALE du genre MsgBox ? [ par titicar ] En théorie, si l'on affiche une Frm MODALE, mon application ne peut plus afficher une autre Frm par dessus... Mais ça marche quand même dans le cas d' mysql et api [ par midgorn ] bonjour, j essaye d'acceder a une base mysql avec vb.j'utilise l'api mysql.apparemment la connection se passe bien , mais au moment d'executer une req Enlever un messagebox API [ par daveneo ] Bonjour, J'aimerais ne plus voir afficher le messagebox me proposant la&nbsp;d'enregistrer la modification d'un fichier excel pr&#233;cis.En fait, je Api pour msgbox [ par grandgalot ] je cherche un api qui me permettrait de positionné mes boites de message dans mon application de vb6 messagebox erreur ou mise en garde [ par Daydayer ] je sais comment cr&#233;er une msgbox simple (avec le bouton ok&nbsp;etc) mais jevoudrais savoir qu'est ce qu'il faut faire pour avoir une msgbox&nbsp Gestion de l'affichage d'un messageBox [ par ricomiracle ] Bonjour, Je d&#233;veloppe sous VB6 un outil utilisant MsOffice (automation) et j'ai un probl&#232;me: lorsque j'affiche des msgbox, je ne les vois pa API pour msgbox [ par nihaoma ] Bonjour à tous, est-ce que quelqu'un sait quelle est l'API et son point d'entrée qui est appelé par l'objet msgbox() de VB ? Plus exactement j'aimera Aide sur l'API GetDiskFreeSpace ou GetDiskFreeSpaceEx [ par sturtrid ] Bonjour à tous les confrères... Je viens faire appel à votre perspicacité car je rencontre un problème avec l'utilisation de l'API<br Problème MsgBox et MessageBox avec Visual.Net 2003 [ par rasta_raf ] Tout est dnas le titre.Avec un code pareil : MsgBox("Clic sur bouton")Ca génére, ca soir le messga box avec un bouton dedans, mais ia rien sur le bo stopper une macro avec une userform non modale [ par sylv1loop ] Bonjour, Je me decide a poster pour demander de l'aide car malgres de nombreuses recherche sur mon probleme, je n'ai rien trouve. Voila : je recher


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,510 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales