Visual Basic 6 - Usando Formulários Windows


Qual a primeira coisa que o VB faz quando você inicia um projeto do tipo Standard EXE ? Ele cria um formulário ( form1) inicial para sua aplicação. Embora possamos criar aplicações Windows sem formulários, essa não é a regra geral. A grande maioria das aplicações Windows utilizam formulários como base principal.

No VB não é diferente , você geralmente usa um formulário e nele inclui labels, caixas de texto , caixas de combinação , frames , etc... Então você deve tratar com carinho os formulários do seu projeto , e , fará isto se conhecer pelo menos as propriedades básicas relacionadas aos formulários. Vamos lá... 

Cuidando da aparência - BorderStyle

Podemos definir a aparência do nosso formulário usando a propriedade BorderStyle. Abaixo temos os estilos possíveis:

0 - None
1 - Fixed Single
2 - Sizable
3 - Fixed Dialog
4 - Fixed Toolwindow
5 - Sizable Toolwindow

Vejamos um resumo de cada estilo:

0 - None - O formulário não possui : borda, barra de título, botão para minimizar, maximizar ou fechar. Por padrão o ícone do formulário não é exibido na barra de tarefas. É utilizado para criar telas de apresentação dentre outros usos.

1-Fixed Single - O formulário possui borda , barra de titulo e o botão fechar. Não pode ser redimensionado . Os botões Minimizar e Maximizar podem ser incluidos através das propriedades: MinButton e MaxButton.

2- Sizable - É o estilo padrão . O formulário possui borda, barra de título, e todos os botões : minimizar, maximizar e fechar. Pode ser redimensionado .
3-Fixed Dialog - Formulário com borda , barra de título e botão Fechar. Não pode ser redimensionado . Seu icone não é exibido na barra de tarefas.
4- Fixed ToolWindow - O Formulário possui a barra de titulo e o botão fechar com um X menor. Não pode ser redimensionado.
5- Sizable ToolWindow - O Formulário possui a barra de titulo e o botão fechar com um X menor. Pode ser redimensionado.

Propriedades de um Formulário

Veremos agora as principais propriedades de um formulário :

Propriedade Altera 
Name O nome do formulário
Caption O texto da barra de título
BackColor A cor de fundo
ForeColor A cor das linhas desenhadas em tempo de execução
BorderStyle Já estudada acima
MaxButton Exibe o botão Maximizar
MinButton Exibe o botão Minimizar
MDIChild Comporta-se como um MDI Child (janela dentro de outra)
Moveable Se o formulário pode ser movido ou não
ShowInTaskbar Se o formulário irá ser exibido na barra de tarefas
StartUpPosition Onde o formulário será exibido inicialmente

Além destas propriedades os formulários também possuem métodos e eventos, abaixo os principais:

Método Hide, Move, Paint, PrintForm, Refresh, SetFocus, Show
Eventos Activate, Click, DblClick, Deactivate, DragDrop, DragOver, GotFocus, Load, LostFocus, MouseDown, MouseMove, Unload

Carregando, Exibindo e  Escondendo um formulário

Para exibir um formulário usamos o método Show . Ele carrega o formulário na memória e o exibe tornando-o visível. A sintaxe é a seguinte:

object.Show style, ownerform

- Object : no caso , o nome do formulário a ser exibido

- Style : Valor Inteiro  que define se o formulário é modal ( 1 ou vbmodal)  ou não modal ( 0 ou modeless). Opcional

- Ownerform - String que define o componente pertence ao formulário exibido

Nota - Você sabe o que é um formulário modal ?

Um formulário Modal não deixa que o usuário passe de um formulário para outro na mesma aplicação. A maioria das caixas de dialogo no Visual Basic são modais. Quando um formulário modal é exibido, a aplicação gera um beep caso o usuário clique fora do formulário modal.

Um formulário modeless (que é o padrão do VB ao usar o método Show) permite ao usuário passar de um formulário para outro. Exemplos de formulário modeless no Ambiente de Desenvolvimento do Visual Basic são as janelas Project, Properties, Code e Formulários.

Private Sub cmdTeste_Click()

     frmTeste.Show vbModal        ‘ exibe o formulário como modal

End Sub

Lembre-se :

Para carregar um formulário na memória sem exíbí-lo usamos o evento Load .  Sintaxe:

Private Sub Form_Load( )

Private Sub MDIForm_Load( )

O evento Load é usualmente utilizado par incluir o código de inicialização do formulário . ( carregar combos , definir variáveis usadas no formulário ,etc...). 

O evento Load ocorre depois do evento Initialize.

Lembre-se:

Para descarregar um formulário usamos o evento Unload. Quando o formulário for recarregado o conteúdo de todos os controles serão reinicilizados. A sua sintaxe é:

Private Sub object_Unload(cancel As Integer)

