Estive pesquisando meios de usar um TEdit no Delphi com formatação como a dos Bancos em Moeda, para um Projeto antigo meu. Porém, achei apenas uma postagem falando sobre o assunto. (Link segue nas fontes)
Mas, apesar de fazer o que eu queria, o código era um tanto complicado, pois da forma que estava seria necessário refazer o mesmo para todos os TEdits que eu fosse usar para inserir valores monetários além de ter que usar 2 eventos de cada TEdit (OnkeyPress e OnChange). Então, baseado nesse código criei uma pequena Procedure para fazer essa formatação de maneira simples. Para isso, basta passar como parâmetro o TEdit que deve ser formatado e o Key do teclado que será passado ao mesmo. Segue código comentado abaixo.
{
@param TObject Componente - Conponente Delphi, TEdit no caso!
@param Char Key - caracter acionado no teclado
}
Procedure FormatarComoMoeda( Componente : TObject; var Key: Char );
var
str_valor : String;
dbl_valor : double;
begin
{ verificando se estamos recebendo o TEdit realmente }
IF Componente is TEdit THEN
BEGIN
{ se tecla pressionada e' um numero, backspace ou del deixa passar }
IF ( Key in ['0'..'9', #8, #9] ) THEN
BEGIN
{ guarda valor do TEdit com que vamos trabalhar }
str_valor := TEdit( Componente ).Text ;
{ verificando se nao esta vazio }
IF str_valor = EmptyStr THEN str_valor := '0,00' ;
{ se valor numerico ja insere na string temporaria }
IF Key in ['0'..'9'] THEN str_valor := Concat( str_valor, Key ) ;
{ retira pontos e virgulas se tiver! }
str_valor := Trim( StringReplace( str_valor, '.', '', [rfReplaceAll, rfIgnoreCase] ) ) ;
str_valor := Trim( StringReplace( str_valor, ',', '', [rfReplaceAll, rfIgnoreCase] ) ) ;
{inserindo 2 casas decimais}
dbl_valor := StrToFloat( str_valor ) ;
dbl_valor := ( dbl_valor / 100 ) ;
{reseta posicao do tedit}
TEdit( Componente ).SelStart := Length( TEdit( Componente ).Text );
{retornando valor tratado ao TEdit}
TEdit( Componente ).Text := FormatFloat( '###,##0.00', dbl_valor ) ;
END;
{se nao e' key relevante entao reseta}
IF NOT( Key in [#8, #9] ) THEN key := #0;
END;
end;
Para usar este Procedure basta incluir um TEdit em seu Form Delphi e no evento KeyPress faça uma chamada a Procedure passando como parâmetros o TEdit que contem o valor e a Key que é enviada pelo Windows.
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
FormatarComoMoeda( Edit1, Key );
end;
Fonte de Pesquisa! Me baseei nesse código para criar o meu então todos os méritos da Lógica empregada para o dono Original do Post ( http://delphisempre.blogspot.com.br/2012/05/formatar-edit-estilo-moeda.html )
Obrigado pelo algoritmo, me ajudou demais aqui...
ResponderExcluirObrigado amigo.
ResponderExcluirFoi uma boa solução
você salvou meu código e meus neurônios!
ResponderExcluir