Impedir a colagem de Texto, em Edits que só aceitam números.

05/12/2003

1

Ja vi aqui nesse fórum diversos tópicos sobre como travar a digitação em um Edit apenas para números.

Entretando, usando o metodo no OnKeyPress e verificar se Key in [´0´..´9´...... etc...] permite que o usuário cole strings dentro do editbox ao pressionar Ctrl+V.

Gostaria de saber se existe um metodo de impedir isso, programando na CLX.


Responder

Posts

05/12/2003

Deus

Bem, isso é simples.. eu criei uma função que resolve isso pra você. :) É só no evento [i:a90d521feb]OnChange[/i:a90d521feb] do Edit você fazer o seguinte:

procedure TForm1.Edit1Change(Sender: TObject);
var
      i: Integer;
  stTmp: String;
begin
  i := 1;

  stTmp := Edit1.Text;
  while not (i > Length(stTmp)) do
    if not (stTmp[i] in [´0´..´9´]) then
      Delete(stTmp, i, 1)
    else
      inc(i);

  Edit1.OnChange := nil;
  Edit1.Text := stTmp;
  Edit1.OnChange := Edit1Change;
end;


Se você colar qualquer coisa, o evento tira tudo o que não for número. Para evitar que o evento OnChange fosse chamado recursivamente infinitas vezes e causasse um estouro de pilha, eu tive de atribuir [i:a90d521feb]nil[/i:a90d521feb] ao evento [i:a90d521feb]OnChange[/i:a90d521feb] do Edit para poder atribuir um novo valor, e então reatribuir o procedimento ao evento. :)

Espero que tenha sido útil! ;) Um abraço, dEUS.


Responder

05/12/2003

Thiago Vidal

exatamente oq eu procurava... eu tava justamente tendo este problema de estouro da pilha fazendo do meu jeito.

obrigado pela ajuda.


Responder