Parte Descrição
Object No caso o formulário a ser removido.
Cancel Inteiro que determina se o formulário será removido. Se Cancel for igual a 0 o formulário é removido caso contrário não.


Lembre-se :

Nota: Voce sabe o que o evento QueryUnload ?

O evento QueryUnload ocorre antes de um formulário ou aplicação encerrar. Quando um objeto MDIForm é encerrado este evento ocorre primeiro para o formulário MDI e então para todos os formulários MDI Child.  Se o evento QueryUnload não for cancelado , o evento Unload ocorre primeiro para todos os formulários e então para o formulário MDI.  Sua sintaxe é:

Private Sub Form_QueryUnload(cancel As Integer, unloadmode As Integer)

Private Sub MDIForm_QueryUnload(cancel As Integer, unloadmode As Integer)


Para esconder um formulário sem descarregá-lo da memória usamos o evento HIDE. A sintaxe é :
Object.Hide

Vejamos um resumo das tarefas envolvendo os eventos discutidos:

Tarefa

Método ou função

Carregar um formulário na memória, mas não exibi-lo Use o comando LOAD, ou faça uma referencia ou a uma propriedade ou controle no formulário
Carregar e exibir um formulário Use o método SHOW
Exibir um formulário carregado Use o método SHOW
Esconder um formulário Use o método HIDE
Esconder um formulário e descarrega-lo da memória Use o comando UNLOAD

Vejamos um exemplo de utilização dos eventos mencionados, em um procedimento que inicia um aplicativo:

Sub Main()

     Load frmPrincipal       ‘Carrega para a memória o Formulário principal

     Load frmRegistro        ‘Carrega para a memória o  Formulário de registro

     ‘Define que o formulário será exibido maximizado

     frmPrincipal.WindowState = vbMaximized

     frmPrincipal.Show      ‘Exibe o formulário

End Sub   

Lembre-se :

Constante Descrição
vbAppTaskManager (3) O gerenciador de Tarefas do Windows esta fechando a aplicação.
vbAppWindows (2) Fechamento da sessão atual do Windows.
vbFormCode (1) O método Unload foi invocado pelo código
vbFormControlMenu (0) O usuário escolheu o comando  Close do menu Box de um formulário, ou clicou o botão X.
vbFormMDIForm (4) O formulário MDI child esta fechando pois o formulário MDI form esta sendo fechado.
vbFormOwner (5) O proprietário do formulário está fechado.

Carregando, Exibindo e  Escondendo um formulário

Posicionar o seu formulário ficou mais fácil a partir da versão 5.0 do VB.  Para centralizar um formulário na Versão 3.0 e na versão 4.0 usávamos o código abaixo , geralmente no evento Load do form.

Left = (Screen.Width - Width )  / 2

Top = (Screen.Height - Height )  / 2

A posição inicial pode ser facilmente configurada através das seguintes propriedades:

0 - Manual  (voce define a posição inicial através das propriedades Top e Left.)
1 - Center Screen (o formulário aparece no centro da tela.)
2 - Center Owner (O formulário aparece no centro da janela do qual ele é exibido.)
3 - Windows Default (O formulário aparece na posição padrão.)

Além disso podemos configurar também se o formulário será exibido Maximizado , minimizado ou na forma normal. Para isto usamos propriedade WindoState , assim:

0 - Normal              1 - Minimizado                  2 - Maximizado

Coleções de Formulários 

Uma coleção é um agrupamento de itens relacionados. O VB possui a coleção Forms que é composta por todos os formulários da aplicação.  Através da coleção forms podemos rastrear múltiplos formulários. 

Cada formulário em nossa aplicação possui uma coleção de controles embutida , e , você pode usar a coleção de controles em tempo de execução para ter acesso aos controles em um formulário sem precisar saber o nome de cada controle ou mesmo o tipo do controle. Tudo já esta pronto , você não precisar declarar nada , pois o VB monta e mantêm a coleção enquanto você desenha o formulário : incluindo e/ou excluindo controles do mesmo.

Aonde você pode usar toda esta teoria ??? Bem , que tal na entrada de dados usando formulários !!! Assim você pode escrever uma rotina genérica que pesquise a coleção de controles procurando por controles relacionados com os dados que você quer usar e alterar suas propriedades.

Você pode acessar a coleção de controles através da propriedade Controls de um formulário. Esta propriedade é um vetor (array) de variáveis objeto , onde cada elemento do vetor é um controle; o elemento 0 é o primeiro controle , o elemento 1 , o segundo , e por ai vai...

Assim se tivermos duas caixas de texto  (TextBox) teremos:

Form1.Controls(0).text = " Controle 0 "

Form1.Controls(1).text = " Controle 1

Lembre-se :

Public formularios As New Collection

