No 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 Select Select 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