LojaDev Theme
O componente visual: manual e propriedades
O que é
O LojaDev Theme é o padrão visual do LojaDev PRO em forma de componentes do Delphi. Com ele instalado, cada tela do ERP se desenha no Object Inspector do jeito que roda: botão, rodapé, cabeçalho, cartão, campos, abas, grade e a interface de abas da tela principal. Esta página é gerada do próprio código do componente a cada atualização: o manual abaixo e a ficha de cada peça acompanham o que está instalado.
Como ter: o instalador é distribuído pelo Discord da LojaDev. Rode-o com o Delphi fechado; ele compila o tema no seu próprio Delphi 12 e registra a paleta. A partir do ERP 7.5 o sistema não compila sem o componente.
As peças
LojaDev Theme
LojaDev Theme PDV
LojaDev Theme TDI
Peças auxiliares
Como usar bem
O LojaDev Theme é o padrão visual do LojaDev PRO em forma de componentes do Delphi: botão, rodapé de ações, cabeçalho, cartão, campos, abas, grade, Kanban, barra de status e a interface de abas da tela principal. A partir da versão 7.5 do ERP, toda tela nova nasce com eles, e as telas antigas vão sendo migradas uma a uma. Este manual diz como usá-los do jeito que o sistema espera. A lista de componentes e de cada propriedade está logo abaixo dele, e é extraída do próprio código a cada atualização.
A regra que vale para tudo: o que a IDE mostra é o que roda
O componente existe para uma coisa: o form aberto no Delphi tem de ser a foto da tela em execução. Cor, posição, tamanho, ordem dos botões, fonte, colunas da grade: tudo fica no .dfm, escolhido no Object Inspector. Nada visual é montado no FormCreate.
- Não posicione componente em código. Se um botão está no lugar errado, arraste-o no designer.
- Não troque cor, fonte ou tamanho no
FormCreate, noFormShownem noOnResize. Se a tela parece exigir isso, a propriedade certa existe no componente: procure-a antes. - Não chame rotinas de arrumação por conta própria. O rodapé se arruma sozinho; a grade aplica o próprio modelo; o cabeçalho remede a própria altura.
- Não mude o que o padrão já decidiu (estilo das abas, cor do realce, tom do botão principal). O padrão é o default do componente, de propósito.
O que sobra para o código é o que o .dfm não guarda: preencher listas, ligar dados, reagir a eventos.
A tela típica, de cima para baixo
- TCabecalhoBS alinhado em
alTop, comTituloeSubtitulo. Em diálogo pequeno, a TFaixaTituloBS. - TPainelBS com
Cartao = TrueeAlign = alClient: é o cartão branco onde vivem os campos e a grade. O fundo do form fica com a cor de página do tema. - Dentro do cartão, os campos: cada
TDBEditouTEditsolto dentro de uma TCaixaCampo, que desenha a moldura arredondada e o foco. Lista suspensa é TCampoListaDB; data é TCampoDataDB. - A grade é uma TGradeBS, com
Modelo = gmListana consulta egmCadastrona digitação de itens. As colunas são editadas no editor de colunas da IDE e cada uma é uma TColunaBS. - TRodapeBS alinhado em
alBottom, com os TBotaoBS dentro. Cada botão declara aFuncaoe oCaptionno formatoF2 - Gravar; a cor sai da função.
Abas: uma TAbasBS logo acima de um TPageControl, com a propriedade PageControl apontando para ele. Os rótulos vêm das páginas; a troca é automática.
A barra de título das janelas
A barra de título e a borda de todas as janelas do programa saem no grafite do tema (BS_GRAFITE, o mesmo do menu lateral), e a janela que não está em uso fica com o título apagado. Isso se liga uma vez só, no início do programa, com LigarMoldura (no ERP a chamada está em Service\uLigacoesTema.pas). Nenhuma tela precisa fazer nada, e nenhuma deve pintar a própria barra.
- No Windows 11 a cor é exata. No Windows 10 o próprio Windows não aceita cor na barra, e ela sai escura, no tom dele. Nas versões anteriores fica a barra do sistema.
- O designer não mostra a cor: no Delphi, a barra do form é desenhada pela própria IDE.
- Tela aberta numa aba da tela principal não tem barra de título, e fica como está.
- O menu lateral do ERP usa a mesma constante: mudar a cor de um muda a do outro.
Botões e rodapé
- Escolha a Funcao pelo que o botão faz. É dela que saem a cor e o tom; a tabela do tema já decide "azul começa, verde grava, amarelo altera, vermelho desfaz, cinza é acessório".
- Não escolha
Corà mão salvo caso raro; se a função certa não parece existir, quase sempre ela existe e éfnNeutro. - O Sair é o botão com
Funcao = fnSair. Ele fica na ponta direita sozinho; não o arraste para lá. - Grupo junta botões do mesmo assunto num bloco; entre grupos o rodapé abre um respiro maior. Você só numera.
- Align escolhe a ponta do rodapé quando a função não basta (um Gravar ao lado do Sair, por exemplo). Não é o Align comum do Delphi: os valores são pela função, esquerda e direita, e o rodapé continua enfileirando. Em tempo de projeto todos os botões aparecem na fila, mesmo os que a tela esconde em execução.
- Em execução o rodapé recolhe no "... Mais" o que não cabe na largura. Não estreite o rodapé para "testar": desenhe no tamanho de projeto e deixe a largura real por conta dele.
- Esconder um botão por permissão é
Visible := False, em código; o rodapé fecha o vão sozinho. Para saber se uma tecla de atalho vale, consulteDisponivel, nãoVisible: o botão recolhido no "... Mais" continua disponível.
Campos
- A TCaixaCampo adota o campo solto dentro dela. Depois disso o pai do campo é a caixa: quem precisa mover o campo em código move a caixa.
- TCampoLista e TCampoListaDB:
ItemIndex = -1é "selecione", de propósito; campo que decide a regra de outros não pode vir escolhido. A regra da tela vai noOnTrocar;FocoSeguintemanda o cursor para o campo seguinte após a escolha. - Lista FIXA (ambiente, versão, UF) se escreve em
Itensno Object Inspector, e no TCampoListaDB o valor que a coluna guarda vai emChaves, na mesma ordem (a coluna guarda 0/1 e a tela mostra Produção/Homologação). Lista que vem do banco continua sendo enchida em código. Coluna NULA pinta o item de chave vazia (''emChaves), quando a lista tem um: base antiga guarda NULL onde a nova guarda'', e as duas querem dizer a mesma coisa. - TCampoData e TCampoDataDB: o operador digita a data; o calendário é atalho. Campo vazio não grava data nenhuma: confira
Vazioantes de lerData. - Fonte: use
Font.Heightem pixels (-13é o corpo padrão), nuncaFont.Sizeem pontos. O designer é ciente de DPI e o ERP não; só a altura em pixels sai igual nos dois.
Grade
Modeloacerta fontes, cores e opções de uma vez. Não aplique modelo por código numa TGradeBS: ela já o faz noLoaded.- Coluna que o operador não pode digitar:
ReadOnly = Truena coluna (não no campo do dataset, que bloquearia também a atribuição em código). - Checkbox, lista com chave gravada (
KeyList), quebra de linha e lookup de outro dataset são propriedades da TColunaBS, no editor de colunas. - A largura escolhida no designer sobrevive ao
Opendo dataset. Não a recalcule em código. - Título em dois níveis: escreva
Grupo|Colunano título (Custo|Nota,Custo|Final). As colunas vizinhas com o mesmo grupo ganham uma faixa em cima, com o grupo centrado sobre elas, e cada uma fica só com o próprio nome embaixo; coluna sem a barra ocupa a altura toda. Serve para a grade de muitas colunas de valor, em que a palavra repetida no título travava a largura da coluna. - Coluna de campo de lookup (fkLookup) escolhe pelo teclado, como a grade do EhLib: a primeira tecla abre a lista e procura, Alt+Seta ou F4 abrem e fecham, as setas andam na lista, Enter grava e Esc fecha sem gravar (sem fechar a janela). Nada a ligar: vale para toda coluna de lookup de grade que aceita digitação. Para a lista mostrar mais de um campo (código, descrição, estoque, preço), preencha
ListaCamposna coluna com os campos do dataset do lookup, separados por ponto e vírgula, eListaLargurase ela precisar ser mais larga que a célula; o campo doLookupResultFieldtem de estar entre eles, e é nele que a digitação procura. A largura de cada campo na lista é oDisplayWidthdele no dataset. - O
OnDrawColumnCellda tela, se existir, roda por cima da pintura do tema: guarde nele só o que é seu (um selo, um ícone) e apague o resto.
Telas de configuração: a pilha e a linha de opção
- A TPilhaBS é a lateral de uma tela com muitos assuntos (a Central de Configurações do ERP é a primeira). Solte-a em
alLeft, preenchaItensno editor da coleção (cada assunto temTitulo,Dica,CoreDetalhe) e apontePageControlpara oTPageControldo conteúdo: cada assunto abre a página de mesmo índice e as abas nativas somem em execução. No designer as abas ficam, para você trocar de página enquanto desenha. SemPageControl, troque o conteúdo noOnTrocar. As setas do teclado andam entre os assuntos sozinhas. - A
Cordo assunto o identifica na tela inteira: uma por assunto, sem repetir.Detalheé um texto curto à direita (uma contagem); deixe vazio se o título for longo. - A TOpcaoBS é uma configuração. Solte a linha no painel em
alTopcomAlignWithMargins, escrevaTituloeDicae solte DENTRO dela o controle que muda o valor. Caixa de marcar (TCheckBox,TDBCheckBox) vai à esquerda do título, e clicar no texto marca a caixa; campo (TCaixaCampo,TCampoListaDB,TCampoDataDB) fica embaixo do título, na largura da linha, com a dica embaixo dele. - A altura da linha sai do texto. Não acerte
Heightà mão nem em código: mude o texto ou a largura e ela acompanha. - Campo curto (a série, um número, a UF) não precisa ocupar a linha inteira:
LarguraCampodá a largura dele.0é a linha inteira, o certo para pasta e texto longo. - A
Dicadiz o EFEITO da opção para quem usa ("a NFC-e sai off-line e é transmitida depois"), nunca o nome da coluna no banco. Selosó quando o alcance da opção é diferente do da página ("Este computador" numa página que vale para a empresa).Termossão palavras a mais para a busca (a sigla, o nome antigo) e não aparecem na tela.- Para desligar uma opção, desligue a LINHA (
Enabledda TOpcaoBS): ela apaga o texto e desliga o controle de dentro junto. Desligar só o controle não avisa a linha, e o título só apaga quando ela se pintar de novo. - A busca da tela pergunta a cada linha com
Casa('texto'), que ignora maiúscula e acento, e acende a que achou comDestacada := True.
Ao migrar uma tela antiga
- Troque o painel de baixo por um TRodapeBS e cada
TSpeedButton/TButtonpor um TBotaoBS com aFuncaocerta; apague a rotina que posicionava os botões. - Troque
TPanelde cartão por TPainelBS comCartao = True; cabeçalho por TCabecalhoBS. - Embrulhe cada
TDBEditnuma TCaixaCampo; troqueTDBComboBoxpor TCampoListaDB e oTDBEditde data por TCampoDataDB. - Troque a
TDBGrid(ou a do EhLib) por TGradeBS; leve oReadOnlydas colunas junto. - Tire do
FormCreatetudo o que era ajuste visual. O teste de pronto: abra o form na IDE e compare com a tela em execução; têm de ser iguais, menos o dado.
Instalar e atualizar
O instalador (InstaladorLojaDevTheme.exe, distribuído pelo Discord da LojaDev) grava o fonte do tema em C:\Componentes\LojaDevTema, compila o tema no seu próprio Delphi, acrescenta a Lib ao Library Path e registra o pacote na IDE. Rode-o com o Delphi fechado. Ele precisa do EhLib instalado na IDE, que o ERP já exige.
Quando sair versão nova do componente, rode o instalador de novo, com o Delphi fechado, antes de abrir os forms do ERP: um form com propriedade que o pacote antigo não conhece morre em "Property X does not exist", e clicar em Ignorar e salvar apaga o componente do formulário. O "Leia" de cada versão do ERP diz quando a atualização é obrigatória.
Se o instalador disser que a compilação falhou, o arquivo C:\Componentes\LojaDevTema\compila_23.0.log diz o motivo; mande-o para o suporte.
O catálogo de cores
| Cor | Nome | Quando usar |
|---|---|---|
| (nenhuma) | sem cor própria: vale o Estilo, a tabela das ações ou a função | |
| primary | ação principal: cria, começa, finaliza | |
| secondary | sai da tela; acessório | |
| success | grava, confirma, recebe | |
| info | mostra, consulta, envia, imprime (texto escuro) | |
| warning | altera ou desfaz (texto escuro) | |
| danger | apaga, queima numeração, tira de uso | |
| light | superfície clara (texto escuro) | |
| dark | texto e chrome escuro | |
| orange | laranja queimado: acento quente que não é perigo | |
| amber | ocre: neutro quente, combina com navy e graphite | |
| olive | musgo: verde terroso, 31 graus do success | |
| teal | azul-esverdeado: a cor calma de dados | |
| sky | o azul clássico do AdminLTE, o antigo lightblue | |
| indigo | azul-violeta: cara de marca, 31 graus do primary | |
| violet | roxo | |
| fuchsia | magenta: ênfase, com parcimônia | |
| pink | rosa profundo: o maroon do v3 redesenhado | |
| navy | azul-marinho de sidebar: profundo e frio, não é preto | |
| steel | cinza-azulado escuro: o tom de sidebar dos kits admin | |
| slate | neutro médio: cinza-azulado para cabeçalhos e cartões | |
| graphite | cinza frio quase preto, para sidebars discretas | |
| midnight | quase preto com toque violeta: chrome totalmente escuro |
Página LojaDev Theme
TRodapeBS
A barra de ações do rodapé das telas. Solte os TBotaoBS dentro dele e pronto: ele enfileira pela esquerda, emenda os de mesmo Grupo, ancora o Sair (e o que tiver Lado direita) na ponta direita, e em execução recolhe no botão '... Mais' o que não couber na largura. Arrastar um botão dentro dele reordena; nada de posicionar em código.
| Propriedade | Tipo | Padrão | Para que serve |
|---|---|---|---|
| Responsivo | Boolean | True | Em execução, recolhe no '... Mais' os botões que não cabem na largura da barra (os de maior Grupo saem primeiro; o bloco principal e o Sair nunca saem). Desligado, a barra sai como foi desenhada e o que não couber some pela direita. No designer nunca recolhe. |
| LinhaTopo herdada do TPainelBS | Boolean | True no TPainelBS: False | O filete de 1 px no alto do rodapé, que o separa do conteúdo. Ligado por padrão. |
| CorFundo herdada do TPainelBS | TColor | BS_SUPERFICIE no TPainelBS: BS_CARD | A cor de dentro do rodapé. O padrão é a superfície cinza das barras de ação. |
Também tem as de sempre da VCL: Align.
TBotaoBS
O botão do sistema, desenhado no padrão do ERP (Bootstrap 5): cantos arredondados, cor pela função, anel de foco e teclado. Solte-o dentro de um TRodapeBS para ele entrar na fila de ações sozinho. Escolha a Funcao (o que ele faz) e deixe a cor com o tema; escreva o Caption como 'F2 - Gravar' para a tecla aparecer no rótulo.
| Propriedade | Tipo | Padrão | Para que serve |
|---|---|---|---|
| Cor | TCorBS | cbNenhuma | Uma cor do catálogo do AdminLTE escolhida à mão (primary, success, teal...). Deixe em cbNenhuma na quase totalidade dos casos: a cor certa sai da Funcao. Escolhida, ela vence a função e a tabela das ações; o Tom continua valendo. |
| Glifo | string | — | Ícone da fonte Segoe MDL2 à esquerda do texto (o caractere do glifo, escolhido pelo botão '...' do Object Inspector). Vazio = só texto. Botão SÓ com glifo vira botão de ícone, quadrado, e a dica (Hint) passa a ser o nome dele. |
| LarguraAutomatica | Boolean | False | O botão mede a própria largura pelo texto e pelo glifo, e se remede quando eles mudam. É o que o rodapé espera; desligue só em botão solto cuja largura você fixou à mão no Width. |
| LarguraExtra | Integer | 0 | Pixels a MAIS sobre a largura automática, para um botão mais respirado (o Gravar costuma levar +32). Só vale com LarguraAutomatica ligada. |
| Grupo | Integer | 0 | O assunto do botão dentro do rodapé. Botões com o mesmo Grupo (diferente de 0) ficam emendados num bloco; entre grupos diferentes o rodapé abre um respiro maior. Você só numera: quem espaça e ordena é o rodapé. |
| Align | TLadoNoRodapeldPelaFuncao · ldEsquerda · ldDireita | ldPelaFuncao | Em que ponta do rodapé o botão fica. ldPelaFuncao (o padrão) é o de sempre: o Sair vai para a direita e o resto para a esquerda. ldEsquerda e ldDireita escolhem a ponta, e aí a ordem entre os botões do mesmo lado é a sua: pelo Grupo e, dentro do grupo, pela posição em que você o soltou. Em tempo de projeto todos os botões aparecem na fila, mesmo os que a tela esconde em execução. |
| FocoTraco | Boolean | False | Como o botão mostra que tem o foco do teclado: False é o anel em volta (o padrão), True é um traço embaixo. O rodapé liga o traço nos botões dele; em botão solto deixe o anel. |
| Tom | TTomBotaotmCheio · tmContorno · tmSuave · tmClaro | tmCheio | O peso da cor: tmCheio (fundo na cor, texto branco), tmContorno (só borda e texto na cor), tmSuave (fundo pastel) e tmClaro (o cimento dos acessórios). A ação principal da tela fica cheia e as outras em contorno; o rodapé já resolve isso pela Funcao. |
| Funcao | TFuncaoBotaofnNovo · fnGravar · fnEditar · fnProcessar · fnConsultar · fnAtualizar · fnImprimir · fnCancelar · fnExcluir · fnSair · fnNeutro | fnNovo | O que o botão FAZ. É daqui que saem a cor e o tom, pela tabela do tema: fnNovo (azul), fnGravar (verde), fnEditar (amarelo), fnProcessar (roxo), fnConsultar (ciano), fnAtualizar (teal), fnImprimir e fnCancelar (cinza), fnExcluir (vermelho), fnSair (o Sair, ancorado à direita) e fnNeutro (acessório sem família). Escolha a função certa em vez de escolher cor. |
| Vertical | Boolean | False | Botão DEITADO: o rótulo lê de baixo para cima e o corpo fica alto e estreito -- é para uma tira lateral de ações, onde falta largura. Só muda o desenho: dê ao botão, no form, o tamanho deitado (estreito e alto). |
Também tem as de sempre da VCL: Caption, Font, ParentFont, ParentShowHint, Enabled, Hint, ShowHint, TabOrder, TabStop, Visible, OnClick, OnEnter, OnExit.
TBotaoIcone
| Propriedade | Tipo | Padrão | Para que serve |
|---|---|---|---|
| Glifo | string | — | O ícone do botão: um caractere da Segoe MDL2 Assets (as constantes GL_* do tema). O "..." do Object Inspector abre a lista com o nome e o significado de cada um. |
| GlifoAlt | string | — | O que aparece no lugar do ícone quando a máquina não tem a fonte Segoe MDL2 (um caractere comum, como x ou *). |
Também tem as de sempre da VCL: Caption, Font, Enabled, Hint, ShowHint, TabOrder, TabStop, Visible, OnClick, OnEnter, OnExit.
TPainelBS
O painel do tema: um cartão branco de cantos arredondados (Cartao = True) ou uma faixa reta com filete (LinhaTopo/LinhaBase). É a base do cabeçalho, do rodapé e dos cartões de conteúdo. Use-o no lugar do TPanel sempre que o painel aparecer na tela.
| Propriedade | Tipo | Padrão | Para que serve |
|---|---|---|---|
| Raio | Integer | 0 | Raio dos cantos, em pixels. 0 é o painel reto, para faixas de cabeçalho e rodapé; o cartão usa o raio do tema. Ligar Cartao já acerta isto. |
| CorFundo | TColor | BS_CARD | A cor de dentro do painel. Troque por aqui, não pelo Color do TPanel: quem pinta é o tema. |
| CorBorda | TColor | clNone | Cor do contorno do cartão; clNone desliga o contorno. Não desliga o filete de LinhaTopo/LinhaBase, só lhe dá um tom próprio. |
| LinhaTopo | Boolean | False | Um filete de 1 px no alto do painel, para separá-lo do que está acima sem moldura inteira. É o do rodapé de ações. |
| LinhaBase | Boolean | False | O mesmo filete, embaixo. É o do cabeçalho das telas de lista. |
| OnPintar | TNotifyEvent | — | Dispara depois de o fundo estar pronto, para a tela desenhar o que é dela no Canvas (um ícone, um selo, um número grande). Desenhar fora deste evento não adianta: a pintura seguinte apaga. |
| CorAtras | TColor | clNone | A cor de quem está ATRÁS do painel, pintada nos quatro cantinhos que o arredondamento deixa de fora. clNone com Raio > 0 deixa os cantos sem pintura; ligar Cartao já a preenche com o fundo da página. |
| Cartao | Boolean | False | Liga o cartão de uma vez: cantos arredondados, fundo branco, contorno e cantos pintados. Desligar devolve o painel reto. |
Também tem as de sempre da VCL: BevelOuter, ParentBackground.
TPilhaBS
A pilha lateral de assuntos: um cartão com um item por assunto, o aberto cheio na cor dele. Solte-a à esquerda da tela (Align = alLeft) e preencha Itens no editor. Com PageControl apontado, cada assunto abre a página de mesmo índice; sem ele, a tela troca o conteúdo no OnTrocar. As setas do teclado andam entre os assuntos.
| Propriedade | Tipo | Padrão | Para que serve |
|---|---|---|---|
| Itens | TItensPilhaBS | — | Os assuntos, na ordem da pilha. Cada um tem Titulo, Dica, Cor e Detalhe. |
| Indice | Integer | 0 | O assunto aberto (0 = o primeiro). Atribuir troca o assunto e dispara o OnTrocar. |
| Cabecalho | string | — | O rótulo pequeno, em maiúsculas, no alto do cartão ('Assuntos'). Vazio não mostra a faixa. |
| PageControl | TPageControl | — | O TPageControl que esta pilha dirige: cada assunto abre a página de mesmo índice, e as abas nativas somem em execução. |
| OnTrocar | TNotifyEvent | — | Dispara ao trocar de assunto. Com PageControl apontado a página já vira sozinha; use o evento para o que a tela faz a mais. |
Também tem as de sempre da VCL: Align, Anchors, Color, Enabled, Font, ParentShowHint, ShowHint, TabOrder, TabStop, Visible.
TOpcaoBS
Uma opção de configuração: o título, a dica que diz o EFEITO, o selo quando o escopo dela difere do da seção e o controle que muda o valor, solto DENTRO dela no designer. Com caixa de marcar (TCheckBox, TDBCheckBox) a caixa fica à esquerda do título e clicar no texto marca; com campo (TCaixaCampo, TCampoListaDB, TCampoDataDB, edit) o título vira o rótulo em cima e a dica vai embaixo. Dentro de um TGrupoOpcoesBS com DicasEmBalao (o padrão) a dica sai da linha e aparece em balão ao passar o mouse. A altura sai do texto: defina só a largura.
| Propriedade | Tipo | Padrão | Para que serve |
|---|---|---|---|
| Titulo | string | — | O nome da opção, como o operador a procura. |
| Dica | string | — | Uma linha dizendo o EFEITO da opção, e não o nome da coluna. Quebra sozinha na largura da linha; dentro de um TGrupoOpcoesBS com DicasEmBalao, vira o balão que aparece ao passar o mouse na linha. |
| Selo | string | — | Selo ao lado do título quando o escopo da opção é diferente do da seção ('Este computador', 'Todas as empresas'). Vazio não mostra. |
| SeloCor | TCorBS | cbWarning | A cor do selo, do catálogo. |
| Termos | string | — | Palavras a mais que a busca da tela aceita para achar esta opção (siglas, nome técnico, o nome antigo). Não aparecem na tela. |
| LarguraCampo | Integer | 0 | A largura do campo quando ele é mais curto que a linha (a série, um número, a UF). 0 = o campo ocupa a largura inteira, como uma pasta. Não vale para a caixa de marcar. |
| Ocupa | Integer | 1 | Dentro de um TGrupoOpcoesBS, quantas colunas a linha ocupa. 1 = uma coluna; 0 = a fileira inteira (o texto longo, a observação). Fora do grupo não faz nada. |
Também tem as de sempre da VCL: Align, Anchors, Enabled, Font, ParentFont, TabOrder, Visible.
TGrupoOpcoesBS
As linhas de opção (TOpcaoBS) em COLUNAS: solte as linhas dentro do grupo e ele as arruma lado a lado, da esquerda para a direita e de cima para baixo, cada fileira com a altura da linha mais alta dela. A altura do grupo sai do conteúdo; o Align das linhas não vale aqui dentro. Cada linha ocupa as colunas que o Ocupa dela diz (0 = a fileira inteira). Com DicasEmBalao (o padrão) a dica de cada linha sai dela e aparece em balão ao passar o mouse.
| Propriedade | Tipo | Padrão | Para que serve |
|---|---|---|---|
| Colunas | Integer | 2 | Quantas colunas o grupo tem. 1 = uma linha embaixo da outra. |
| VaoColunas | Integer | 24 | O vão entre uma coluna e a seguinte, em pixels. |
| VaoLinhas | Integer | 8 | O vão entre uma fileira e a seguinte, em pixels. |
| DicasEmBalao | Boolean | True | A dica de cada linha em balão, ao passar o mouse na linha, em vez de escrita embaixo do título ou do campo: a linha fica só com o título e o controle. Desligado, a dica volta para dentro dela. |
Também tem as de sempre da VCL: Align, Anchors, Enabled, Font, ParentFont, TabOrder, Visible.
TColunasBS
A página em COLUNAS -- o row com col-md-6 do Bootstrap: cada controle solto dentro dele é uma coluna, lado a lado e da mesma largura, com Vao entre elas. A coluna é um TPainelBS com AutoSize (CorFundo da página) e os cartões alTop dentro; cada coluna fica com a altura dela, e a do TColunasBS é a da mais alta. O Align das colunas não vale aqui dentro.
| Propriedade | Tipo | Padrão | Para que serve |
|---|---|---|---|
| Vao | Integer | 12 | O vão entre uma coluna e a seguinte, em pixels. O padrão é o mesmo vão que separa um cartão do de baixo. |
Também tem as de sempre da VCL: Align, Anchors, Enabled, Font, ParentFont, TabOrder, Visible.
TCabecalhoBS
O cabeçalho padrão das telas: filete azul, título grande e subtítulo que quebra linha e se remede quando a tela estreita. Solte-o no alto do form, alinhe em alTop e escreva Titulo e Subtitulo. A altura se ajusta ao subtítulo sozinha.
| Propriedade | Tipo | Padrão | Para que serve |
|---|---|---|---|
| Titulo | string | — | O título da tela, em negrito, no alto do cabeçalho. |
| Subtitulo | string | — | A frase de apoio embaixo do título. Pode ser longa: quebra linha e o cabeçalho cresce para caber. |
| LinhaBase herdada do TPainelBS | Boolean | True no TPainelBS: False | O filete de 1 px embaixo do cabeçalho, que o separa do conteúdo. Ligado por padrão. |
Também tem as de sempre da VCL: Align.
TFaixaTituloBS
A faixa azul de título das telas menores (diálogos e cadastros rápidos): fundo na cor do tema, título e subtítulo em branco. Alinhe em alTop e escreva os dois textos; a altura acompanha o subtítulo.
| Propriedade | Tipo | Padrão | Para que serve |
|---|---|---|---|
| Titulo | string | — | O título, em branco sobre a faixa azul. |
| Subtitulo | string | — | A frase de apoio embaixo do título, em branco; quebra linha e a faixa cresce para caber. |
Também tem as de sempre da VCL: Align, BevelOuter, ParentBackground.
TCaixaCampo
A moldura arredondada dos campos de digitação. Solte um TEdit, TDBEdit ou TMaskEdit DENTRO dela no designer e ela o adota: tira a borda do Windows, desenha a pastilha do tema e acende a borda azul quando o campo tem o foco. Depois disso o pai do campo é a caixa: para mover o campo, mova a caixa.
Sem propriedade própria no Object Inspector: o que ele faz é configurado em código, pela tela, como a descrição acima diz.
Também tem as de sempre da VCL: Align, Anchors, TabOrder, Visible, Enabled.
TCampoLista
A lista suspensa do tema (o select do Bootstrap), no lugar do TComboBox. Preencha Itens em código e leia ItemIndex ou Texto; ItemIndex -1 é 'selecione'. Para campo ligado ao banco use o TCampoListaDB.
| Propriedade | Tipo | Padrão | Para que serve |
|---|---|---|---|
| Itens | TStringList | — | As opções da lista, na ordem em que aparecem. Lista fixa (ambiente, versão, UF) se escreve aqui no Object Inspector; lista que vem do banco se enche em código, com Add. |
| FocoSeguinte | TWinControl | — | Para onde o foco vai depois de o operador escolher um item com o mouse. Aponte o campo seguinte para encadear a digitação (tipo de pessoa → documento). Vazio = o foco volta para a própria lista. |
| MaxLinhas | Integer | 6 | Quantas linhas a lista mostra antes de rolar. 6 serve à maioria; lista longa (fornecedores, cidades) pede mais. |
| OnTrocar | TNotifyEvent | — | Dispara quando a escolha MUDA. É aqui que entra a regra da tela: trocar a máscara do documento, recalcular, mostrar outro campo. Escolher de novo o item que já estava não dispara: para isso é o OnFechado. |
| OnFechado | TNotifyEvent | — | Dispara sempre que a lista fecha, inclusive quando o operador escolhe o item que já estava. Use-o para reagir ao fechamento independentemente da troca. |
Também tem as de sempre da VCL: Hint, ParentShowHint, ShowHint, Font, TabOrder, TabStop, Visible, OnClick.
TCampoData
O campo de data do tema: digitável, com máscara, e o calendário como atalho no glifo à direita (Espaço, F4 ou Enter abrem; setas mudam o dia; PgUp/PgDn o mês). Em código: Data, Vazio e Limpar. Campo vazio mostra 'selecione' e não grava data nenhuma. Para campo ligado ao banco use o TCampoDataDB.
Sem propriedade própria no Object Inspector: o que ele faz é configurado em código, pela tela, como a descrição acima diz.
Também tem as de sempre da VCL: Hint, ParentShowHint, ShowHint, Font, TabOrder, TabStop, Visible, OnClick.
TAbasBS
A barra de abas do tema (a pílula azul), no lugar das abas nativas do Windows. Aponte PageControl para um TPageControl da tela: a barra tira os rótulos das páginas dele, esconde as abas nativas em execução e vira a página ao clicar, sem código. Solte-a logo acima do PageControl.
| Propriedade | Tipo | Padrão | Para que serve |
|---|---|---|---|
| Indice | Integer | 0 | A aba aberta (0 = a primeira). Atribuir troca a aba e dispara o OnTrocar; é como a tela volta à primeira aba ao abrir um registro novo. |
| Itens | TStringList | — | Os rótulos das abas, um por linha, quando não há PageControl apontado (com PageControl, os rótulos vêm das páginas). Em código, o Adicionar acrescenta um. |
| Estilo | TEstiloAbaseaSublinha · eaPilula · eaPilulaSuave · eaCartao · eaSegmento | eaPilula | A forma das abas. O padrão do sistema é eaPilula (pílula azul) nas telas de cadastro e eaSublinha (traço) nas de lista; os outros três estilos existem para comparação e não entram em tela de produção. |
| CorRealce | TColor | BS_PRIMARY | A cor da aba ativa. O padrão já é o azul do tema; não troque em tela de produção. |
| Recuo | Integer | 0 | Recuo da primeira aba, em pixels, dentro da faixa. Use isto, não Margins no controle: recuar o controle deixa as pontas da faixa descobertas. |
| OnTrocar | TNotifyEvent | — | Dispara ao trocar de aba. Com PageControl apontado a página já vira sozinha; use o evento só para o que a tela precisa fazer a mais (carregar dados da aba, por exemplo). |
| PageControl | TPageControl | — | O TPageControl que esta barra dirige. Apontado, os rótulos vêm das páginas dele, as abas nativas somem em execução e a troca de página é automática. |
Também tem as de sempre da VCL: Align, Anchors, Color, Font, Visible.
TCampoListaDB
A lista suspensa do tema ligada ao banco, no lugar do TDBComboBox. Aponte DataSource e DataField no designer e, em código, Definir(['FISICA', 'JURIDICA'], []) preenche os itens (e as chaves, quando a coluna guarda código e a tela mostra texto). Herda tudo do TCampoLista.
| Propriedade | Tipo | Padrão | Para que serve |
|---|---|---|---|
| Chaves | TStringList | — | O valor que a coluna guarda para cada item, na mesma ordem dos Itens (a coluna guarda 0/1 e a tela mostra Produção/Homologação). Vazia = grava o próprio texto do item. |
| DataField | string | — | A coluna do dataset que a lista lê e grava. |
| DataSource | TDataSource | — | O DataSource do dataset. A ordem de atribuição com o DataField não importa: a ligação só trabalha quando os dois existem. |
TCampoDataDB
O campo de data do tema ligado ao banco, no lugar do TDBEdit de data. Aponte DataSource e DataField; campo nulo mostra 'selecione' e escolher a data é o que grava. Herda tudo do TCampoData.
| Propriedade | Tipo | Padrão | Para que serve |
|---|---|---|---|
| DataField | string | — | A coluna de data do dataset que o campo lê e grava. |
| DataSource | TDataSource | — | O DataSource do dataset. |
TQuadroKanban
O quadro Kanban do tema: colunas coloridas com cartões que o operador arrasta de uma para outra. Em código, Limpar, AddColuna, AddCartao e Montado montam o quadro; OnAbrirCartao e OnSoltarCartao devolvem o clique e o arrasto. Solte-o e alinhe em alClient; o desenho vem inteiro do tema.
Sem propriedade própria no Object Inspector: o que ele faz é configurado em código, pela tela, como a descrição acima diz.
TBarraStatus
A barra de status do rodape da tela principal: segmentos medidos pelo texto, com prioridade -- o que nao cabe some e vai para a dica, o destacado encolhe em vez de sair. Em codigo, Adicionar cria o segmento e Definir escreve o valor; Destacar, DefinirPonto e DefinirGlifo dao o realce. Alinhe em alBottom.
Sem propriedade própria no Object Inspector: o que ele faz é configurado em código, pela tela, como a descrição acima diz.
TGradeBS
A grade do tema sobre a TDBGrid da VCL: cabecalho, linha corrente, zebra e selecao ja no padrao, no designer e em execucao. As colunas sao TColunaBS, com checkbox, lista de chaves, quebra de linha e lookup de outro dataset -- tudo no editor de colunas da IDE. Grade que aceita digitacao ganha o + de incluir no canto e o texto de vazio orienta o operador. Titulo de coluna com barra vertical (Custo|Nota) vira titulo em dois niveis: o grupo em cima, centrado sobre as colunas vizinhas do mesmo grupo, e o nome da coluna embaixo -- a palavra que se repetia sobe para a faixa e a coluna fica com a largura do numero.
| Propriedade | Tipo | Padrão | Para que serve |
|---|---|---|---|
| Modelo | TModeloGradegmLista · gmCadastro | gmLista | gmLista para a grade de consulta (linha inteira selecionada, sem edicao) e gmCadastro para a grade que digita item a item (edicao na celula, indicador de linha). O modelo acerta fontes, cores e opcoes de uma vez. |
| AlturaLinha | Integer | 0 | Altura de cada linha em pixels; 0 e a que a fonte pede. Suba quando alguma coluna usa Quebra. |
| BotaoIncluir | Boolean | True | O + azul no canto do titulo de toda grade que aceita digitacao: o clique inclui um registro, o mouse vira mao e a dica explica. Desligue so em grade que nao deve incluir pelo proprio corpo. |
| TextoVazio | string | — | O que a grade sem registro escreve no meio. Vazio usa o padrao: 'Nenhum registro encontrado' na grade de consulta e 'Nenhum item: clique no + ou pressione Insert' na que digita. |
| LinhaEmNegrito | Boolean | True | A linha corrente sai em negrito (o padrao). Desligue na grade de uma tela densa, onde a cor da linha ja diz qual e a corrente e o negrito so pesa (o cadastro da O.S.). |
| EnterComoTab | Boolean | False | O Enter anda para a proxima coluna, como o Tab (na ultima coluna vai para a linha seguinte). Ligue na grade que digita item a item; desligado, o Enter so abre e fecha o editor da celula, como na grade da VCL. |
TColunaBS
A coluna da TGradeBS (o item do editor de colunas). Alem do que a coluna da VCL ja faz, ela marca campo S/N como checkbox, mapeia a lista suspensa para o valor gravado (KeyList), quebra o texto na altura da linha e enche a lista de outro dataset (ListaFonte/ListaChave/ListaTexto).
| Propriedade | Tipo | Padrão | Para que serve |
|---|---|---|---|
| Checkbox | Boolean | False | A celula vira um marcador: clique ou Espaco alterna o campo entre ValorMarcado e ValorDesmarcado, sem editor de texto. Serve a campo Boolean ou a S/N. |
| ValorMarcado | string | — | O valor gravado quando o checkbox esta marcado (S por padrao). |
| ValorDesmarcado | string | — | O valor gravado quando o checkbox esta desmarcado (N por padrao). |
| KeyList | TStrings | — | O valor GRAVADO de cada item do PickList, na mesma ordem: o PickList mostra 'Ativo' e o campo guarda 'A'. Vazio grava o proprio texto. |
| Quebra | Boolean | False | O texto da celula quebra linha dentro da altura da linha. Suba AlturaLinha na grade para caber mais de uma linha. |
| ListaFonte | TDataSource | — | O DataSource de OUTRO dataset de onde a lista suspensa desta coluna e enchida (o lookup): PickList e KeyList recebem os registros dele quando o editor abre, e o texto mostrado sai do mapa. |
| ListaChave | string | — | O campo do dataset de ListaFonte que e a CHAVE gravada (o codigo). |
| ListaTexto | string | — | O campo do dataset de ListaFonte que e o TEXTO mostrado (a descricao). |
| ListaViva | Boolean | False | A lista suspensa desta coluna e o proprio dataset da ListaFonte, AO VIVO: abre sozinha quando o operador comeca a digitar, o texto digitado fica na celula (a tela filtra a fonte a cada tecla, e a lista acompanha) e setas + Enter escolhem. A lista marca o primeiro item cujo ListaTexto COMECA com o texto digitado; sem nenhum, a linha em que a tela deixou a fonte. A escolha grava o ListaTexto da linha escolhida no campo e dispara o OnEscolha. Serve a coluna de campo comum (nao de lookup); ListaChave e ListaTexto sao obrigatorios. |
| ListaCampos | string | — | Os campos da ListaFonte que a lista viva mostra, em colunas, separados por ponto e virgula (CODIGO;DESCRICAO;PR_VENDA). Vazio mostra so o ListaTexto. Em coluna de campo de lookup, sao os campos do dataset do lookup que a lista dele mostra: o LookupResultField tem de estar entre eles, e e nele que a digitacao procura. |
| ListaLargura | Integer | 0 | Largura em pixels da lista viva, ou da lista do lookup com ListaCampos, para quando ela precisa ser mais larga que a celula (varias colunas). 0 = a largura da celula. |
| OnEscolha | TNotifyEvent | — | Disparado quando o operador escolhe um item da lista viva: o texto ja foi ao campo e a ListaFonte esta parada na linha escolhida -- e dela que a tela le o resto (o codigo do produto, por exemplo). O Sender e a coluna. |
Página LojaDev Theme PDV
TBotaoPDV
A tecla do caixa: o botão do PDV, com o selo da tecla de atalho (Tecla), letra branca sobre a cor cheia e a opção de repetir enquanto segurado (Repetir), para quantidade. Herda do TBotaoBS o foco, o Enabled e a tabela de cor; o balcão configura Tecla, Destaque e CorCheia em código, na tela.
Sem propriedade própria no Object Inspector: o que ele faz é configurado em código, pela tela, como a descrição acima diz.
TRodapePDV
O rodapé do caixa: a faixa de teclas do PDV, que refaz a fila sozinha quando uma tecla some ou aparece. Solte os TBotaoPDV dentro dele.
| Propriedade | Tipo | Padrão | Para que serve |
|---|---|---|---|
| LinhaTopo herdada do TPainelBS | Boolean | True no TPainelBS: False | O filete de 1 px no alto do rodapé do caixa. Ligado por padrão. |
| CorFundo herdada do TPainelBS | TColor | BS_SUPERFICIE no TPainelBS: BS_CARD | A cor de dentro do rodapé do caixa. O padrão é a superfície cinza. |
| CorBorda herdada do TPainelBS | TColor | BS_BORDA no TPainelBS: clNone | A cor do filete de cima (e do contorno, se o rodapé virar cartão). O padrão é a cor de divisória do tema. |
Também tem as de sempre da VCL: Align.
TCampoValorPDV
O campo único de valor do fechamento da venda: o maior número da tela e o único do corpo que recebe foco. O papel dele muda com o estado da venda ('a receber', 'falta', 'troco') pelo Vestir, em código. Não o embrulhe num TCaixaCampo: ele desenha a própria moldura.
Sem propriedade própria no Object Inspector: o que ele faz é configurado em código, pela tela, como a descrição acima diz.
Também tem as de sempre da VCL: Enabled, Visible, TabOrder.
TCartaoFormaPgto
A forma de pagamento como cartão de grade no fechamento: letra do atalho no selo, valor lançado e o X de desfazer. Não recebe foco de propósito: quem recebe é o campo de valor. A tela do caixa cria e configura os cartões em código (IdForma, Tipo, Tecla, Glifo).
Sem propriedade própria no Object Inspector: o que ele faz é configurado em código, pela tela, como a descrição acima diz.
Também tem as de sempre da VCL: Caption, Enabled, Font, Hint, ShowHint, Visible, OnClick.
Página LojaDev Theme TDI
TTDI
A interface de abas da tela principal: cada tela aberta vira uma aba com X, o painel inicial é a aba fixa, e o menu de botão direito fecha uma ou todas. Solte-o no painel de trabalho; em execução ele cria o TPageControl como irmão e abre as telas por MostrarFormulario ou MostrarInstancia.
| Propriedade | Tipo | Padrão | Para que serve |
|---|---|---|---|
| MostrarMenuPopup | Boolean | — | Liga o menu de botão direito nas abas (Fechar, Fechar todas). |
| OnSemAbas | TNotifyEvent | — | Dispara quando a última aba se fecha e a fileira de abas some, para o dono reajustar o que voltou ao lugar de origem. |
| OnAbaAtiva | TNotifyEvent | — | Dispara sempre que a aba da frente muda: por clique, por abertura de tela nova ou por fechamento. É o funil único; não assine o OnChange do PageControl por fora, ele não cobre a troca por código. |
| AbaFixaOculta | Boolean | — | Tira a aba do painel inicial da fileira, deixando só as abas das telas. Ligue apenas quando houver outro caminho de volta ao painel (o título do cabeçalho no menu lateral), senão o operador fica sem como voltar. |
| PageControl | TPageControl | — | O TPageControl que o TDI cria e dirige em execução (nil no designer). Só para leitura. |
| FormPadrao | TFormClass | — | A classe do formulário que fica aberto quando todos os outros se fecham (o painel inicial). |
TTabCloseButton
A fileira de abas com o X de fechar em cada uma, usada pelo TDI. Pinta a faixa inteira no padrão do tema e avisa o dono quando o operador clica no X; a aba fixa não ganha X.
Sem propriedade própria no Object Inspector: o que ele faz é configurado em código, pela tela, como a descrição acima diz.
TPageControlEx
O TPageControl com as abas pintadas pelo tema, sem o traje do Windows. Mesmas propriedades do TPageControl; so o desenho muda.
Sem propriedade própria no Object Inspector: o que ele faz é configurado em código, pela tela, como a descrição acima diz.
TTabControlEx
O TTabControl com as abas pintadas pelo tema, sem o traje do Windows. Mesmas propriedades do TTabControl; so o desenho muda.
Sem propriedade própria no Object Inspector: o que ele faz é configurado em código, pela tela, como a descrição acima diz.
O que mudou no componente
- 15/10 O LojaDev Theme passa à versão 1.4.0
- 15/10 Na grade do LojaDev Theme, o que se digita numa coluna de lista passa a aparecer na célula enquanto a busca acontece
- 13/10 O LojaDev Theme passa à versão 1.3.9
- 13/10 Na grade de lista do LojaDev Theme, a coluna Subtotal passa a sair como dinheiro: com R$ e alinhada à direita, como as outras colunas de valor
- 11/10 O LojaDev Theme passa à versão 1.3.8
- 11/10 No campo de data do LojaDev Theme, a data digitada passa a valer na tecla de ação da tela, sem precisar sair do campo
- 06/10 O LojaDev Theme passa à versão 1.3.7
- 05/10 Nas listas suspensas do LojaDev Theme, digitar com a lista aberta passa a procurar o item pelo nome, em vez de escolher o primeiro com aquela letra e fechar a lista
- 03/10 Na grade do LojaDev Theme, a lista da coluna de lookup passa a mostrar os campos do ListaCampos, na largura do ListaLargura
- 30/09 O LojaDev Theme passa à versão 1.3.6
- 30/09 O LojaDev Theme pinta a barra de título de todas as janelas no grafite do menu lateral
- 27/09 A instalação do LojaDev Theme deixa de parar na conferência final quando o Windows está com o PATH sem a pasta do sistema