Private Sub Command1_Click()
 Dim NovoForm As New Form1
 Static intnumero As Integer

  intnumero = intnumero + 1
  NovoForm.Caption = "Formulário # " & intnumero
  NovoForm.BackColor = QBColor(intnumero)
  formularios.Add NovoForm
  NovoForm.Show
End Sub

Neste código primeiro um objeto da coleção formulários e no evento Click do botão de comando declaramos a variável NovoForm do tipo Form1 usando a palavra New , isto criará uma nova instância de form1. Definimos as propriedades Caption e BackColor para cada instância afim de diferenciar os formulários. Abaixo o resultado quando o usuário clica no botão - Criar Novo Formulário.

O novo formulário é uma cópia de form1 e essa nova instância é adicionada a coleção formulários. 

Para acessar os formulários via coleção Forms podemos usar o seguinte código:

Dim I as integer

For I = 0 To formularios.Count
   Debug.Print Forms(I).Caption
Next I

Para acessar os controles de um formulário usamos a coleção Controls. Assim para esconder todos os controles de um formulário , fazemos:

For Each Control in Form1.Controls
   Control.Visible = False
Next Control

Assim , para descarregar todos os formulários de uma aplicação podemos usar o seguinte código:

For I = 0 To formularios.Count-1
    unload Forms(I)

Next I

Ou, podemos usar o código abaixo em uma função para saber se determinado formulário esta carregado ou não:

Private Function ProcuraForm(ByVal form_name As String) As Form
Dim i As Integer

Set ProcuraForm = Nothing

' Procura pelos forms carregados.
For i = 0 To Forms.Count - 1
   If Forms(i).Name = form_name Then
     
'se encontramos retorna o form.
      Set ProcuraForm = Forms(i)
     Exit For
   End If
Next i
End Function

MDIForm e MDI Child

Um MDI (Multiple-document-interface) form é uma janela que atua como um pando de fundo de uma aplicação e é o container para os formulários que têm a propriedade MDI Child definida como True.

Uma aplicação pode ter somente um objeto MDIForm e muitos formulários MDI Child .Se um formulário MDI tiver um menu o menu do formulário MDI Child irá substituí-lo quando estiver ativo. Ao minimizar um formulário MDI ele será exibido como um ícone dentro do MDIForm. Veja figuras abaixo:

MDIForm MDI Child Os ícones do MDI e MDI Child

Ao executar o projeto o MDI Form exibe o seu menu. Quando ativamos o MDI Child o menu do MDI Form é substituido pelo do MDIChild.

MDIForm com menu MDI Child ativado - o seu menu substitui o do MDIForm

Lembre-se :

For Each Control in MDIForm1.Controls
   Control.Visible = False
Next Control

Desabilitando o botão Fechar (Close - X ) via código

Podemos desabilitar o X do botão Fechar. Vamos fazer este serviço usando uma API, veja abaixo:

Private Declare Function DeleteMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
Private Declare Function GetSystemMenu Lib "user32" (ByVal hWnd As Long, ByVal bRevert As Long) As Long

Private Const MF_BYPOSITION = &H400&

Private Sub Form_Load()
  
'// desabilita o botão fechar
   RemoveMenus
End Sub

Private Sub RemoveMenus()
  Dim hMenu As Long
  hMenu = GetSystemMenu(hWnd, False)
  DeleteMenu hMenu, 6, MF_BYPOSITION
End Sub

Ao executar o projeto devemos obter o seguinte resultado:

Acessando controles de um formulário a partir de outro formulário

Acessar os controles de um formulário a partir de outro formulário é uma tarefa muito simples , é só você informar o nome do formulário antes do nome do controle que quer acessar. Vamos supor que você tenha dois formulários : form1 e form2 e que no formulário form1 você tenha um controle Text1 e no formulário um outro controle Text1.

Suponha que você esteja com o formulário form1 carregado ,  para acessar o controle Text1 do formulário form1 fazemos:

msgbox text1.text    ou  msgbox me.text1.text

Para acessar o controle Text1 do formulário form2 que não esta carregado fazemos:

msgbox form2.text1.text

A mesma regra vale quando você quer alterar as propriedades de algum controle presente em outro formulário.

Obs: Se o formulário form2 não estiver carregado  o VB irá carregá-lo acessar ou alterar as propriedades dos controles mas não vai exibir o formulário ; você verá as mudanças somente quando carregar o formulário.

- Minimizando todos os formulários :

copie o código abaixo em um módulo no seu projeto e chame a função - MinimizarForms()

public sub MinimizarForms()
      dim objTemp as object

      for each objTemp in forms
           objTemp.windowstate = 1
      next
end sub

- Descarregar todos os formulários:

Copie o código abaixo no evento Query_Unload do seu formulário

dim ret as object

for each ret in forms
   unload ret
   set ret = nothing
next

Agora acabei ... Até mais ver

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti