begin process at 2008 05 16 08:52:20
1 173 235 membres
76 nouveaux aujourd'hui
13 970 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

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


Information sur la source

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

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (18)
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
  • signaler à un administrateur
    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

  • signaler à un administrateur
    Commentaire de econs le 19/09/2005 15:20:27 administrateur CS

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

  • signaler à un administrateur
    Commentaire de Neo.balastik le 19/09/2005 16:39:21

    Bien bien...

  • signaler à un administrateur
    Commentaire de Mikaels35 le 19/09/2005 17:19:48

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

  • signaler à un administrateur
    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

  • signaler à un administrateur
    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

  • signaler à un administrateur
    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.

  • signaler à un administrateur
    Commentaire de PCPT le 19/09/2005 21:47:50 administrateur CS

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

  • signaler à un administrateur
    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

  • signaler à un administrateur
    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 ;)

    @+

  • signaler à un administrateur
    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 ;-)...

  • signaler à un administrateur
    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 @+

  • signaler à un administrateur
    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.

  • signaler à un administrateur
    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 ;)

    @+

  • signaler à un administrateur
    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

  • signaler à un administrateur
    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.

  • signaler à un administrateur
    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 ?

  • signaler à un administrateur
    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

Ajouter un commentaire

Appels d'offres

Pub



CalendriCode

Mai 2008
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS