Tem como calcular valores dentro de um edit?

Delphi

22/07/2005

Ola amigos boa tarde, gostaria de saber se tem como mudar esses codigos para nao precisar ficar escrevendo na unit as formulas

if StrToInt(edit2.text) = 1 then
begin
query1.Edit;
query1valor.value:=form3.Table2salario.value/30*strtoint(dbedit5.text);
query1.post;
bitbtn2.setfocus;
end;

if StrToInt(edit2.text) = 3 then
begin
query1.Edit;
query1valor.value:=form3.Table2salario.value/220*strtoint(dbedit5.text);
query1.post;
bitbtn2.setfocus;
end;


Notem que o codigo = 1 tem uma formula de calculo e o codigo = 3 tem outra formula de calculo, sera que nao da pra ajuntar essas formulas de calculos dentro de um edit usando os operadores? Ficaria mais pratico e nao precisaria fazer um monte de formula dentro de um unit.pas

Digamos que eu inclua um codigo = 4 Horas Extras 50¬
a formula seria essa dentro de um edit (salario)/220*1.5*(quant)

(salario) = form3.table2salario.value
(quant) = dbedit5.text // que seria a quantidade de horas

Alguem tem alguma ideia como, ou se tem jeito de fazer isso?

Agradeço pela ajuda de todos
Obridado
Adriano.


Adriano_servitec

Adriano_servitec

Curtidas 0

Respostas

Rjun

Rjun

22/07/2005

Crie um função que receba o código e retorne o valor calculado. Desse jeito você faria o post assim:

Query1.Edit;
Query1.FieldByName(´Valor´).Value := ValorCalculado(Edit2.Text);
Query1.Post;



GOSTEI 0
Adriano_servitec

Adriano_servitec

22/07/2005

Ola Rogerio, desculpe nao ter entendido como criar essa funçao

Código:

Query1.Edit;
Query1.FieldByName(´Valor´).Value := ValorCalculado(Edit2.Text);
Query1.Post;

Tenho que criar um banco de dados para gravar o que esta no edit?

tipo codigo, descricao, formula, o codigo seria o codigo que eu criar, descricao seria tipo salario mensal e formula seria valor calculado?

Poxa nao consegui entender amigo


GOSTEI 0
Rjun

Rjun

22/07/2005

function ValorCalculado(Codigo: string): double;
begin
  result := 0;

  if Codigo = ´1´ then
    result := form3.Table2salario.value / 30 * strtoint(dbedit5.text); 
  else if Codigo = ´2´ then
    result := form3.Table2salario.value / 220 * strtoint(dbedit5.text); 
end;


Essa função pode ser melhorada. Foi só pra te dar uma ideia.


GOSTEI 0
Adriano_servitec

Adriano_servitec

22/07/2005

Bom nesse caso de qualquer forma tenho que escrever a funçao na unit.pas


function ValorCalculado(Codigo: string): double;
begin
result := 0;

if Codigo = ´1´ then
result := form3.Table2salario.value / 30 * strtoint(dbedit5.text);
else if Codigo = ´2´ then
result := form3.Table2salario.value / 220 * strtoint(dbedit5.text);
else if Codigo = ´3´ then
result := form3.Table2salario.value / 220 *1.5/100;
else if Codigo = ´4´ then
result := form3.Table2salario.value / 220 * 2.0/100;
end;

Minha ideia eh quando incluir um codigo dentro de um form tenha um edit aode possa escrever esse formula que esta dentro da unit.pas


entao o result seria o que tem dentro da edit.text do form


GOSTEI 0
Daemon

Daemon

22/07/2005

..Bom cara. ..eu fiz um codigozinho simples, considerando que vai ter diversos edits com conteudo, usando a função abaixo no Evento OnKeyDown, você pode fazer todos edits chamar a mesma função:

procedure TfrmPrin.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
const
  Validos = [1,3];  //Tipos que vão ser aceitos..
