Tutorial: Trabalhando com Formularios
A maioria das aplicacoes do mundo real precisa de mais de uma janela. Neste tutorial voce vai construir um projeto multi-formulario com um formulario principal e um dialogo de configuracoes. Voce aprendera a abrir formularios modalmente, passar dados entre eles e configurar propriedades comuns de formularios.
Passo 1: Configurar o Projeto
- Crie um novo projeto chamado
MultiFormDemovia Arquivo → Novo Projeto. - A IDE cria
main.prgcom um formulario inicial. - Vamos adicionar um segundo arquivo fonte para o formulario de configuracoes no proximo passo.
Passo 2: Projetar o Formulario Principal
- Abra
main.prgno Designer de Formularios. - Defina o titulo do formulario como
"Demo Multi-Formulario"e tamanho como700, 500. - Adicione um Rotulo no topo para exibir o nome do usuario atual — defina
cValuecomo"Usuario: (nenhum)". - Adicione um Botao com
cPromptdefinido como"Abrir Configuracoes".
Seu codigo do formulario principal ficara assim:
#include "hbbuilder.ch" function Main() local oForm, oLblUser, oBtnSettings DEFINE FORM oForm TITLE "Demo Multi-Formulario" ; SIZE 700, 500 FONT "Segoe UI", 10 @ 30, 50 LABEL oLblUser VALUE "Usuario: (nenhum)" ; OF oForm SIZE 300, 24 @ 80, 50 BUTTON oBtnSettings PROMPT "Abrir Configuracoes" ; OF oForm SIZE 140, 36 ; ACTION AbrirConfig( oForm, oLblUser ) ACTIVATE FORM oForm CENTERED return nil
Passo 3: Criar o Formulario de Configuracoes
- Selecione Arquivo → Novo Formulario para adicionar um segundo formulario ao projeto. Nomeie-o
settings.prg. - No Designer de Formularios para
settings.prg, defina o titulo como"Configuracoes"e tamanho como400, 300. - Adicione um Rotulo com
cValue"Seu nome:"na linha 30, coluna 30. - Adicione uma Caixa de Texto (
TGet) ao lado do rotulo para o usuario digitar o nome. - Adicione uma Caixa de Selecao abaixo com
cPrompt"Ativar modo escuro". - Adicione dois botoes: "OK" e "Cancelar" na parte inferior.
Passo 4: Implementar ShowModal e Passagem de Dados
A tecnica principal e chamar ShowModal() no formulario de configuracoes. Isso bloqueia o formulario principal
ate que o usuario feche o dialogo. Apos o formulario modal fechar, voce le de volta os valores que o
usuario informou.
static function AbrirConfig( oMainForm, oLblUser ) local oSettings, oGetName, oChkDark, oBtnOK, oBtnCancel local cName := "", lDark := .F., nResult DEFINE FORM oSettings TITLE "Configuracoes" ; SIZE 400, 300 FONT "Segoe UI", 10 ; STYLE "dialog" @ 30, 30 LABEL oLbl VALUE "Seu nome:" ; OF oSettings SIZE 100, 24 @ 30, 140 GET oGetName VAR cName ; OF oSettings SIZE 220, 24 @ 70, 30 CHECKBOX oChkDark VAR lDark ; PROMPT "Ativar modo escuro" ; OF oSettings SIZE 200, 24 @ 220, 180 BUTTON oBtnOK PROMPT "OK" ; OF oSettings SIZE 90, 32 ; ACTION ( oSettings:nModalResult := 1, oSettings:Close() ) @ 220, 280 BUTTON oBtnCancel PROMPT "Cancelar" ; OF oSettings SIZE 90, 32 ; ACTION ( oSettings:nModalResult := 0, oSettings:Close() ) nResult := oSettings:ShowModal( oMainForm ) if nResult == 1 oLblUser:SetValue( "Usuario: " + cName ) if lDark oMainForm:SetDarkMode( .T. ) else oMainForm:SetDarkMode( .F. ) endif endif return nil
Use ShowModal( oParent ) quando o usuario deve completar o dialogo antes de retornar ao pai.
Use Show() para janelas nao bloqueantes entre as quais o usuario pode alternar livremente.
Passo 5: Referencia de Propriedades do Formulario
Aqui estao as propriedades de formulario mais usadas que voce pode definir no Inspetor de Objetos ou no codigo:
| Propriedade | Tipo | Descricao |
|---|---|---|
cTitle |
String | Texto exibido na barra de titulo do formulario. |
nWidth / nHeight |
Numerico | Dimensoes do formulario em pixels. |
lMaximize |
Logico | Se o botao de maximizar esta habilitado. |
lMinimize |
Logico | Se o botao de minimizar esta habilitado. |
lResizable |
Logico | Se o usuario pode redimensionar o formulario. |
cStyle |
String | "normal", "dialog" ou "toolwindow". |
nModalResult |
Numerico | Valor de retorno apos ShowModal(). Defina antes de chamar Close(). |
Passo 6: Compilar e Testar
- Pressione F9 para compilar e executar.
- Clique em "Abrir Configuracoes" no formulario principal — o dialogo de configuracoes aparece modalmente.
- Digite um nome, alterne a caixa de selecao e clique em OK.
- O rotulo do formulario principal atualiza para mostrar o nome informado.
- Abra o dialogo novamente e clique em Cancelar — o formulario principal permanece inalterado.
Fluxo do Ciclo de Vida do Formulario
ACTIVATE FORM CENTERED"] --> B["Usuario clica em
Abrir Configuracoes"] B --> C["Formulario de Configuracoes
ShowModal( oMainForm )"] C --> D{"Acao do usuario"} D -->|"OK"| E["nModalResult = 1
Close()"] D -->|"Cancelar"| F["nModalResult = 0
Close()"] E --> G["Formulario principal le
cName e lDark"] F --> H["Formulario principal ignora
valores do dialogo"] style A fill:#58a6ff,stroke:#388bfd,color:#0d1117 style C fill:#d2a8ff,stroke:#bc8cff,color:#0d1117 style E fill:#3fb950,stroke:#2ea043,color:#0d1117 style F fill:#f0883e,stroke:#d18616,color:#0d1117
Agora que voce pode trabalhar com multiplos formularios, continue para o tutorial Tratamento de Eventos para aprender sobre todos os tipos de eventos disponiveis no HarbourBuilder.