Afficher un msgbox au premier plan [Résolu/Fermé]

Signaler
-
 quent -
Bonjour,
J'ai fais un programme avec microsoft visual basic 2010 express. ce programme est tout simple : je rentre un nombre d'heure, de minutes et de secondes et il fait le décompte. lorsque j'arrive a la fin, j'affiche un msgbox pour prévenir que c'est la fin. jusque la, aucun probleme.
mon probleme viens du fait que lorsque le décompte se termine et que je travaille sur un autre logiciel a ce moment la, il n'affiche pas la fenetre au premier plan et je ne vois donc pas que c'est terminer.
je n'ai trouvé aucune solution sur internet.

Merci par avance pour vos réponses

18 réponses

Messages postés
7359
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
1 mai 2021
631
Oui c'est possible:

Form1
   My.Computer.Audio.Play("C:\Windows\Media\Alarm01.wav", AudioPlayMode.BackgroundLoop) 'joue en boucle
        Form2.ShowDialog()


Form2
   'Arrete la lecture du son
        My.Computer.Audio.Stop()
        Me.Hide()

1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

C'est exactement ce que je voulais, merci beaucoup !
Messages postés
7359
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
1 mai 2021
631
Bonjour,

Pourquoi ne pas jouer un son à la place d'un MsgBox, comme ceci:

   My.Computer.Audio.Play("C:\Windows\Media\Alarm01.wav", AudioPlayMode.WaitToComplete) 'joue complétement, ne s'arrête qu'à la fin du morceau


le chemin du fichier wave est pour Windows 8.1, a vérifier sur le pc
Messages postés
31
Date d'inscription
mardi 6 janvier 2015
Statut
Membre
Dernière intervention
21 novembre 2015
1
Pour créer un MsgBox au premier plan tu dois utiliser une des values suivantes :

16 --> OK
17 --> OK + CANCEL
18 --> ABORT + RETRY + IGNORE
19 --> YES + NO + CANCEL
20 --> YES + NO
21 --> RETRY + CANCEL

La fenêtre s'affichera en CRITICAL, ce qui signifie en 1re plan mais aussi avec le son windows.

Exemple de code en vbscript :

x= MsgBox ("Le Texte de la fenêtre",20,"Le Titre de la fenêtre")
if x = 6 then //si l'utilisateur clique sur OUI
.....
elseif x = 7 then
.....
end if
Bonjour et merci de vos réponses,
pour répondre à cs_Le Pivert, en effet ta méthode marche et c'est donc celle que je vais utiliser si je ne trouve pas d'autre solution mais le problème est que je n'ai toujours le son de mon pc allumé :) (à moins qu'il existe une commande pour allumer automatique le son)

pour répondre à MrWhitediamond, cela ne résous pas mon problème car tu as fais comme mon code mais en changent le bouton OK en boutons oui et non mais cela n'affiche toujours pas la fenetre en premier plan. par contre tu as parler de s'afficher en critical, je ne sais pas ce que tu voulais dire par la mais cela m'as rappeler qu'il y a un paramètre permettant d'afficher la fenêtre avec un point d'exclamation comme si il y avais une erreur ce qui a peut-être pour effet de l'afficher au premier plan. je n'ai pas pu tester car je ne me rappelle plus de ce paramètre donc si quelqu'un le connait, je pourrais essayer.

merci encore de chercher à résoudre mon problème.
Messages postés
7359
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
1 mai 2021
631
Voila un exemple

     MessageBox.Show("Opération annulée par l'utilisateur!", "Ouverture", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)


tu mets un point derrière MessageBoxIcon. et tu auras un menu contextuel avec les autres options
Merci,
j'ai pu tester mais malheureusement ça ne marche pas.
sinon connais-tu un fonction permettant d'allumer le son de l'ordinateur ou de jouer la sonnerie même si le son est éteint ? (certaines applications le font)
Messages postés
7359
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
1 mai 2021
631
Je m'en doutais!

Dans l'immédiat je te propose une 2 ème solution:

