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

  1. Crie um novo projeto chamado MultiFormDemo via Arquivo → Novo Projeto.
  2. A IDE cria main.prg com um formulario inicial.
  3. Vamos adicionar um segundo arquivo fonte para o formulario de configuracoes no proximo passo.

Passo 2: Projetar o Formulario Principal

  1. Abra main.prg no Designer de Formularios.
  2. Defina o titulo do formulario como "Demo Multi-Formulario" e tamanho como 700, 500.
  3. Adicione um Rotulo no topo para exibir o nome do usuario atual — defina cValue como "Usuario: (nenhum)".
  4. Adicione um Botao com cPrompt definido 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

  1. Selecione Arquivo → Novo Formulario para adicionar um segundo formulario ao projeto. Nomeie-o settings.prg.
  2. No Designer de Formularios para settings.prg, defina o titulo como "Configuracoes" e tamanho como 400, 300.
  3. Adicione um Rotulo com cValue "Seu nome:" na linha 30, coluna 30.
  4. Adicione uma Caixa de Texto (TGet) ao lado do rotulo para o usuario digitar o nome.
  5. Adicione uma Caixa de Selecao abaixo com cPrompt "Ativar modo escuro".
  6. 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
ShowModal vs. Show

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

  1. Pressione F9 para compilar e executar.
  2. Clique em "Abrir Configuracoes" no formulario principal — o dialogo de configuracoes aparece modalmente.
  3. Digite um nome, alterne a caixa de selecao e clique em OK.
  4. O rotulo do formulario principal atualiza para mostrar o nome informado.
  5. Abra o dialogo novamente e clique em Cancelar — o formulario principal permanece inalterado.

Fluxo do Ciclo de Vida do Formulario

graph TD A["Formulario Principal
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
Proximo passo

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.

Nesta Página

Primeiros Passos Paleta de Componentes Recursos da IDE Tutoriais Referencia Plataformas Passo 1: Configurar o Projeto Passo 2: Projetar o Formulario Principal Passo 3: Criar o Formulario de Configuracoes Passo 4: Implementar ShowModal e Passagem de Dados Passo 5: Referencia de Propriedades do Formulario Passo 6: Compilar e Testar Fluxo do Ciclo de Vida do Formulario