Fórum calculos em dois edits #456032

20/09/2013

0

Boa tarde pessoal! estou desenvolvendo um sisteminha de calculos de pontuação de ficha de militares. Nesse sistema tem pontos positivos e negativos e a soma e subtração dos campos (edits) é feita, não por button e sim pela tecla enter e tab, tipo assim vou apertando tab ou enter e soma via saindo edtresultadototal.

pontos positivo:

if (Key = #13)then
begin
if(Edit1.Text <> '\')then
begin
Key := #0;
Perform(WM_NEXTDLGCTL, 0, 0);
soma:= StrToFloat(Edit1.Text);
EdtSubTotalSoma.Text:=FloatToStr(soma);
EdtTotal.Text :=FloatToStr(soma);
end
else
MessageDlg('Obrigatório Preenchimento\', mtWarning,
[mbOk], 0);
end

e
pontos negativos:

if (Key = #13)then
begin
if(Edit12.Text <> '\')then
begin
Key := #0;
Perform(WM_NEXTDLGCTL, 0, 0);
soma:= soma - StrToFloat(Edit12.Text);

EdtTotal.Text :=FloatToStr(soma);

end
else
MessageDlg('Obrigatório Preenchimento\', mtWarning,
[mbOk], 0);
end


até aí tudo bem, só que estou precisando fazer uns calculos e não estou conseguindo que é quando eu digitar um numero em um edit ele tem que valer outro em outro edit por ex:

se um militar tiver um curso de 100 horas e eu digitar 100 num edit tem que aparecer 1,0 no outro edit de cursos, pois a cada 100 horas aula vale um ponto, vc entederam? alguém pode me ajudar nessa?
Paulo

Paulo

Responder

Posts

20/09/2013

Marcos Saffran

Olá Paulo Sergio,

o outro edit tem que ser um edit ou pode ser um label, já que será um campo calculado.

de qualquer maneira, a minha sugestão é que no evento onexit do primeiro edit você execute o cálculo automaticamente.
Responder

Gostei + 0

20/09/2013

Paulo

Olá Paulo Sergio,

o outro edit tem que ser um edit ou pode ser um label, já que será um campo calculado.

de qualquer maneira, a minha sugestão é que no evento onexit do primeiro edit você execute o cálculo automaticamente.


Sou novo nessa área e o problema é como fazer esse calculo no 1º edit para aparecer a pontuação no 2º edit.
Responder

Gostei + 0

20/09/2013

Marcos Saffran

Ok Paulo Sergio,

no evento OnExit do primeiro edit insira o seguinte código:
var
calc : (aqui você define como será a sua variárivel (integer, floart, double);
begin
calc := (StrToInt(Edit1.Text) / 100); ( valor que você escolhe, aqui considerei a variável com Integer (inteiro)).
Edit2.Text := IntToStr(calc); o IntToStr é se o valor for integer, senão escolha a conversão que você usar.
end;

Isso pode ser feito diretamente, sem a variável 'calc', mas fica complicado explicar isso.

Espero ter ajudado,

até mais.
Marcos A Saffran.
Responder

Gostei + 0

21/09/2013

Paulo

Ok Paulo Sergio,

no evento OnExit do primeiro edit insira o seguinte código:
var
calc : (aqui você define como será a sua variárivel (integer, floart, double);
begin
calc := (StrToInt(Edit1.Text) / 100); ( valor que você escolhe, aqui considerei a variável com Integer (inteiro)).
Edit2.Text := IntToStr(calc); o IntToStr é se o valor for integer, senão escolha a conversão que você usar.
end;

Isso pode ser feito diretamente, sem a variável 'calc', mas fica complicado explicar isso.

Espero ter ajudado,

até mais.
Marcos A Saffran.



Esta´dando certo para alguns campos, por ex:

não estou conseguindo transformar os campos: (Curso superior e medalha) nos numeros corretos, pois curso superior e medalha, cada um vale 3,00 pontos e na minha transformação está saindo o valor: 3,000000000021 e queria que fechasse em 3,0.

olha só o ex: das duas transformações :


CURSO SUPERIOR
procedure TFrmPrincipal.Edit31Exit(Sender: TObject);
begin
calc := (StrToFloat(Edit31.Text) / 0.333333333331); // ESTA CONTAGEM AQUI NÃO ESTÁ DANDO CERTO
Edit12.Text := FloatToStr(calc);

end;


MEDALHA
procedure TFrmPrincipal.Edit21Exit(Sender: TObject);
begin
calc := (StrToFloat(Edit21.Text) / 0.333333333331); // ESTA CONTAGEM AQUI NÃO ESTÁ DANDO CERTO
Edit5.Text := FloatToStr(calc);

end;
Responder

Gostei + 0

22/09/2013

Marcos Saffran

Tente usar a função roundto:
CURSO SUPERIOR
procedure TFrmPrincipal.Edit31Exit(Sender: TObject);
begin
calc := RoundTo((StrToFloat(Edit31.Text) / 0.333333333331), -1); // ESTA CONTAGEM AQUI NÃO ESTÁ DANDO CERTO
Edit12.Text := FloatToStr(calc);

end;


MEDALHA
procedure TFrmPrincipal.Edit21Exit(Sender: TObject);
begin
calc := RoundTo((StrToFloat(Edit21.Text) / 0.333333333331), -1); // ESTA CONTAGEM AQUI NÃO ESTÁ DANDO CERTO
Edit5.Text := FloatToStr(calc);

end;

essa função verifiquei no seguinte artigo:
https://www.devmedia.com.br/rotinas-de-arredondamento-round-roundto-simpleroundto-setroundmode-e-getroundmode/21114
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar