• Lunes 23 de Diciembre de 2024, 10:44

Autor Tema:  Problema Con Formularios  (Leído 2550 veces)

ROBER.29

  • Miembro MUY activo
  • ***
  • Mensajes: 421
    • Ver Perfil
    • http://www.contrapixel.com
Problema Con Formularios
« en: Jueves 3 de Junio de 2004, 16:41 »
0
Hola,

Mi problema es el siguiente, tengo una aplicación que se ejecuta minimizada en la barra de tarea de windows, simplemente una vez arrancada aparece un icono al lado del reloj  de windows y el problema es que cuando se produce un error abro un formulario con el mensaje de error pero si por ejemplo el usuario esta navegando por internet, o está con el bloc de notas o cualquier otra aplicación, el formulario se keda abierto detrás de dicha aplicación y me gustaria que cuando se abriera el formulario que muestra el mensaje de error se mostrara por encima de todas las aplicaciones que el usuario tiene abiertas para que se enterara de que se aproducido un error y que la aplicación se a parado de ejecutar.

Por que por ejemplo si esta con el navegador abierto y está navegando por internet y se produce un error el usuario ahora mismo no se entera de que mi aplicación ha dado un error hasta que cierre el navegador o lo minimice y vea el formulario con el error.

Espero que me hayais entendido.

Un saludo.
Roberto García
Moderador de Visual Basic.
Gerente
[contra]PixeL S.L.
Valladolid

Brroz

  • Miembro de PLATA
  • *****
  • Mensajes: 1058
    • Ver Perfil
Re: Problema Con Formularios
« Respuesta #1 en: Jueves 3 de Junio de 2004, 18:15 »
0
Hola Rober.29.

Una vez que abres el form con el error (en el evento Load del mismo, por ejemplo) realiza una llamada a la función del api SetWindowPos algo así:

En el form que muestras con el error...
Código: Text
  1.  
  2. .
  3. .
  4. .
  5.  
  6. Private Const SWP_NOSIZE = &H1
  7. Private Const SWP_NOMOVE = &H2
  8. Private Const SWP_NOACTIVATE = &H10
  9. Private Const SWP_SHOWWINDOW = &H40
  10. Private Const SWP_FLAGS = SWP_NOMOVE Or SWP_NOSIZE Or SWP_SHOWWINDOW Or SWP_NOACTIVATE
  11.  
  12. Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
  13.  
  14. .
  15. .
  16. .
  17.  
  18. Private Sub Form_Load()
  19. .
  20. .
  21. .
  22.     SetWindowPos Me.hWnd, -1, 0, 0, 0, 0, SWP_FLAGS
  23. .
  24. .
  25. .
  26. End Sub
  27.  
  28.  

Con esto debería ser suficiente.

Chao.

ROBER.29

  • Miembro MUY activo
  • ***
  • Mensajes: 421
    • Ver Perfil
    • http://www.contrapixel.com
Re: Problema Con Formularios
« Respuesta #2 en: Viernes 4 de Junio de 2004, 14:19 »
0
Muchas gracias.

Al final ayer consegui hacerlo de la siguiente forma:

Este código en un módulo.
Código: Text
  1.  
  2. 'Posicionar formulario (Declaraciones Públicas de API)
  3. Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
  4. Public Const HWND_TOPMOST = -1
  5. Public Const HWND_NOTOPMOST = -2
  6. Public SWP_NOACTIVATE As Boolean
  7. Public SWP_SHOWWINDOW As Boolean
  8.  
  9.  
  10. 'Proecedimientos públicos
  11. Public Sub AlwaysOnTop(myfrm As Form, SetOnTop As Boolean)
  12.     Dim lflag As Integer
  13.     'Mantener el formulario siempre visible
  14.     If SetOnTop Then
  15.         lflag = HWND_TOPMOST
  16.     Else
  17.         lflag = HWND_NOTOPMOST
  18.     End If
  19.     SetWindowPos myfrm.hwnd, lflag, _
  20.     myfrm.Left / Screen.TwipsPerPixelX, _
  21.     myfrm.Top / Screen.TwipsPerPixelY, _
  22.     myfrm.Width / Screen.TwipsPerPixelX, _
  23.     myfrm.Height / Screen.TwipsPerPixelY, _
  24.     SWP_NOACTIVATE Or SWP_SHOWWINDOW
  25. End Sub
  26.  
  27.  

Y el evento Load del formulario:

Código: Text
  1.  
  2. Private Sub Form_Load()
  3.     AlwaysOnTop Me, True
  4. End Sub
  5.  
  6.  

Un saludo.
Roberto García
Moderador de Visual Basic.
Gerente
[contra]PixeL S.L.
Valladolid