Fórum quantidade de digitos antes da virgula #592449
12/04/2018
0
Tenho um problema a resolver e não estou dando conta mesmo.
seguinte:
tenho um campo na tabela que é decimal (7,4), porem se o usuário digitar uma sequencia maior q a quantidade de 8 números sem digitar a vírgula apresenta esta mensagem: Number is out of range.
Sei que é por ter ultrapassado a quantidade de 7 casas antes da vírgula, porem como faço para apresentar uma mensagem amigável? tentei no onvalidate do tfield e não consegui capturar este erro, alguém pode me ajudar, ou se tiver alguma ideia.
no displayformat estou usando ###.##0,000
Obrigado
Marcos
Curtir tópico
+ 0Post mais votado
13/04/2018
Willian Silva
Gostei + 1
Mais Posts
13/04/2018
Luiz Vichiatto
Você pode utilizar o onKeyPress do componente para contar o número de itens, já fiz este tipo de tratamento, porém limitei o tamanho da entrada do campo, não contando virgulas.
Se estiver utilizando algum componente do tipo DataControl, experimente setar o MaxValue (caso tenha) ou MaxLength
Também pode tratar com try ... exception... end;
Gostei + 0
13/04/2018
Marcos
WSilva, obrigado por estar me ajudando, o problema é que não funciona, estou usando direto no DBEDIT, e o que faz esta validação é o onvalidate do tfield, preciso saber como tratar o onvalidate. ex:
procedure TDATA_empresa.CDS_produtoPesoValidate(Sender: TField);
begin
if Sender.AsFloat > 50 then
raise Exception.Create('Não permitido peso maior que 50');
end;
mas não quero testar o valor em si, mas o número de dígitos permitidos, no caso os 7 dígitos antes da vírgula, o delphi mostra uma tela de erro, quero que apresente algo em português.
Gostei + 0
13/04/2018
Marcos
Você pode utilizar o onKeyPress do componente para contar o número de itens, já fiz este tipo de tratamento, porém limitei o tamanho da entrada do campo, não contando virgulas.
Se estiver utilizando algum componente do tipo DataControl, experimente setar o MaxValue (caso tenha) ou MaxLength
Também pode tratar com try ... exception... end;
Gostei + 0
13/04/2018
Raimundo Pereira
Veja se ajuda na sua validação:
uses StrUtils;
Function Extrair_Antes_Virgula(Origem:string):string;
var
a, b : integer;
begin
a := length(Origem);
b := pos(',', Origem);
Result := Trim(copy(Origem, 1, b - 1));
end;
Function Valida_Quantidade_Prefixo(Origem:string; Max:integer):Boolean;
begin
if Length(Origem)<8 then
begin
Result:=true;
end
else
begin
Result:=false;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if Valida_Quantidade_Prefixo(Extrair_Antes_Virgula(Edit1.Text),7)=true then
begin
ShowMessage('OK - Possui exatamente '+IntToStr(Length(Extrair_Antes_Virgula(Edit1.Text)))+' Dig');
end
else
begin
ShowMessage('ops - Possui exatamente '+IntToStr(Length(Extrair_Antes_Virgula(Edit1.Text)))+' Dig');
end;
end;
Gostei + 0
13/04/2018
Raimundo Pereira
Function Valida_Quantidade_Prefixo(Origem:string; Max:integer):Boolean; begin if Length(Origem)<Max+1 then begin Result:=true; end else begin Result:=false; end;
Gostei + 0
13/04/2018
Marcos
A solução foi usar o ApplicationEvents, e no Events, Exception
if (Screen.ActiveControl = DBEdit9) then // DBEdit9 é o nome do campo que recebe 7,4
begin
ShowMessage('Informe um valor válido!');
DBEdit9.Clear;
DBEdit9.SetFocus;
end;
lembrando que usei no Tfiel
DisplayFormat : ###,##0.000
MaxValue 99999,999
obrigado a todos
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)