var
  iTemp:Integer;

  function RetornaValor(Tipo:Integer):Extended;
  begin

    case Tipo of
      1: result := form3.Table2salario.value/30*strtoint(dbedit5.text);
      3: result := form3.Table2salario.value/220*strtoint(dbedit5.text);
      //Se aparecer um outro tipo, inclua aqui
    else
      result := 0;
    end;

  end;

begin

  if key = Vk_Return then
  begin

    if (Sender is TEdit) then
    begin

      iTemp := StrToInt((Sender as TEdit).Text);
      if iTemp in Validos then
      begin
        query1.Edit;
        query1valor.value:=RetornaValor(iTemp);
        query1.post;
        bitbtn2.setfocus;
      end;

    end;

  end;

end;


...vê se isso resolve...

...flws


GOSTEI 0
Adriano_servitec

Adriano_servitec

22/07/2005

Ola Daemon, tentei fazer do jeito que tu me passou, nao consegui entender, mais valeu muito pela ajuda. O que eu so queria eh saber num form eu criar um editcodigo=para incluir codigo, e em um outro editformula=criar as formulas entao gravar num botao

No editcodigo digito assim =1
No editformula digito assim=salario/30*
depois gravo
Novamente no mesmo editcodigo=2
No editformula digito assim=salario/220*
depois gravo
Novamente no mesmo editcodigo=3
No editformula digito assim=salario/220*1.5
depois gravo

e assim por diante

Entao em outro form quando digitar o codigo 1 ele pega a formula e o dbedit5.text eh o mesmo que quantidade ele calcula pra dar o valor

Valeu amigo pela ajuda
Obrigado


GOSTEI 0
Daemon

Daemon

22/07/2005

...bom ...nesse caso é só fazer exatamente do jeito que vc fez. ..só que usando DBEdits, para facilitar sua vida.. ..e outra coisa. ....a expressão vai ter que ser resolvida no banco de dados, pois o proprio Edit não resolve a equação. ...


GOSTEI 0
Adriano_servitec

Adriano_servitec

22/07/2005

Eh realmente parece nao ter jeito de fazer essas formulas por causa dos operadores, mais facilitaria muito meu projeto se funcionasse.

Fiz um tipo de calculo para usar operadores mais nao resolveu, usei 5 dbedits, dbedit1salario, dbedit2op1,dbedit3fixo,dbedit4op2,dbedit5result eis ai o codigo que fiz

num bitbtn calcula os operadores

var
opr,opr2, OPR3: char;
vr1,vr2,vr3, VR4, result: real;
begin
vr1:=StrToFloat(DBEdit1.Text);
vr2:=StrToFloat(DBEdit3.Text);
vr3:=strtofloat(dbedit5.text);
opr:=DBEdit2.Text[1];
opr2:=dbedit4.text[1];
OPR3:=DBEDIT10.TEXT[1];

case opr of
´+´: result:=vr1+vr2;
´-´: result:=vr1-vr2;
´*´: result:=vr1*vr2;
´/´: result:=vr1/vr2;
else exit end;

vr1:=result;
vr2:=StrToFloat(DBEdit5.Text);
opr:=DBEdit4.Text[1];

case opr of
´+´: result:=vr1+vr2;
´-´: result:=vr1-vr2;
´*´: result:=vr1*vr2;
´/´: result:=vr1/vr2;
else exit end;

qry1.Edit;
qry1result.value:=result;
qry1.post;
end;

Isso funciona bem se o calculo for salario/220*30=result

Mais nao funciona com Horas Extras pq a formula eh assim
salario/220*1.5*quanthoras
Nesse caso teria que ter mais operadores e na pratica fica dificil de desenvolver, pois existe muitos calculos diferentes


Bom vou fazer do jeito que estava mesmo

Obrigado amigos pela ajuda
Valeu pela força de todos
T+


GOSTEI 0
POSTAR