Faire ton MsgBox perso avec un form

Tu vas dans projet- Ajouter un Formulaire Windows.
Normalement il va se nommer Form2, sinon tu adaptes

Dans le form1 à la place de l'appel de ton MsgBox tu mets ceci:

  Form2.ShowDialog()


Et dans ton Form2 tu ajoute un Label et un button avec ce code:

Public Class Form2
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Me.Hide()
    End Sub
    Private Sub Form2_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Me.Text = "MsgBox perso"
        Label1.Text = "Ceci est un message" & Environment.NewLine & "c'est la 2ème ligne" & Environment.NewLine & "c'est la 3ème ligne"
        Label1.AutoSize = True
        TopMost = True 'Formulaire s'affiche au dessus des autres
        ControlBox = False
        Button1.Text = "Fermer"
    End Sub
End Class


Voilà, bonne programmation
Messages postés
7359
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
1 mai 2021
631
Pour le son, essaie les fichiers commençant par Windows - comme ceci:

Windows - Alarme batterie

Voir si ils fonctionnent sans le son
Ta méthode avec la form2 marche parfaitement !!! merci infiniment !
Je n'ai plus qu'a adapté la fenêtre comme je veux.

Pour le son j'ai essayer de mettre la sonnerie "Windows - Alarme batterie.wav" mais il plante et dit qu'il ne trouve pas le fichier alors qu'avec "Alarm01.wav", tout se passe bien !
peut-être qu'il ne peut pas lire les fichiers dont le nom contient des espaces...

Encore merci !
Bonjour,
j'aimerais te demander une aide supplémentaire pour mon projet :
ton idée de rajouté une sonnerie m'a intéresser et je vais donc en mettre une en plus du message. j'aimerais pouvoir avoir le message ouvert en meme temps qu'il y a la sonnerie et que si on ferme le message avant que la sonnerie soit terminer alors on éteint la sonnerie au milieu. Est-ce possible ?
Bonjour,
Encore une chose : peut on, soit allumer automatiquement le son du pc, soit vérifier si le son du pc est allumé ?
Messages postés
7359
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
1 mai 2021
631
Non je ne vois pas, édite un nouveau post tu auras plus de réponses !
Messages postés
7359
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
1 mai 2021
631
Tu as de la chance, j'ai trouvé ce que tu cherches!!!

Tu mets 3 buttons avec ce code:

Option Strict On
Imports System.Runtime.InteropServices
Public Class Form1
    <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> Private Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As UInteger, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr
    End Function
    Const WM_APPCOMMAND As UInteger = &H319
    Const APPCOMMAND_VOLUME_UP As UInteger = &HA
    Const APPCOMMAND_VOLUME_DOWN As UInteger = &H9
    Const APPCOMMAND_VOLUME_MUTE As UInteger = &H8
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Button1.Text = "Monter"
        Button2.Text = "Baisser"
        Button3.Text = "Muet"
    End Sub
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        SendMessage(Me.Handle, WM_APPCOMMAND, CType(&H30292, IntPtr), CType(APPCOMMAND_VOLUME_UP * &H10000, IntPtr))
    End Sub
    Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
        SendMessage(Me.Handle, WM_APPCOMMAND, CType(&H30292, IntPtr), CType(APPCOMMAND_VOLUME_DOWN * &H10000, IntPtr))
    End Sub
    Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
        SendMessage(Me.Handle, WM_APPCOMMAND, CType(&H200EB0, IntPtr), CType(APPCOMMAND_VOLUME_MUTE * &H10000, IntPtr))
    End Sub
End Class


Tu cliques sur Muet un seconde fois pour remettre le son. à toi de l'adapter dans ton projet.
Bonjour,
as-tu tester ce code ?
parce que moi lorsque je me les lignes
Option Strict On
Imports System.Runtime.InteropServices

il souligne tous les élements de ma form1 et si je ne les met pas il souligne les lignes
<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> Private Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As UInteger, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr
End Function

