Ver Mensaje Individual
  #2 (permalink)  
Antiguo 02/07/2010, 05:45
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 8 meses
Puntos: 29
Respuesta: Aportación: Mostrar un mensaje con temporizador

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 original
  1. Option Explicit
  2. Dim DuracionMensajes As Integer
  3. Dim ContadorDuracion As Integer
  4. Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hwndNewParent As Long) As Long
  5.  
  6. Private Sub Command1_Click()
  7. ' este command esta dentro del frame
  8. ' y sirve para cerrar la ventana
  9.  ContadorDuracion = DuracionMensajes - 1
  10.   msgTimer_Timer
  11. End Sub
  12.  
  13. Private Sub Command2_Click()
  14.   ' este timer esta en el form para probar el mensaje
  15.  SetParent Frame1.hWnd, 0
  16.   Frame1.Visible = True
  17.   Frame1.Top = (Screen.Height - Frame1.Height) / 2
  18.   Frame1.Left = (Screen.Width - Frame1.Width) / 2
  19.   msgTimer.Enabled = True
  20. End Sub
  21.  
  22. Private Sub Form_Load()
  23.   msgTimer.Enabled = False
  24.   msgTimer.Interval = 1000
  25.   DuracionMensajes = 5 ' mostraremos el mensaje 5 segundos
  26.  Frame1.Visible = False
  27.   Frame1.Caption = "Aviso"
  28.   Label1.Caption = "Aqui tu mensaje"
  29.   Label2.Caption = CStr(DuracionMensajes) ' Este label muestra la cuenta atras
  30.  Command2.Caption = "Mostrar mensaje"
  31.   Command1.Caption = "Aceptar"
  32. End Sub
  33.  
  34. Private Sub msgTimer_Timer()
  35.   ContadorDuracion = ContadorDuracion + 1
  36.   Label2.Caption = DuracionMensajes - ContadorDuracion
  37.   If ContadorDuracion >= DuracionMensajes Then
  38.     Frame1.Visible = False
  39.     SetParent Frame1.hWnd, Me.hWnd
  40.     msgTimer.Enabled = False
  41.     ContadorDuracion = 0
  42.     Label2.Caption = CStr(DuracionMensajes) ' Este label muestra la cuenta atras
  43.  End If
  44. 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.
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!

Última edición por pkj; 02/07/2010 a las 05:54