Mostrar un msgbox en primer plano
Resuelto
quent
-
quent -
quent -
Hola,
He hecho un programa con Microsoft Visual Basic 2010 Express. Este programa es muy simple: ingreso una cantidad de horas, minutos y segundos y hace el conteo. Cuando llega al final, muestro un msgbox para avisar que ha terminado. Hasta ahí, ningún problema.
mi problema es que cuando el conteo se termina y estoy trabajando en otro programa en ese momento, no aparece la ventana en primer plano y por tanto no veo que ha terminado.
no he encontrado ninguna solución en internet.
Gracias de antemano por sus respuestas
He hecho un programa con Microsoft Visual Basic 2010 Express. Este programa es muy simple: ingreso una cantidad de horas, minutos y segundos y hace el conteo. Cuando llega al final, muestro un msgbox para avisar que ha terminado. Hasta ahí, ningún problema.
mi problema es que cuando el conteo se termina y estoy trabajando en otro programa en ese momento, no aparece la ventana en primer plano y por tanto no veo que ha terminado.
no he encontrado ninguna solución en internet.
Gracias de antemano por sus respuestas
18 respuestas
Sí, es posible:
Form1
Form2
--
@+ El Pivert
Form1
My.Computer.Audio.Play("C:\Windows\Media\Alarm01.wav", AudioPlayMode.BackgroundLoop) 'reproduce en bucle Form2.ShowDialog() Form2
'Detiene la reproducción del sonido My.Computer.Audio.Stop() Me.Hide()
--
@+ El Pivert
quent
¡Es exactamente lo que quería, gracias!
Hola,
¿por qué no reproducir un sonido en lugar de un MsgBox, como esto:
la ruta del archivo wave es para Windows 8.1, a verificar en el PC
--
@+ El Pivert
¿por qué no reproducir un sonido en lugar de un MsgBox, como esto:
My.Computer.Audio.Play("C:\Windows\Media\Alarm01.wav", AudioPlayMode.WaitToComplete) 'reproduce por completo, no se detiene hasta que termina la pieza la ruta del archivo wave es para Windows 8.1, a verificar en el PC
--
@+ El Pivert
Para crear un MsgBox en primer plano debes usar una de las siguientes valores:
16 --> OK
17 --> OK + CANCEL
18 --> ABORT + RETRY + IGNORE
19 --> YES + NO + CANCEL
20 --> YES + NO
21 --> RETRY + CANCEL
La ventana se mostrará en CRITICAL, lo que significa en primer plano pero también con el sonido de Windows.
Ejemplo de código en vbscript:
x= MsgBox ("El Texto de la ventana",20,"El Título de la ventana")
if x = 6 then //si el usuario hace clic en SI
.....
elseif x = 7 then
.....
end if
16 --> OK
17 --> OK + CANCEL
18 --> ABORT + RETRY + IGNORE
19 --> YES + NO + CANCEL
20 --> YES + NO
21 --> RETRY + CANCEL
La ventana se mostrará en CRITICAL, lo que significa en primer plano pero también con el sonido de Windows.
Ejemplo de código en vbscript:
x= MsgBox ("El Texto de la ventana",20,"El Título de la ventana")
if x = 6 then //si el usuario hace clic en SI
.....
elseif x = 7 then
.....
end if
Hola y gracias por vuestras respuestas,
para responder a cs_Le Pivert, en efecto tu método funciona y es por eso que lo voy a usar si no encuentro otra solución pero el problema es que todavía tengo el sonido de mi PC encendido :) (a menos que exista un comando para encender automáticamente el sonido)
para responder a MrWhitediamond, eso no soluciona mi problema porque hiciste como mi código pero cambiando el botón OK por botones sí y no pero eso tampoco muestra la ventana en primer plano. por otro lado hablas de mostrarse en critical, no sé qué querías decir con eso pero me recordó que hay un parámetro que permite mostrar la ventana con un signo de exclamación como si hubiese un error lo que tal vez tenga el efecto de mostrarla en primer plano. no pude probar porque no recuerdo ese parámetro así que si alguien lo conoce, podría intentar.
gracias de nuevo por intentar resolver mi problema.
para responder a cs_Le Pivert, en efecto tu método funciona y es por eso que lo voy a usar si no encuentro otra solución pero el problema es que todavía tengo el sonido de mi PC encendido :) (a menos que exista un comando para encender automáticamente el sonido)
para responder a MrWhitediamond, eso no soluciona mi problema porque hiciste como mi código pero cambiando el botón OK por botones sí y no pero eso tampoco muestra la ventana en primer plano. por otro lado hablas de mostrarse en critical, no sé qué querías decir con eso pero me recordó que hay un parámetro que permite mostrar la ventana con un signo de exclamación como si hubiese un error lo que tal vez tenga el efecto de mostrarla en primer plano. no pude probar porque no recuerdo ese parámetro así que si alguien lo conoce, podría intentar.
gracias de nuevo por intentar resolver mi problema.
Aquí tienes mensaje en español manteniendo la estructura HTML:
Voila un ejemplo
pones un punto detrás de MessageBoxIcon. y tendrás un menú contextual con las otras opciones
--
@+ El Pivert
MessageBox.Show("Operación cancelada por el usuario!", "Apertura", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) pones un punto detrás de MessageBoxIcon. y tendrás un menú contextual con las otras opciones
--
@+ El Pivert
Me lo esperaba!
En este momento te propongo una segunda solución:
Haz tu MsgBox personalizada con un formulario
Vas al proyecto - Añadir un Formulario de Windows.
Normalmente se llamará Form2, si no, tú te ajustas
En el Form1, en lugar de la llamada a tu MsgBox, pon esto:
Y en tu Form2 añade un Label y un botón con este código:
Voilà, bonne programmation
--
@+ Le Pivert
En este momento te propongo una segunda solución:
Haz tu MsgBox personalizada con un formulario
Vas al proyecto - Añadir un Formulario de Windows.
Normalmente se llamará Form2, si no, tú te ajustas
En el Form1, en lugar de la llamada a tu MsgBox, pon esto:
Form2.ShowDialog()
Y en tu Form2 añade un Label y un botón con este código:
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 'Formulario se muestra por encima de los demás ControlBox = False Button1.Text = "Fermer" End Sub End Class
Voilà, bonne programmation
--
@+ Le Pivert
Para el sonido, prueba los archivos que empiezan con Windows, como esto:
Windows - Alarma de batería
Ver si funcionan sin el sonido
--
@+ El Pivert
Windows - Alarma de batería
Ver si funcionan sin el sonido
--
@+ El Pivert
Tu método con la form2 funciona perfectamente!!! ¡muchísimas gracias!
Ya solo me queda adaptar la ventana como quiero.
Para el sonido he intentado poner la tonada "Windows - Alarma batería.wav" pero falla y dice que no encuentra el archivo, mientras que con "Alarm01.wav" todo funciona bien!
quizás no pueda leer archivos cuyo nombre contiene espacios...
¡Gracias de nuevo!
Ya solo me queda adaptar la ventana como quiero.
Para el sonido he intentado poner la tonada "Windows - Alarma batería.wav" pero falla y dice que no encuentra el archivo, mientras que con "Alarm01.wav" todo funciona bien!
quizás no pueda leer archivos cuyo nombre contiene espacios...
¡Gracias de nuevo!
Hola,
me gustaría pedirte una ayuda adicional para mi proyecto:
tu idea de añadir un timbre/sonnerie me interesó y voy a agregar uno además del mensaje. me gustaría poder tener el mensaje abierto al mismo tiempo que suena la sonnerie y que si se cierra el mensaje antes de que termine la sonnerie, se apague la sonnerie a mitad. ¿Es posible?
me gustaría pedirte una ayuda adicional para mi proyecto:
tu idea de añadir un timbre/sonnerie me interesó y voy a agregar uno además del mensaje. me gustaría poder tener el mensaje abierto al mismo tiempo que suena la sonnerie y que si se cierra el mensaje antes de que termine la sonnerie, se apague la sonnerie a mitad. ¿Es posible?
Hola,
Una cosa más: ¿se puede, ya sea activar automáticamente el sonido de la PC, o verificar si el sonido de la PC está encendido?
Una cosa más: ¿se puede, ya sea activar automáticamente el sonido de la PC, o verificar si el sonido de la PC está encendido?
Tienes suerte, ¡he encontrado lo que buscas!!!
Colocas 3 botones con este código:
Haces clic en Muet una vez más para volver a activar el sonido. a ti de adaptarlo en tu proyecto.
--
@+ Le Pivert
Colocas 3 botones con este código:
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 Haces clic en Muet una vez más para volver a activar el sonido. a ti de adaptarlo en tu proyecto.
--
@+ Le Pivert
Hola,
¿has probado este código?
porque yo cuando me las líneas
me subraya todos los elementos de mi form1 y si no los pongo subraya las líneas
y en todos los casos no puede compilar
¿has probado este código?
porque yo cuando me las líneas
Option Strict On Imports System.Runtime.InteropServices
me subraya todos los elementos de mi form1 y si no los pongo subraya las líneas
<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 y en todos los casos no puede compilar
Por supuesto que lo probé!
aquí va, inténtalo:
http://www.cjoint.com/data3/3AjiiXwTTly.htm
--
@+ El Pivert
aquí va, inténtalo:
http://www.cjoint.com/data3/3AjiiXwTTly.htm
--
@+ El Pivert
El código que me diste funciona bien, pero he entendido qué es lo que no va: tengo las variables h, m y s que corresponden a las horas, minutos y segundos de mi cuenta atrás y estas informaciones las recupero en textbox. Normalmente, hace bien la conversión string → integer, pero con las líneas
Option Strict On Imports System.Runtime.InteropServices
no quiere realizar la conversión de un tipo a otro. ¿Tienes alguna idea?
Option Strict On Imports System.Runtime.InteropServices
no quiere realizar la conversión de un tipo a otro. ¿Tienes alguna idea?
Normalmente tienes tus variables que muestran el error en rojo, solo hay que hacer clic derecho sobre él para corregirlo. Si no, lo más sencillo es eliminar esa línea
Option Strict On
Pongo Option Strict On para codificar de forma limpia, es una buena costumbre a adoptar
--
@+ Le Pivert
Option Strict On
Pongo Option Strict On para codificar de forma limpia, es una buena costumbre a adoptar
--
@+ Le Pivert
¡He encontrado! ¡Hacer falta usar la función CInt() para convertir mi variable!
Entonces el código que me diste funciona bien pero tengo otro problema: si el sonido está encendido y pulso mute, se apaga. En segundo lugar, puedo subir y bajar el volumen pero no puedo elegir un valor fijo; yo quisiera encender el sonido y fijar su valor para que sea siempre el mismo, y las funciones que me diste no me permiten hacerlo.
¿conoces alguna forma de fijar el sonido a un cierto valor o de conocer su valor actual para subir o bajar lo necesario?
Entonces el código que me diste funciona bien pero tengo otro problema: si el sonido está encendido y pulso mute, se apaga. En segundo lugar, puedo subir y bajar el volumen pero no puedo elegir un valor fijo; yo quisiera encender el sonido y fijar su valor para que sea siempre el mismo, y las funciones que me diste no me permiten hacerlo.
¿conoces alguna forma de fijar el sonido a un cierto valor o de conocer su valor actual para subir o bajar lo necesario?
Lo que quieres hacer es una aplicación de control de volumen. Creo que para asociarlo a tu MsgBox es un poco pesado. Te propongo una alternativa.
Cuando pongas esto para subir el volumen, se desactiva el modo silencio:
Si lo pones 3 veces, sube 3 veces; lo he probado:
La ventaja con 3 líneas de código es que desactivas el modo silencio y subes el volumen tres veces más.
Buen fin de semana
--
@+ Le Pivert
Cuando pongas esto para subir el volumen, se desactiva el modo silencio:
SendMessage(Me.Handle, WM_APPCOMMAND, CType(&H30292, IntPtr), CType(APPCOMMAND_VOLUME_UP * &H10000, IntPtr))
Si lo pones 3 veces, sube 3 veces; lo he probado:
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))
La ventaja con 3 líneas de código es que desactivas el modo silencio y subes el volumen tres veces más.
Buen fin de semana
--
@+ Le Pivert
Hola,
He adaptado tu idea para obtener exactamente el volumen que quiero:
bajo el sonido 50 veces porque el volumen máximo de mi PC es 100 y la línea
baja 2, así que quedo en 0 y luego incremento el número de veces que quiero (por ejemplo 15 veces si quiero un volumen de 30) y en el camino se quita el silencio. Eso da:
no es muy optimizado pero funciona bien.
¡muchas gracias por tu ayuda!
He adaptado tu idea para obtener exactamente el volumen que quiero:
bajo el sonido 50 veces porque el volumen máximo de mi PC es 100 y la línea
SendMessage(Me.Handle, WM_APPCOMMAND, CType(&H30292, IntPtr), CType(APPCOMMAND_VOLUME_DOWN * &H10000, IntPtr))
baja 2, así que quedo en 0 y luego incremento el número de veces que quiero (por ejemplo 15 veces si quiero un volumen de 30) y en el camino se quita el silencio. Eso da:
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
no es muy optimizado pero funciona bien.
¡muchas gracias por tu ayuda!