Skip to content
Mobius One edited this page Jan 20, 2024 · 10 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. Testado no Delphi 10.3.3, 10.4.2 e 11.2, outras versões podem funcionar.

Framework Classe Delphi Lazarus
Firemonkey (FMX) FMXFormat XE3+ N/A
VCL VCLFormat 7+ N/A
Lazarus (LCL) lclformat N/A 2.0+
Tipos de formatos disponíveis:
Tipo Formato
None Remove os caracteres especiais e
devolve texto sem formatação
Data (dia/mês/ano) 99/99/9999
CEP 99.999-999
CEST 99.999.99
CFOP 9.999
CNH AAAAAAAAAAA
CNPJ 99.999.999/9999-99
CNPJorCPF (Dinâmico) utiliza formato CPF ou CNPJ
baseado no total de dígitos
CPF 999.999.999-99
CREA 999999999-9
CRM CRM/LL 999999
Dinheiro R$ 9.999,99
Hora 99:99:99
HoraCurta 99:99
Inscrição Estadual (diferente por estado) 999.999.999/9999 (MG)
NCM 9999.99.99
OAB LL999999
Peso 9,999
Porcentagem 9.999,99%
Telefone (Dinâmico) (99) 9999-9999 ou (99) 99999-9999
Título Eleitor 9999 9999 9999 99
Valor 9.999,99
Veículo Mercosul (placa) AAAAAAA
Veículo Tradicional (placa) 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.
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.

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, 'NFS4UND'); // 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