No pasar el foco

Hola!
Bueno mi duda es esta...
Estoy en una aplicación y aparece en pantalla un mensaje con msgbox. Bueno lo que yo quiero es que no pueda hacer un clic en la ventana que queda detrás (que es de la aplicación)para que el foco no pase a esta. Es decir, yo quiero que solo quede activa la ventana del mensaje y que no pueda pasar a la ventana de la aplicación hasta no hacer clic en uno de los botones de la caja de mensaje. Espero comprendan mi duda!
Saludos! J.
Respuesta
1
No se exactamente si el problema que tienes es que, una vez salido el messagebox, el usuario se pueda ir a otra aplicación, porque lo que es a la tuya (la que ha generado el messagebox) es imposible, ya que el messagebox siempre queda por encima de la aplicación generadora y es modal, con lo que no continua la ejecución de tu app hasta que no se apriete alguno de los posibles botones del messagebox.
Otra cosa es que tengas más aplicaciones abiertas y desplazes el foco a una de ellas.
Hay una posibilidad de que un formulario quede siempre visible y por encima de cualquier otra aplicación, lo que significa que te tocaría hacer un form con un aspecto y funcionalidad similar al messagebox. Cuando realices la carga del Form, en el evento Activate, llama a este procedimiento:
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
Public Sub pFormularioSiempreVisible(frm As Form, Optional ByVal Poner As Boolean = True)
Const HWND_BOTTOM As Integer = 1
Const HWND_NOTOPMOST As Integer = -2
Const HWND_TOP As Integer = 0
Const HWND_TOPMOST As Integer = -1
Const SWP_ASYNCWINDOWPOS As Integer = &H4000
Const SWP_DEFERERASE As Integer = &H2000
Const SWP_FRAMECHANGED As Integer = &H20
Const SWP_DRAWFRAME As Integer = SWP_FRAMECHANGED
Const SWP_HIDEWINDOW As Integer = &H80
Const SWP_NOACTIVATE As Integer = &H10
Const SWP_NOCOPYBITS As Integer = &H100
Const SWP_NOMOVE As Integer = &H2
Const SWP_NOOWNERZORDER As Integer = &H200
Const SWP_NOREDRAW As Integer = &H8
Const SWP_NOREPOSITION As Integer = SWP_NOOWNERZORDER
Const SWP_NOSENDCHANGING As Integer = &H400
Const SWP_NOSIZE As Integer = &H1
Const SWP_NOZORDER As Integer = &H4
Const SWP_SHOWWINDOW As Integer = &H40
If Poner Then
SetWindowPos frm.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE Or SWP_SHOWWINDOW Or SWP_NOACTIVATE
Else
SetWindowPos frm.hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE Or SWP_SHOWWINDOW Or SWP_NOACTIVATE
End If
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas