Controles Nativos de Plataforma
A aba Win32 / Cocoa / GTK3 fornece controles complexos que mapeiam diretamente para os widgets avancados nativos de cada plataforma. Estes controles oferecem funcionalidade rica com integracao completa ao sistema operacional.
TTabControl CT_TABCONTROL = 33
Conteiner de paginas com abas. Cada aba hospeda um painel de controles, permitindo interfaces multipagina.
| Propriedade | Tipo | Padrao | Descricao |
nTabIndex | Numerico | 0 | Aba ativa atualmente (base 0) |
nTabCount | Numerico | 0 | Numero de abas (somente leitura) |
nTabPosition | Numerico | 0 | 0=Topo, 1=Inferior, 2=Esquerda, 3=Direita |
lHotTrack | Logico | .F. | Destacar abas ao passar o mouse |
| Evento | Categoria | Descricao |
OnChange | Acao | Aba ativa alterada |
OnChanging | Acao | Aba esta prestes a ser alterada (pode cancelar) |
| Plataforma | Widget Nativo |
| Windows | WC_TABCONTROL (SysTabControl32) |
| macOS | NSTabView |
| Linux | GtkNotebook |
// Criar um formulario com abas
@ 10, 10 TABCONTROL oAbas OF oForm SIZE 400, 300
oAbas:AddTab( "Geral" )
oAbas:AddTab( "Detalhes" )
oAbas:AddTab( "Observacoes" )
TTreeView CT_TREEVIEW = 20
Exibicao hierarquica em arvore com nos expansiveis/recoliveis. Ideal para navegadores de arquivos, arvores de categorias e organogramas.
| Propriedade | Tipo | Padrao | Descricao |
lShowLines | Logico | .T. | Exibir linhas de conexao entre nos |
lShowButtons | Logico | .T. | Exibir botoes de expansao/recolhimento |
lCheckBoxes | Logico | .F. | Exibir caixas de selecao ao lado dos itens |
lSorted | Logico | .F. | Ordenar nos automaticamente em ordem alfabetica |
oSelected | TreeNode | NIL | No atualmente selecionado |
| Evento | Categoria | Descricao |
OnChange | Acao | No selecionado alterado |
OnExpanding | Acao | No esta prestes a ser expandido |
OnCollapsing | Acao | No esta prestes a ser recolhido |
OnDblClick | Acao | No clicado duas vezes |
OnEdited | Acao | Rotulo do no editado |
| Plataforma | Widget Nativo |
| Windows | WC_TREEVIEW (SysTreeView32) |
| macOS | NSOutlineView |
| Linux | GtkTreeView (modelo de arvore) |
// Construir uma arvore de categorias
@ 10, 10 TREEVIEW oArvore OF oForm SIZE 200, 300
oRaiz := oArvore:AddItem( "Produtos" )
oRaiz:AddChild( "Eletronicos" )
oRaiz:AddChild( "Roupas" )
oRaiz:Expand()
TListView CT_LISTVIEW = 21
Lista multi-coluna em modo relatorio (LVS_REPORT). Cada item e uma linha com N celulas; os cabecalhos vem de aColumns.
| Propriedade | Tipo | Padrao | Descricao |
aColumns | Array | {"Column1","Column2","Column3"} | Cabecalhos de coluna (max 8) |
aItems | Array | {} | Linhas; cada elemento e array de strings, uma por coluna (max 64) |
aImages | Array | {} | Caminhos PNG/ICO para ImageList (max 16); necessario para modos Icon/SmallIcon |
nViewStyle | Numerico | 2 | 0=Icone, 1=Lista, 2=Relatorio, 3=IconePequeno |
| Metodo | Descricao |
SetColumns( aCols ) | Define cabecalhos a partir de array de strings |
SetItems( aRows ) | Substitui todas as linhas; SetItems({}) limpa |
AddItem( aCells ) | Adiciona uma linha no final |
SetImages( aPaths ) | Carrega PNG/ICO no ImageList 32x32 + 16x16; linha N usa icone N % count |
| Evento | Categoria | Descricao |
OnClick | Acao | Item clicado |
OnDblClick | Acao | Item clicado duas vezes |
OnColumnClick | Acao | Cabecalho de coluna clicado (para ordenacao) |
OnChange | Acao | Selecao alterada |
| Plataforma | Widget Nativo |
| Windows | WC_LISTVIEW (SysListView32) com LVS_REPORT + LVS_EX_FULLROWSELECT|GRIDLINES |
| macOS | NSTableView multi-coluna |
| Linux | GtkTreeView + GtkListStore |
Sintaxe xBase
// Definir ListView com 3 colunas
@ 50, 20 LISTVIEW oLV OF oForm SIZE 480, 250 ;
COLUMNS "Nome", "Idade", "Cidade"
oLV:AddItem( { "Alice", "30", "New York" } )
oLV:AddItem( { "Bob", "25", "Los Angeles" } )
oLV:AddItem( { "Charlie", "40", "Chicago" } )
Editar no Inspector
Ao selecionar um controle TListView no designer, o inspector expoe duas propriedades editaveis:
- aColumns — clicar no botao
... abre o editor de array. Um cabecalho de coluna por linha.
- aItems — clicar no botao
... abre o ListView Items Editor dedicado: uma grade com as colunas de aColumns, uma linha por item, duplo clique em qualquer celula para edita-la no local. Botoes + Add / - Del / Up / Down gerenciam linhas. Enter confirma, Esc cancela.
O gerador de codigo emite o comando @ ... LISTVIEW ... COLUMNS ... seguido de uma chamada :AddItem({...}) por linha.
Formato de armazenamento
Internamente aColumns e aItems sao serializados como strings:
aColumns: cabecalhos separados por | — ex. "Nome|Idade|Cidade"
aItems: linhas separadas por |, celulas dentro de cada linha por ; — ex. "Alice;30;NY|Bob;25;LA"
Modos de exibicao
A propriedade nViewStyle aparece no inspector como dropdown com os valores enumerados (vsIcon, vsList, vsReport, vsSmallIcon). Alterar o valor em runtime atualiza o controle imediatamente. Os modos Icon e SmallIcon requerem um ImageList associado para exibir icones.
Editar imagens no Inspector
A propriedade aImages abre um dialogo dedicado ListView Images Editor ao clicar ...: lista de caminhos + botoes + Add (file picker .png/.ico/.bmp), - Del, Up, Down. As imagens carregam em runtime via GDI+, escaladas para 32x32 (vsIcon) e 16x16 (vsSmallIcon). Atribuicao por linha e round-robin: row[N]:icone = aImages[N mod len(aImages)].
// Definir ListView com icones
@ 50, 20 LISTVIEW oLV OF oForm SIZE 480, 250 ;
COLUMNS "Nome", "Idade" ;
ITEMS "Alice;30", "Bob;25" ;
IMAGES "user.png", "admin.png"
oLV:nViewStyle := 0 // Modo Icon: exibe PNGs 32x32
TProgressBar CT_PROGRESSBAR = 22
Indicador visual de progresso de operacao. Suporta modos deterministico (percentual) e indeterminado (marquee).
| Propriedade | Tipo | Padrao | Descricao |
nMin | Numerico | 0 | Valor minimo |
nMax | Numerico | 100 | Valor maximo |
nPosition | Numerico | 0 | Valor de progresso atual |
lMarquee | Logico | .F. | Modo indeterminado (animado) |
| Plataforma | Widget Nativo |
| Windows | PROGRESS_CLASS (msctls_progress32) |
| macOS | NSProgressIndicator |
| Linux | GtkProgressBar |
// Barra de progresso para processamento de arquivo
@ 200, 20 PROGRESSBAR oProgresso OF oForm SIZE 300, 20 RANGE 0, 100
oProgresso:nPosition := 45
TRichEdit CT_RICHEDIT = 23
Editor de texto rico que suporta negrito, italico, sublinhado, cores, fontes e formatacao de paragrafos (RTF).
| Propriedade | Tipo | Padrao | Descricao |
cText | String | "" | Conteudo do texto simples |
cRTFText | String | "" | Conteudo de texto rico (RTF) |
lReadOnly | Logico | .F. | Impede edicao |
lWordWrap | Logico | .T. | Quebra linhas longas |
nSelStart | Numerico | 0 | Posicao inicial da selecao |
nSelLength | Numerico | 0 | Comprimento da selecao |
| Evento | Categoria | Descricao |
OnChange | Acao | Conteudo alterado |
OnSelChange | Acao | Selecao alterada |
OnKeyDown | Teclado | Tecla pressionada |
| Plataforma | Widget Nativo |
| Windows | RICHEDIT_CLASS (RichEdit20W) |
| macOS | NSTextView (RTF ativado) |
| Linux | GtkTextView (com marcacao Pango) |
TTrackBar CT_TRACKBAR = 34
Controle deslizante para selecao de valor numerico dentro de um intervalo. Usado para volume, zoom e ajustes similares.
| Propriedade | Tipo | Padrao | Descricao |
nMin | Numerico | 0 | Valor minimo |
nMax | Numerico | 100 | Valor maximo |
nPosition | Numerico | 0 | Posicao atual do controle deslizante |
nTickFreq | Numerico | 1 | Frequencia das marcas |
lHorizontal | Logico | .T. | Orientacao horizontal |
| Evento | Categoria | Descricao |
OnChange | Acao | Posicao do controle deslizante alterada |
| Plataforma | Widget Nativo |
| Windows | TRACKBAR_CLASS (msctls_trackbar32) |
| macOS | NSSlider |
| Linux | GtkScale |
TUpDown CT_UPDOWN = 35
Botao de incremento (setas para cima/baixo), normalmente pareado com um controle de edicao para entrada numerica.
| Propriedade | Tipo | Padrao | Descricao |
nMin | Numerico | 0 | Valor minimo |
nMax | Numerico | 100 | Valor maximo |
nPosition | Numerico | 0 | Valor atual |
nIncrement | Numerico | 1 | Incremento de passo |
oBuddy | Controle | NIL | Controle de edicao associado |
lWrap | Logico | .F. | Retornar do maximo ao minimo |
| Evento | Categoria | Descricao |
OnChange | Acao | Valor alterado (clicado para cima/baixo) |
| Plataforma | Widget Nativo |
| Windows | UPDOWN_CLASS (msctls_updown32) |
| macOS | NSStepper |
| Linux | GtkSpinButton |
TDateTimePicker CT_DATETIMEPICKER = 36
Seletor de data e/ou hora com calendario suspenso. Fornece formatacao com suporte a localizacao.
| Propriedade | Tipo | Padrao | Descricao |
dValue | Data | Date() | Data/hora selecionada |
dMinDate | Data | NIL | Data minima selecionavel |
dMaxDate | Data | NIL | Data maxima selecionavel |
cFormat | String | "" | Formato de exibicao personalizado (ex. "yyyy-MM-dd") |
nKind | Numerico | 0 | 0=Data, 1=Hora, 2=DataHora |
| Evento | Categoria | Descricao |
OnChange | Acao | Data/hora selecionada alterada |
OnDropDown | Acao | Calendario suspenso aberto |
OnCloseUp | Acao | Calendario suspenso fechado |
| Plataforma | Widget Nativo |
| Windows | DATETIMEPICK_CLASS (SysDateTimePick32) |
| macOS | NSDatePicker |
| Linux | GtkCalendar + GtkPopover |
// Seletor de data para data da fatura
@ 80, 120 DATETIMEPICKER oDtp OF oForm SIZE 150, 24
oDtp:cFormat := "dd/MM/yyyy"
TMonthCalendar CT_MONTHCALENDAR = 37
Controle de calendario mensal embutido. Exibe uma grade completa do mes para selecao de data.
| Propriedade | Tipo | Padrao | Descricao |
dValue | Data | Date() | Data selecionada |
dMinDate | Data | NIL | Data minima selecionavel |
dMaxDate | Data | NIL | Data maxima selecionavel |
lMultiSelect | Logico | .F. | Permitir selecao de intervalo de datas |
lShowToday | Logico | .T. | Destacar data de hoje |
| Evento | Categoria | Descricao |
OnSelect | Acao | Data selecionada |
OnSelChange | Acao | Intervalo de selecao alterado |
| Plataforma | Widget Nativo |
| Windows | MONTHCAL_CLASS (SysMonthCal32) |
| macOS | NSDatePicker (NSClockAndCalendarDatePickerStyle) |
| Linux | GtkCalendar |
9 Controles Nativos de Plataforma
Estes controles usam widgets avancados especificos do sistema operacional para maxima aparencia nativa.
HarbourBuilder mapeia automaticamente cada controle para o widget correto no Windows (Win32), macOS (Cocoa) e Linux (GTK3).