Viendo tu código y al darme cuenta de que el mensaje aparece dentro del form, se me ha ocurrido una idea para mostrar un mensaje en una ventana externa sin crear un nuevo formulario. Quizá le interese a alguien experimentar con ello.
He tenido que añadir una llamada a una api, pero el resultado puede valer la pena.
Con un poco más de código se puede hacer siempre visible o que se pueda arrastrar con el ratón, pero de momento esto es lo que he hecho.
Crear un formulario con un timer llamado msgTimer. Añadir un frame (Frame1), y dentro de ese frame 2 labels y un commandbutton (Label1, Label2 y Command1)
Añadir otro CommandButton fuera del frame (Command2)
Y este código:
Código vb:
Ver originalOption Explicit
Dim DuracionMensajes As Integer
Dim ContadorDuracion As Integer
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hwndNewParent As Long) As Long
Private Sub Command1_Click()
' este command esta dentro del frame
' y sirve para cerrar la ventana
ContadorDuracion = DuracionMensajes - 1
msgTimer_Timer
End Sub
Private Sub Command2_Click()
' este timer esta en el form para probar el mensaje
SetParent Frame1.hWnd, 0
Frame1.Visible = True
Frame1.Top = (Screen.Height - Frame1.Height) / 2
Frame1.Left = (Screen.Width - Frame1.Width) / 2
msgTimer.Enabled = True
End Sub
Private Sub Form_Load()
msgTimer.Enabled = False
msgTimer.Interval = 1000
DuracionMensajes = 5 ' mostraremos el mensaje 5 segundos
Frame1.Visible = False
Frame1.Caption = "Aviso"
Label1.Caption = "Aqui tu mensaje"
Label2.Caption = CStr(DuracionMensajes) ' Este label muestra la cuenta atras
Command2.Caption = "Mostrar mensaje"
Command1.Caption = "Aceptar"
End Sub
Private Sub msgTimer_Timer()
ContadorDuracion = ContadorDuracion + 1
Label2.Caption = DuracionMensajes - ContadorDuracion
If ContadorDuracion >= DuracionMensajes Then
Frame1.Visible = False
SetParent Frame1.hWnd, Me.hWnd
msgTimer.Enabled = False
ContadorDuracion = 0
Label2.Caption = CStr(DuracionMensajes) ' Este label muestra la cuenta atras
End If
End Sub
Saludos
PD: Lo bueno de este método es que puedes tener minimizado el formulario y mostrar el mensaje sin restaurar el formulario.