Multiplicação indo e voltando

Delphi

22/04/2020

Boa noite.

Tenho três DBEdit's

DBEditQt_min
DBEditQt_max
DBEditTotal

No evento Onexit do DBEditQt_min digitei o código:
procedure TfrmPedidos.DBEditQt_minExit(Sender: TObject);
//multiplicar
var v1, v2, resultadoTOTAL: Real;
begin
  v1:=StrToFloat(DBEditQt_min.Text);
  v2:=StrToFloat(DBEditQt_max.Text);
  resultadoTOTAL:= v2*v1;
  DBEditTOTAL.Text:=FloatToStr(resultadoTOTAL);
end;


O mesmo código coloquei no evento OnExite do DBEditQt_max
procedure TfrmPedidos.DBEditQt_maxExit(Sender: TObject);
//multiplicar
var v1, v2, resultadoTOTAL: Real;
begin
  v1:=StrToFloat(DBEditQt_min.Text);
  v2:=StrToFloat(DBEditQt_max.Text);
  resultadoTOTAL:= v2*v1;
  DBEditTOTAL.Text:=FloatToStr(resultadoTOTAL);
end;


Seu eu não digitar nada no DBEditQt_min e clicar na tecla [Enter] me retorna o seguinte erro:
"is not a valid floating point value".
E vai pro próximo DBEditQt_max. Se eu clicar nas teclas [Alt+Tab] da a mesma mensagem.

E se eu digito algum numero no DBEditQt_min e clico na tecla [Enter] para ir pro próximo DBEditQt_max da a mesma mensagem. Mais se eu preencho o campo DBEditQt_max, para de dar o erro mesmo eu indo pra frente e pra traz nesses dois campos clicando repetidamente as teclas [Enter] [Alt+Tab] [Enter] [Alt+Tab] [Enter] [Alt+Tab]

Gostaria da vossa ajuda para não ficar aparecendo essa mensagem.
Rubens Pena

Rubens Pena

Curtidas 0

Melhor post

Emerson Nascimento

Emerson Nascimento

22/04/2020

use a função StrToFloatDef() que, caso não consiga converter o texto em valor, utiliza do segundo parâmetro como o valor default.
procedure TfrmPedidos.DBEditQt_maxExit(Sender: TObject);
//multiplicar
var v1, v2, resultadoTOTAL: Real;
begin
  v1 := StrToFloatDef(DBEditQt_min.Text,0);
  v2 := StrToFloatDef(DBEditQt_max.Text,0);
  resultadoTOTAL:= v2*v1;
  DBEditTOTAL.Text:=FloatToStr(resultadoTOTAL);
end;

e, no lugar de ter duas procedures iguais, aponte o OnExit dos dois componentes para uma mesma procedure.

GOSTEI 1

Mais Respostas

Rubens Pena

Rubens Pena

22/04/2020

use a função StrToFloatDef() que, caso não consiga converter o texto em valor, utiliza do segundo parâmetro como o valor default.
procedure TfrmPedidos.DBEditQt_maxExit(Sender: TObject);
//multiplicar
var v1, v2, resultadoTOTAL: Real;
begin
  v1 := StrToFloatDef(DBEditQt_min.Text,0);
  v2 := StrToFloatDef(DBEditQt_max.Text,0);
  resultadoTOTAL:= v2*v1;
  DBEditTOTAL.Text:=FloatToStr(resultadoTOTAL);
end;

e, no lugar de ter duas procedures iguais, aponte o OnExit dos dois componentes para uma mesma procedure.

Boa tarde.

Maravilha deu certo. Obrigado.
GOSTEI 0
POSTAR