Designer Visual de Formularios
O Designer de Formularios e um editor de formularios WYSIWYG (What You See Is What You Get) inspirado no Borland C++Builder. Projete formularios visualmente, arraste controles da paleta de componentes, defina propriedades no Inspetor de Objetos e veja o codigo gerar automaticamente.
Alteracoes no designer atualizam instantaneamente o codigo, e alteracoes no codigo atualizam o designer. Suas implementacoes de METHOD sao sempre preservadas durante a regeneracao do codigo.
Recursos do Designer
- Fundo com grade de pontos com snap-to-grid para alinhamento preciso
- Alcas de selecao — 8 alcas por controle selecionado para redimensionamento
- Selecao por elastico — clique e arraste para selecionar multiplos controles
- Arrastar e soltar da paleta de componentes para a superficie do formulario
- Geracao de codigo em tempo real — cada acao atualiza o codigo fonte
- Copiar/Colar controles — Cmd/Ctrl+C/V com deslocamento automatico de +16px
- Menu Formatar — alinhar e distribuir controles
Selecao de Controles
Selecao Unica
Clique em qualquer controle no formulario para seleciona-lo. Uma borda azul com 8 alcas de redimensionamento aparece:
- Alcas de canto — redimensionam largura e altura simultaneamente
- Alcas de borda — redimensionam apenas largura ou altura
- Arrastar corpo — move o controle sem redimensionar
Multi-Selecao
Mantenha Shift pressionado e clique para adicionar/remover controles da selecao, ou clique e arraste para criar um retangulo de selecao por elastico. Todos os controles selecionados mostram alcas simultaneamente.
Copiar e Colar Controles
O HarbourBuilder suporta operacoes completas de area de transferencia para controles:
| Atalho | Acao |
|---|---|
| Ctrl+C / Cmd+C | Copia os controles selecionados para a area de transferencia |
| Ctrl+V / Cmd+V | Cola os controles com deslocamento de +16px |
| Ctrl+X / Cmd+X | Recorta os controles selecionados (copiar + excluir) |
| Delete | Exclui os controles selecionados |
Ao colar, os controles sao automaticamente deslocados em 16 pixels para evitar sobreposicao com o original.
Menu Formatar
O menu Formatar oferece 8 modos de alinhamento e distribuicao:
| Comando | Descricao |
|---|---|
| Alinhar a Esquerda | Alinha todos os controles selecionados a borda esquerda do controle mais a esquerda |
| Alinhar a Direita | Alinha a borda direita do controle mais a direita |
| Alinhar ao Topo | Alinha ao topo do controle mais alto |
| Alinhar a Base | Alinha a base do controle mais baixo |
| Centralizar Horizontalmente | Centraliza todos os controles no eixo horizontal |
| Centralizar Verticalmente | Centraliza todos os controles no eixo vertical |
| Espacar Horizontalmente | Distribui os controles com espacamento horizontal igual |
| Espacar Verticalmente | Distribui os controles com espacamento vertical igual |
Geracao de Codigo em Tempo Real
Cada acao no designer gera codigo xBase correspondente. Por exemplo, soltar um botao gera:
@ 120, 140 BUTTON oBtn PROMPT "Button1" ; OF oForm SIZE 120, 32
Alterar propriedades no Inspetor de Objetos atualiza o codigo imediatamente. A sincronizacao bidirecional garante que seu design visual e codigo estejam sempre em harmonia.
Modo Design vs Modo Execucao
Formularios possuem uma propriedade FDesignMode que controla o comportamento:
| Modo | Comportamento |
|---|---|
| Modo Design (FDesignMode = .T.) | Controles podem ser selecionados, movidos, redimensionados. Fundo com grade exibido. Geracao de codigo ativa. |
| Modo Execucao (FDesignMode = .F.) | Formulario roda normalmente. Controles respondem a interacao do usuario. Sem geracao de codigo. |
Propriedades do Formulario no Designer
| Propriedade | Tipo | Descricao |
|---|---|---|
nWidth, nHeight | Numerico | Dimensoes do formulario em pixels |
nLeft, nTop | Numerico | Posicao na tela |
cTitle | String | Texto da barra de titulo da janela |
nBorderStyle | Numerico | 0=bsSizeable, 1=bsSingle, 2=bsNone, 3=bsToolWindow |
nPosition | Numerico | 0=poDesigned, 1=poCenter, 2=poCenterScreen |
nWindowState | Numerico | 0=wsNormal, 1=wsMinimized, 2=wsMaximized |
nFormStyle | Numerico | 0=fsNormal, 1=fsStayOnTop |
lSizable | Logico | Permitir que o usuario redimensione a janela |
lCenter | Logico | Centralizar formulario na tela ao exibir |
Exemplos de Codigo
Sintaxe DEFINE FORM Simples
#include "hbbuilder.ch" function Main() local oForm DEFINE FORM oForm TITLE "Hello World" ; SIZE 400, 300 FONT "Segoe UI", 10 ACTIVATE FORM oForm CENTERED return nil
Abordagem Baseada em Classe (Gerado pelo IDE)
CLASS TForm1 FROM TForm METHOD CreateForm() ENDCLASS METHOD CreateForm() CLASS TForm1 ::cTitle := "Form1" ::nLeft := 100 ::nTop := 170 ::nWidth := 400 ::nHeight := 300 return nil
Voce pode usar qualquer abordagem. A sintaxe DEFINE FORM e mais simples para aplicacoes pequenas, enquanto a abordagem baseada em classes e melhor para aplicacoes complexas com multiplos formularios.
Dicas para Design Eficiente de Formularios
- Use o Inspetor de Objetos — Defina propriedades visualmente em vez de escrever codigo
- Duplo clique em controles — Gera automaticamente manipuladores de eventos (ex: OnClick para botoes)
- Multi-selecao para alinhamento — Selecione multiplos controles e use o menu Formatar
- Copiar/Colar para controles similares — Projete um botao, cole e modifique para outros
- Use snap-to-grid — Mantem controles alinhados sem posicionamento manual
- Verifique as Ferramentas Bidirecionais — Alterne entre designer e visao de codigo para ver atualizacoes em tempo real
- Salve frequentemente — Ctrl+S salva tanto os dados de design quanto o codigo