-
-
Notifications
You must be signed in to change notification settings - Fork 10
Format
Mobius One edited this page Sep 22, 2024
·
16 revisions
Home > Format
Warning
Na versão 11.3.1 do Delphi existe um problema interno no FMX Android que embaralha os dígitos, como é possível conferir aqui: RSP-41245 Para resolver isso basta não utilizar o OnTyping mas usar o onExit para formatar os dígitos e no onEnter faz o edit remover a formatação com a função SomenteNumero ou AlfaNumerico
Classes para auxiliar a formatação de valores em campos de texto e rótulos para o usuário, de acordo com o framework da IDE.
Símbolo | Significado |
---|---|
❌ | Incompatível |
❔ | Não testado |
✔ | Compatível |
Framework | Classe | Versão do Delphi | |||||||
---|---|---|---|---|---|---|---|---|---|
- | 7 | 8 | 2005 | 2006 | 2007 | 2009 | 2010 | ||
XE | XE2 | XE3 | XE4 | XE5 | XE6 | XE7 | XE8 | ||
10.0 | 10.1 | 10.2 | 10.3 | 10.4 | 11.3 | 12.2 | |||
Firemonkey (FMX) | FMXFormat | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
❌ | ❌ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ||
❔ | ❔ | ✔ | ✔ | ✔ | ✔ | ✔ | |||
VCL | VCLFormat | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ |
❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ||
❔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |||
Framework | Classe | Versão do Lazarus | |||||||
< 2.0 | 2.0 ~ 2.9 | 3.0+ | |||||||
LCL | lclformat | ❔ | ✔ | ✔ |
Tipos de formatos disponíveis:
Tipo anterior | Novo tipo | Formato |
---|---|---|
None | tfNenhum | Remove os caracteres especiais e devolve texto sem formatação |
&Data | tfData | 99/99/9999 (dia/mês/ano) |
CEP | tfCEP | 99.999-999 |
CEST | tfCEST | 99.999.99 |
CFOP | tfCFOP | 9.999 |
CNH | tfCNH | AAAAAAAAAAA |
CNPJ | tfCNPJ | 99.999.999/9999-99 |
CNPJorCPF | tfCPFCNPJ | utiliza formato CPF ou CNPJ (Dinâmico) baseado no total de dígitos |
CPF | tfCPF | 999.999.999-99 |
CREA | tfCREA | 999999999-9 |
CRM | tfCRM | CRM/LL 999999 |
Dinheiro | tfDinheiro | R$ 9.999,99 |
Hora | tfHora | 99:99:99 |
HoraCurta | tfHoraCurta | 99:99 |
InscricaoEstadual | tfInscricaoEstadual | 999.999.999/9999 (diferente por estado)(MG) |
NCM | tfNCM | 9999.99.99 |
OAB | tfOAB | LL999999 |
Peso | tfPeso | 9,999 |
Porcentagem | tfPorcentagem | 9.999,99% |
Telefone | tfTelefone | (99) 9999-9999 ou (99) 99999-9999 (dinâmico) |
TituloEleitor | tfTituloEleitor | 9999 9999 9999 99 |
Valor | tfValor | 9.999,99 |
VeiculoMercosul | tfVeiculoMercosul | AAAAAAA |
VeiculoTradicional | tfVeiculoTradicional | LLL-9999 |
'9' representa número,
'L' representa Letra,
'#' representa qualquer caractere,
'A' representa caractere Alfanumérico (letra e/ou número)
Funções da classe
Função | Descrição |
---|---|
AlfaNumerico(aStr: string): string; | Devolve letras e números bem como caracteres acentuados. |
BandeiraCartao(aCartao: string): string; | Retorna o nome da bandeira do cartão baseado nos dígitos 'aCartao' informados. |
Decimal(aStr: string): string; | Devolve somente números mantendo a formatação com separador de milhar e decimais, removendo os demais caracteres |
Decimal(aStr: string; aPrecisao: integer): double; | Devolve somente números mantendo a formatação com separador de milhar e decimais, removendo os demais caracteres, com precisão de caracteres ajustável. Padrão: 2 |
Formatar(Formato: TFormato; Texto: string; ExtraArg: variant): string; | Formata o valor do "Texto" baseado no tipo de "Formato" definido. Alguns formatos precisam informar o ExtraArg para que a formatação seja correta. Exemplos abaixo |
Inteiro(aStr: string): string; | Retorna valor formatado como inteiro positivo ou negativo |
Primeiros(aStr: string; aDigitos: integer): string; | Devolve os primeiros 'aDigitos' contidos no texto |
RemoveAcentos(aStr: string): string; | Devolve o texto sem acentuação mantendo os outros caracteres. |
SomenteNumero(aStr: string): string; | Devolve somente os números contidos no texto. |
Ultimos(aStr: string; aDigitos: integer): string; | Devolve os últimos 'aDigitos' contidos no texto. |
ValidaCPF(aCPF: string): boolean; | Retorna true se o 'aCPF' informado possuir um formato válido. |
ValidaCNPJ(aCPNJ: string): boolean; | Retorna true se o 'aCNPJ' informado possuir um formato válido. |
- Formatar um edit para mostrar valor monetário de acordo com o sistema operacional:
uses
VCLFormat;
procedure TForm1.Edit1Change(Sender: TObject);
begin
Edit1.Formatar(Dinheiro);
end;
- Pegar um valor monetário formatado em um campo edit para salvar no banco de dados sem os caracteres especiais:
uses
VCLFormat;
procedure TForm1.Edit1Change(Sender: TObject);
begin
Edit1.Formatar(Dinheiro);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
valorpago: Float;
begin
valorpago := StrToFloatDef(Edit1.Decimal, 0);
end;
- Formatar um edit para mostrar valor monetário de acordo com o sistema operacional:
uses
FMXFormat;
procedure TForm1.Edit1Typing(Sender: TObject);
begin
Edit1.Formatar(Dinheiro);
end;
- Pegar um valor monetário formatado em um campo edit para salvar no banco de dados sem os caracteres especiais:
uses
FMXFormat;
procedure TForm1.Edit1Typing(Sender: TObject);
begin
Edit1.Formatar(Dinheiro);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
valorpago: Float;
begin
valorpago := StrToFloatDef(Edit1.Decimal, 0);
end;
Atribuição sem classHelper:
⚠ Note que algumas informações foram inseridas com erro nos params para indicar que a classe consegue aproveitar somente a parte que interessa e formatar
Edit1.Text := Formato.Formatar(&Date, '18-10.2023'); // ele vai corrigir o dado inserido e converter pra data
Edit1.Text := Formato.Formatar(Bits, '1321687465143251968541981');
Edit1.Text := Formato.Formatar(CEP, '11,001/970');
Edit1.Text := Formato.Formatar(CEST, 'abacaxi 9900011');
Edit1.Text := Formato.Formatar(CFOP, 'suco de caju 1234');
Edit1.Text := Formato.Formatar(CNH, '1234789AB56');
Edit1.Text := Formato.Formatar(CNPJ, '99333222555544 s/a');
Edit1.Text := Formato.Formatar(CPF, 'Foragido 11122217113');
Edit1.Text := Formato.Formatar(CREA, '1112223334 Pedreiro');
Edit1.Text := Formato.Formatar(CRM, 'Dr Braulio 123456', TUF.RJ);
Edit1.Text := Formato.Formatar(Dinheiro, 'Devo a mim mesmo 123456');
Edit1.Text := Formato.Formatar(Hora, 'Está atrasado em 123456');
Edit1.Text := Formato.Formatar(HoraCurta, 'Hora do Chá 0420');
Edit1.Text := Formato.Formatar(InscricaoEstadual, '111222333444', TUF.SP);
Edit1.Text := Formato.Formatar(NCM, 'Mercadoria que paga menos: 12342233');
Edit1.Text := Formato.Formatar(OAB, 'Pra você é DR. 234567', TUF.DF);
Edit1.Text := Formato.Formatar(Peso, 'Tenho que emagrecer 1234 KG');
Edit1.Text := Formato.Formatar(Porcentagem, 'Imposto de 999,99');
Edit1.Text := Formato.Formatar(Telefone, '11912341234 Liga pra mim, meu coração vai te esperar...');
Edit1.Text := Formato.Formatar(TituloEleitor, '11112222333344');
Edit1.Text := Formato.Formatar(Valor, 'Precinho de banana 1,99');
Edit1.Text := Formato.Formatar(VeiculoMercosul, 'N4SUND'); // aqui precisa ser o texto próprio da placa pois aceita caracteres alfanuméricos
Edit1.Text := Formato.Formatar(VeiculoTradicional, 'BRA-1234 Fuscão preto'); // aqui também