Muchas gracias amigo pkj, ante todo, que te quede claro que en ningún momento he pensado que menospreciabas mi trabajo, es más, con tu inestimable ayuda la función puede tener una gran mejora y con tu permiso la dejo de esta manera:
Para que funcione el código se necesitará un Frame llamado
msgFrame, un Label dentro de msgFrame llamado
msgLabel y un Timer llamado
msgTimer
Código vb:
Ver originalOption Explicit
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hwndNewParent As Long) As Long
Private Sub msgMensaje(Optional Mensaje As String, _
Optional Segundos As Integer = 5, _
Optional Objeto As Variant, _
Optional Centrado As Boolean = False)
' Rutina para mostrar u ocultar el mensaje, todos los parámetros son Opcionales
' la simple llamada de msgMensaje sin parámetros, lo inicializará
' Detenemos Temporizador, Ajustamos intervalo, Ocultamos mensaje
msgTimer.Enabled = False
msgTimer.Interval = Segundos * 1000
msgFrame.Visible = False
' Ajustamos el tamaño del Frame exactamente con el Label (Esto no es necesario)
msgFrame.Width = msgLabel.Width
msgFrame.Height = msgLabel.Height
msgLabel.Move 0, 0
' Anclamos el frame al Objeto que opcionalmente le indiquemos
If IsObject(Objeto) Then
SetParent msgFrame.hWnd, Objeto.hWnd
' Si deseamos el objeto centrado lo centramos
If Centrado Then
msgFrame.Move (Objeto.Width - msgFrame.Width) / 2, (Objeto.Height - msgFrame.Height) / 2
Else
msgFrame.Move 0, 0
End If
End If
' Si hay mensaje lo ponemos, hacemos Visible el Frame y activamos Temporizador
If Mensaje <> "" Then
msgLabel.Caption = Mensaje
msgFrame.Visible = True
msgTimer.Enabled = True
End If
End Sub
Private Sub Form_Load()
' Inicializamos Temporizador y mensaje
msgMensaje
End Sub
Private Sub msgTimer_Timer()
' Llegado al tiempo, borramos mensaje
msgMensaje
End Sub
La siguiente es opcional, simplemente el Click en el label procederá a ocultar el mensaje, sin necesidad de un Command.
Código vb:
Ver originalPrivate Sub msgLabel_Click()
' Click sobre el Label lo ocultará (Esta Sub es opcional)
msgMensaje
End Sub
La llamada al mismo es bastante intuitiva por los nombres definidos en la Sub, pero unos ejemplos serían:
msgMensaje "Este es el mensaje a visualizar", , MSFlexGrid1, True
msgMensaje "Este es el mensaje a visualizar", , Form1, True
msgMensaje "Este es el mensaje a visualizar", 3, Picture1
IMPORTANTE Recordad que el Objeto al que se puede 'Anclar' el Frame debe tener la propiedad
hWnd o de lo contrario se producirá un error.
Saludos