Ver Mensaje Individual
  #5 (permalink)  
Antiguo 02/07/2010, 16:24
Avatar de erbuson
erbuson
 
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 14 años, 5 meses
Puntos: 53
Respuesta: Aportación: Mostrar un mensaje con temporizador

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 original
  1. Option Explicit
  2.  
  3. Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hwndNewParent As Long) As Long
  4.  
  5. Private Sub msgMensaje(Optional Mensaje As String, _
  6.                        Optional Segundos As Integer = 5, _
  7.                        Optional Objeto As Variant, _
  8.                        Optional Centrado As Boolean = False)
  9.   ' Rutina para mostrar u ocultar el mensaje, todos los parámetros son Opcionales
  10.  ' la simple llamada de msgMensaje sin parámetros, lo inicializará
  11.  
  12.   ' Detenemos Temporizador, Ajustamos intervalo, Ocultamos mensaje
  13.  msgTimer.Enabled = False
  14.   msgTimer.Interval = Segundos * 1000
  15.   msgFrame.Visible = False
  16.  
  17.   ' Ajustamos el tamaño del Frame exactamente con el Label (Esto no es necesario)
  18.  msgFrame.Width = msgLabel.Width
  19.   msgFrame.Height = msgLabel.Height
  20.   msgLabel.Move 0, 0
  21.  
  22.   ' Anclamos el frame al Objeto que opcionalmente le indiquemos
  23.  If IsObject(Objeto) Then
  24.     SetParent msgFrame.hWnd, Objeto.hWnd
  25.     ' Si deseamos el objeto centrado lo centramos
  26.    If Centrado Then
  27.       msgFrame.Move (Objeto.Width - msgFrame.Width) / 2, (Objeto.Height - msgFrame.Height) / 2
  28.     Else
  29.       msgFrame.Move 0, 0
  30.     End If
  31.   End If
  32.  
  33.   ' Si hay mensaje lo ponemos, hacemos Visible el Frame y activamos Temporizador
  34.  If Mensaje <> "" Then
  35.     msgLabel.Caption = Mensaje
  36.     msgFrame.Visible = True
  37.     msgTimer.Enabled = True
  38.   End If
  39. End Sub
  40.  
  41. Private Sub Form_Load()
  42.   ' Inicializamos Temporizador y mensaje
  43.  msgMensaje
  44. End Sub
  45.  
  46. Private Sub msgTimer_Timer()
  47.   ' Llegado al tiempo, borramos mensaje
  48.  msgMensaje
  49. 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 original
  1. Private Sub msgLabel_Click()
  2.   ' Click sobre el Label lo ocultará (Esta Sub es opcional)
  3.  msgMensaje
  4. 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
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...