et dans tous les cas il ne peut pas compiler
Messages postés
7359
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
1 mai 2021
631
Bien sur que je l'ai testé!

voilà, essaie le:

http://www.cjoint.com/data3/3AjiiXwTTly.htm
Le code que vous m'avez donner marche bien mais j'ai compris ce qu'il ne va pas :
j'ai les variables h,m et s qui correspondes aux heures, minutes et secondes de mon compte à rebour or ces informations, je les récupère dans des textbox. normalement, il fait bien la conversion string->integer mais avec les lignes
Option Strict On
Imports System.Runtime.InteropServices

il ne veut plus faire la conversion d'un type a un autre. Avez-vous une idée ?
Messages postés
7359
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
1 mai 2021
631
Normalement tu as tes variables qui affichent l'erreur en rouge, il suffit de faire un clic droit dessus pour la corriger. Sinon le plus simple c'est de supprimer cette ligne

Option Strict On

Je mets Option Strict On pour coder proprement, c'est une bonne habitude à prendre


J'ai trouvé ! Il fallait utiliser la fonction CInt() pour convertir ma variable.
Donc le code que tu m'a donné marche bien mais j'ai un autre problème, c'est que si le son est allumé et que je fait mute, ça éteint le son. Deuxièmement, je peux augmenter et diminuer le son mais je ne peut pas choisir une valeur fixe or moi j'aimerais allumer le son et fixer sa valeur de façon a que ce soit toujours la même et les fonctions que tu m'a donner ne me permettent pas de le faire.
connait tu un moyen de fixer le son a une certaine valeur ou de connaitre sa valeur actuelle pour augmenter ou diminuer de ce qu'il faut ?
Messages postés
7359
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
1 mai 2021
631
Ce que tu veux faire c'est une application de contrôle du son. Je pense que pour l'associer à ton MsgBox c'est un peu trop lourd. Je te propose une alternative.

Quand tu mets ceci pour monter le son, cela supprime le mode muet:

SendMessage(Me.Handle, WM_APPCOMMAND, CType(&H30292, IntPtr), CType(APPCOMMAND_VOLUME_UP * &H10000, IntPtr))


Si tu le mets 3 fois cela augmente de 3 fois, j'ai fait l'essai:

  SendMessage(Me.Handle, WM_APPCOMMAND, CType(&H30292, IntPtr), CType(APPCOMMAND_VOLUME_UP * &H10000, IntPtr))
        SendMessage(Me.Handle, WM_APPCOMMAND, CType(&H30292, IntPtr), CType(APPCOMMAND_VOLUME_UP * &H10000, IntPtr))
        SendMessage(Me.Handle, WM_APPCOMMAND, CType(&H30292, IntPtr), CType(APPCOMMAND_VOLUME_UP * &H10000, IntPtr))


L'avantage avec 3 lignes de code, tu supprimes le mode muet et tu montes le son 3 fois plus fort.


Bon WE
Bonjour,
J'ai adapté ton idée pour avoir exactement le volume que je veux :
je baisse le son 50 fois car le son maximal de mon pc est 100 et la ligne
SendMessage(Me.Handle, WM_APPCOMMAND, CType(&H30292, IntPtr), CType(APPCOMMAND_VOLUME_DOWN * &H10000, IntPtr))

baisse de 2, comme ca je suis a 0 et apres j'augmente du nombre de fois que je veux (par exemple 15 fois si je veux un volume de 30) et au passage ça enlève le muet. ça donne :
For i = 1 To 50
SendMessage(Me.Handle, WM_APPCOMMAND, CType(&H30292, IntPtr), CType(APPCOMMAND_VOLUME_DOWN * &H10000, IntPtr))
Next
For i = 1 To 15
SendMessage(Me.Handle, WM_APPCOMMAND, CType(&H30292, IntPtr), CType(APPCOMMAND_VOLUME_UP * &H10000, IntPtr))
Next

ce n'est pas très optimiser mais ça marche bien.
merci beaucoup pour ton aide !