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 |
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
|
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: