Tem como calcular valores dentro de um edit?
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.
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
Curtidas 0
Respostas
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
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
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
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
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
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
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:
...vê se isso resolve...
...flws
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
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
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
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
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+
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