 VB - Formulários
revisitados
 VB - Formulários
revisitadosNo artigo - Usando Formulários no VB - abordei as principais propriedades e métodos dos formulários. Em continuação vou mostar algumas aplicações práticas da utilização dos formulários que podem ser úteis no seu dia a dia de programador VB.
Em todos os exemplos você deverá iniciar um novo projeto padrão EXE no VB e usar o formulário padrão.
1-
Ficando sempre por cima 
Quer manter o seu formulário sempre por cima de qualquer outro formulário Windows ?
- Insira um novo módulo no seu projeto e digite o código abaixo no módulo : Nele temos a declaração das constantes , da API - SetWindowPos - e da função SemprePorCima(frm As Form) usada para manter seu form sempre por cima.
| Const
        HWND_TOPMOST = -1 Const HWND_NOTOPMOST = -2 Const SWP_NOSIZE = &H1 Const SWP_NOMOVE = &H2 Const SWP_NOACTIVATE = &H10 Const SWP_SHOWWINDOW = &H40 Private Declare Sub 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) Public Sub SemprePorCima(frm As Form) | 
- Agora no formulário que você deseja por sempre por cima basta inserir o código : O código invoca a função SemprePorCima e passa como argumento o formulário atual (Me).
| SemprePorCima Me | 
| Ao executar o projeto e abrir qualquer outra janela , seu form sempre estará por cima. |  | 
2- Como impedir que o usuário altere o tamanho do meu formulário ?
Vamos supor que o seu formulário tenha as seguintes medidas de altura e largura : 2415(Height) e 3840(Width). No evento Resize do formulário insira o código abaixo:
| Private Sub Form_Resize()   )
Select Case Me.Height
   Case Is < 2415
      Me.Height = 2415
   Case Is > 2415
      Me.Height = 2415
End SelectSelect Case Me.Width
  Case Is < 3840
    Me.Width = 3840
  Case Is > 3840
    Me.Width = 3840
End Select
End Sub
 | No evento
        Resize do formulário insira o código ao lado . -Ele não permite que as medidas do formulário seja alterada pelo usuário -Se as medidas forem alteradas além da altura e largura definida elas voltam ao valor padrão. | 
3- Como impedir que o seu formulário seja fechado quando o usuário clicar no 'botão' (X) do formulário ?
Para impedir que o formulário seja fechado apenas inclua o código abaixo no evento QueryUnload() :
| Private
        Sub Form_QueryUnload(Cancel As Integer, UnloadMode As
        Integer) Cancel = -1 End Sub | 
4- Como mover um formulário que não possua a barra de título ?
Para mover uma formulário você clica na barra de título do formulário e arrasta o form para onde quiser , certo ??
E se o formulário não tiver a barra de título ? Então faça o seguinte:
- Declare as APIs -SendMessage- e - ReleaseCapture - e as constantes na seção General Declarations do formulário:
| Private
        Declare Function SendMessage Lib "User32" Alias
        "SendMessageA" (ByVal hWnd As Long, ByVal wMsg
        As Long, ByVal wParam As Long, lParam As Any) As Long Private Declare Sub ReleaseCapture Lib "User32" () | 
- No evento - MouseMove - do formulário insira o código abaixo que permite que você mova o formulário:
| Private
        Sub Form_MouseMove(Button As Integer, Shift As
        Integer, X As Single, Y As Single) Dim lngReturnValue As Long If Button = 1 Then Call ReleaseCapture lngReturnValue = SendMessage(Me.hWnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&) End If End Sub | 
5- Como mover um controle em tempo de execução ?
Usando as mesmas API´s podemos mover um controle em tempo de execução no formulário , é só fazer a referência ao controle que deseja mover na API SendMessage e usar o evento MouseDown do controle. Vamos supor que o formulário tenha um controle Picture - Picture1 - que você quer mover , então faça assim :
Na seção General Declarations declare as APIs como acima e as constantes ( elas são diferentes):
| Private
        Declare Function SendMessage Lib "User32" Alias
        "SendMessageA" (ByVal hWnd As Long, ByVal wMsg
        As Long, ByVal wParam As Long, lParam As Any) As Long Private Declare Sub ReleaseCapture Lib "User32" () Const WM_SYSCOMMAND = &H112 Const SC_MOVE = &HF012 | 
Agora no evento MouseDown do controle - Picture1 - insira o seguinte código :
| Private
        Sub PICTURE1_MouseDown(Button As Integer, Shift As
        Integer, X As Single, Y As Single) Dim lngReturnValue As Long If Button = 1 Then Call ReleaseCapture lngReturnValue = SendMessage(Picture1.hWnd, WM_SYSCOMMAND, SC_MOVE, 0) End If End Sub | 
Pronto , agora é so clicar no controle e arrastar para onde quiser.
6- Quer saber se o seu formulário já esta carregado ?
Para saber se o formulário esta carregado basta verificar a coleção de formulários - Forms - conforme o código abaixo:
| Private Function AchaFormulario(ByVal form_name As String) As Form
Dim i As Integer
' Assume que não esta carregado
Set AchaFormulario = Nothing
' procura o formulário
For i = 0 To Forms.Count - 1
   If Forms(i).Name = form_name Then
   ' Se achar retorna o nome do formulario
      Set AchaFormulario = Forms(i)
      Exit For
   End If
Next i
End Function | 
7- Quer desabilitar todos os controles em um formulário ?
Simples !!! basta percorrer os controles no formulário e atribuindo o valor False a propriedade Enabled. Veja código abaixo:
| Dim i As Integer
For i = 0 To Form1.Controls.Count - 1
    Form1.Controls(i).Enabled = False
Next i
 | 
8- Por que meu formulário não aparece na barra de tarefas ?
Um formulário sempre irá aparecer na barra de tarefas , a menos que qualquer um dos seguintes itens seja verdadeiro :
Até o próxima artigo ... Bye...
José Carlos Macoratti