none
Formulario VB.net Modal sobre todas as aplicações RRS feed

  • Pergunta

  • Prezados,

    Minha aplicação tem apenas um formulário. Gostaria de saber como fazer pra que no momento que eu der um show() no formulário, esse formulário aparecesse de forma MODAL sobre as outras aplicações que estão rodando no windows. É mais ou menos assim:

    1 - Quando minha aplicação é iniciada, ela fica na tray do sistema esperando uma chamada.
    2 - Ao clicar no botão imprimir de qualquer aplicativo (word, excel, notepad e etc) e em seguida no botão ok que manda a impressão para o spool, meu formulário é exibido, pausa a impressão e aguarda alguns dados para liberar a impressão que está pausada no spool.

    Os itens 1 e 2 já estão funcionando, e com o código postado abaixo consigo fazer com que meu formulário fique sempre "por cima" de qualquer aplicativo que estiver ativo. A questão que até então não sei como fazer para que o formulário fique MODAL, não permitindo que até que ele seja fechado o usuário tenha acesso as funções dos aplicativos abertos.

    Eis o código que torna o formulario MODAL, acima de qualquer outro programa do windows:

    Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Integer, ByVal hWndInsertAfter As Integer, ByVal x As Integer, ByVal y As Integer, ByVal cx As Integer, ByVal cy As Integer, ByVal wFlags As Integer) As Long

        Private Const HWND_TOPMOST = -1

        Private Const HWND_NOTOPMOST = -2

        Private Const SWP_NOMOVE = &H2

        Private Const SWP_NOSIZE = &H1


        Const SWP_NOACTIVATE = &H10

        Const SWP_SHOWWINDOW = &H40


        Private Const TOPMOST_FLAGS = SWP_NOMOVE Or SWP_NOSIZE

        Public Sub MakeNormal(ByVal hwnd As Long)
            SetWindowPos(hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE)
        End Sub

        Public Sub MakeTopMost(ByVal hwnd As Long)
            SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE)
        End Sub
    End Class

    quinta-feira, 2 de julho de 2009 12:56

Todas as Respostas

  • Caro,

    Você pode deixar seu formulario acima de qualquer outro aplicativo apenas acionando a propriedade do formulario topmost com isso não necessita da função acima.

    form1.topmost=true

    Agora para bloquear em forma modal o formulario use

    form1.ShowDialog()

    Espero que seja isso!

    Até mais
    Robson Souza
    quinta-feira, 13 de agosto de 2009 18:20