Skip to content
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

Descrição e Informações gerais

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.

Compatibilidade

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
obs: Na tabela acima:
'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.

Exemplos de Uso

VCL (Delphi) ou LCL (Lazarus)

  • 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;

FMX (Delphi)

  • 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;

Exemplos com todos os tipos

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

PascalLibs

Clone this wiki locally