Movendo um formulário sem barra de título

 

Criar um formulário sem barra de título é uma tarefa muito simples que se resume a setar a propriedade FormBorderStyle para None. Essa ação, no entanto, cria um problema já que não é mais possível mover o formulário pela via normal (clicando na barra de título e arrastando o formulário para a nova posição). Experimente testar, criando um formulário como o da imagem a seguir.

 

Para programar a capacidade de arrastar o formulário com o botão esquerdo do mouse, use o código a seguir:

 

Public Class Form1

 

    ' Declarações da API de Windows e de constantes relacionadas

    Private Const WM_SYSCOMMAND As Integer = &H112&

    Private Const MOUSE_MOVE As Integer = &HF012&

 

    "user32.DLL", EntryPoint:="ReleaseCapture")> _

    Private Shared Sub ReleaseCapture()

    End Sub

 

    "user32.DLL", EntryPoint:="SendMessage")> _

    Private Shared Sub SendMessage( _

            ByVal hWnd As System.IntPtr, ByVal wMsg As Integer, _

            ByVal wParam As Integer, ByVal lParam As Integer)

    End Sub

 

    Private Sub moverForm()

        ReleaseCapture()

        SendMessage(Me.Handle, WM_SYSCOMMAND, MOUSE_MOVE, 0)

    End Sub

 

    Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) _

    Handles MyBase.MouseMove, Label1.MouseMove, Label2.MouseMove, Label3.MouseMove, btnFechar.MouseMove

        If e.Button = MouseButtons.Left Then

            moverForm()

        End If

    End Sub

 

    Private Sub btnFechar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFechar.Click

        Me.Close()

    End Sub

End Class

 

Repare no trecho em negrito. É necessário tratamento para o evento MouseMove de todos os controles do formulário para que você possa arrastar o form quando estiver com o ponteiro sobre cada um desses controles. Note também que incluímos um botão Fechar no form para permitir encerrar o exemplo.

 

Cláudio Ralha (claudioralha@hotmail.com)