Ir para conteúdo
Fórum Script Brasil
  • 0

Três Casas decimais usando KeyPress do edit


Paulo Henrique de Assis

Pergunta

Olá pessoal gostaria em saber se alguém uma função que ao digitar um valor no edit ele já vai colocando em casas decimais usando o KeyPress do Edit, logo tenho esse abaixo:

function TForm1.fnumD(Objeto: TEdit; Texto, VKey: String; Espaco, Decimal: Integer): String;

Var vChar, vDiv : String;

I : Integer;

begin

vDiv := '1';

For I := 1 to Decimal do

vDiv := vDiv + '0';

if VKey<>#13 then

vChar := IfThen ( VKey = #8, Copy(Texto,1,Length(Texto)-1),Texto+VKey )

else

vChar := IfThen ( VKey = #8, Copy(Texto,1,Length(Texto)-1),Texto+'' );

While ( pos( ',', vChar ) > 0 ) or ( pos( '.', vChar ) > 0 ) do

begin

Delete( vChar, pos( '.', vChar ), 1 );

Delete( vChar, pos( ',', vChar ), 1 );

end;

Objeto.MaxLength := Espaco-1;

Objeto.Text := Format('%*.*n',[Espaco,Decimal,StrToFloat(vChar)/StrToInt(vDiv)]);

Objeto.SelStart := length(Objeto.text)+1;

end;

Ele faz isso, porem o unico problema é o seguinte: por exemplo eu digito 222 o resultado no edit será 0,222 porem q eu queria é quando eu seleciosse todo o valor no edit e digitasse ele apagasse esse valor anterior e começasse com o valor digitado, por exemplo , selecionei o 0,222 e digitei 333 e o resultado teria que ser 0,333! Logo se eu fizer esse processo nessa função o resultado será 222,333 , tipo ele soma ao invés de substituir!

Se alguém tiver uma função melhor ou até mesmo dar uma dica p melhorá-la ficarei grato!

Até Mais!!!

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0
Olá pessoal gostaria em saber se alguém uma função que ao digitar um valor no edit ele já vai colocando em casas decimais usando o KeyPress do Edit, logo tenho esse abaixo:

function TForm1.fnumD(Objeto: TEdit; Texto, VKey: String; Espaco, Decimal: Integer): String;

Var vChar, vDiv : String;

I : Integer;

begin

vDiv := '1';

For I := 1 to Decimal do

vDiv := vDiv + '0';

if VKey<>#13 then

vChar := IfThen ( VKey = #8, Copy(Texto,1,Length(Texto)-1),Texto+VKey )

else

vChar := IfThen ( VKey = #8, Copy(Texto,1,Length(Texto)-1),Texto+'' );

While ( pos( ',', vChar ) > 0 ) or ( pos( '.', vChar ) > 0 ) do

begin

Delete( vChar, pos( '.', vChar ), 1 );

Delete( vChar, pos( ',', vChar ), 1 );

end;

Objeto.MaxLength := Espaco-1;

Objeto.Text := Format('%*.*n',[Espaco,Decimal,StrToFloat(vChar)/StrToInt(vDiv)]);

Objeto.SelStart := length(Objeto.text)+1;

end;

Ele faz isso, porem o unico problema é o seguinte: por exemplo eu digito 222 o resultado no edit será 0,222 porem q eu queria é quando eu seleciosse todo o valor no edit e digitasse ele apagasse esse valor anterior e começasse com o valor digitado, por exemplo , selecionei o 0,222 e digitei 333 e o resultado teria que ser 0,333! Logo se eu fizer esse processo nessa função o resultado será 222,333 , tipo ele soma ao invés de substituir!

Se alguém tiver uma função melhor ou até mesmo dar uma dica p melhorá-la ficarei grato!

Até Mais!!!

acho q seria você pegar o resultado 0,222 copiar para uma variavel e ai na hora de digitar é só acrescentar como String!

Link para o comentário
Compartilhar em outros sites

  • 0
Olá pessoal gostaria em saber se alguém uma função que ao digitar um valor no edit ele já vai colocando em casas decimais usando o KeyPress do Edit, logo tenho esse abaixo:

function TForm1.fnumD(Objeto: TEdit; Texto, VKey: String; Espaco, Decimal: Integer): String;

Var vChar, vDiv : String;

I : Integer;

begin

vDiv := '1';

For I := 1 to Decimal do

vDiv := vDiv + '0';

if VKey<>#13 then

vChar := IfThen ( VKey = #8, Copy(Texto,1,Length(Texto)-1),Texto+VKey )

else

vChar := IfThen ( VKey = #8, Copy(Texto,1,Length(Texto)-1),Texto+'' );

While ( pos( ',', vChar ) > 0 ) or ( pos( '.', vChar ) > 0 ) do

begin

Delete( vChar, pos( '.', vChar ), 1 );

Delete( vChar, pos( ',', vChar ), 1 );

end;

Objeto.MaxLength := Espaco-1;

Objeto.Text := Format('%*.*n',[Espaco,Decimal,StrToFloat(vChar)/StrToInt(vDiv)]);

Objeto.SelStart := length(Objeto.text)+1;

end;

Ele faz isso, porem o unico problema é o seguinte: por exemplo eu digito 222 o resultado no edit será 0,222 porem q eu queria é quando eu seleciosse todo o valor no edit e digitasse ele apagasse esse valor anterior e começasse com o valor digitado, por exemplo , selecionei o 0,222 e digitei 333 e o resultado teria que ser 0,333! Logo se eu fizer esse processo nessa função o resultado será 222,333 , tipo ele soma ao invés de substituir!

Se alguém tiver uma função melhor ou até mesmo dar uma dica p melhorá-la ficarei grato!

Até Mais!!!

acho q seria você pegar o resultado 0,222 copiar para uma variavel e ai na hora de digitar é só acrescentar como String!

Por favor tem como postar um exemplo?

Obrigado

Link para o comentário
Compartilhar em outros sites

  • 0

tente isso, acho q ajuda.

copia, copia2 : integer;

implementation

{$R *.dfm}

procedure TForm1.Edit1Enter(Sender: TObject);

begin
  copia := StrToInt(StringReplace(Edit1.Text,',','',[]));
end;

procedure TForm1.Edit1Exit(Sender: TObject);
begin

  copia2 := StrToInt(StringReplace(Edit1.Text,',','',[]));

  Edit1.Text := IntToStr(copia) +','+ IntToStr(copia2);
end;

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...