EConvertError Dor de cabeça = Skj pirando
Galera não sei maid o que fazer.. Lutei e acho q fui vencido..
Por exemplo, se eu colocar a seguinte expressão pra uma variavel e quero mostrar na edit assim:
var calculo:real;
begin
calculo:= ((1*6)+(2*4)/10);
edit1.text:=floattostr(calculo);
Okay né?
Agora digamos q a expressao foi digitada em um edit e quero fazer o calculo, assim:
var calculo:real;
begin
calculo:= strtofloat(edit1.text);
Adivinha? È encontrar um carater e dá rolo.. Pd ser parenteses, mais, o q for..
Como faço pra pegar a expressao [q sempre irá mudar] e calcular?
Por favor companheiros, vinguem meu sangue derramado sobre essa besta implacável!!
Por exemplo, se eu colocar a seguinte expressão pra uma variavel e quero mostrar na edit assim:
var calculo:real;
begin
calculo:= ((1*6)+(2*4)/10);
edit1.text:=floattostr(calculo);
Okay né?
Agora digamos q a expressao foi digitada em um edit e quero fazer o calculo, assim:
var calculo:real;
begin
calculo:= strtofloat(edit1.text);
Adivinha? È encontrar um carater e dá rolo.. Pd ser parenteses, mais, o q for..
Como faço pra pegar a expressao [q sempre irá mudar] e calcular?
Por favor companheiros, vinguem meu sangue derramado sobre essa besta implacável!!
Skaarj
Curtidas 0
Respostas
Anonymous
06/02/2003
Meu bruxo...Coloque sua expressão entre os comandos TRY EXCEPT
como segue o exemplo abaixo
TRY
var calculo:real;
temp : string;
i : integer
begin
calculo:= strtofloat(edit1.text);
edit1.text:=floattostr(calculo);
except
//Aqui voce trata o problema que ocorreu
//se o usuario digitou algum CARACTER voce simplesmente faz um loop
//no objeto EDIT1 ´
for i:= 1 to length(Edit1.Text) do begin
if Copy(Edit1,Text,i,1) in [´1´,´2´ etc..etc] then
temp:=temp+Copy(Edit1,Text,i,1)
else break
edit1.text:=floattostr(temp);
end;
Espero ter ajudado
como segue o exemplo abaixo
TRY
var calculo:real;
temp : string;
i : integer
begin
calculo:= strtofloat(edit1.text);
edit1.text:=floattostr(calculo);
except
//Aqui voce trata o problema que ocorreu
//se o usuario digitou algum CARACTER voce simplesmente faz um loop
//no objeto EDIT1 ´
for i:= 1 to length(Edit1.Text) do begin
if Copy(Edit1,Text,i,1) in [´1´,´2´ etc..etc] then
temp:=temp+Copy(Edit1,Text,i,1)
else break
edit1.text:=floattostr(temp);
end;
Espero ter ajudado
GOSTEI 0
Dor_poa
06/02/2003
Cara... Acho meio dificil funcionar deste jeito... pois quado vc. esta fazendo strtofloat(edit1.text) vc esta convertendo um valor STR para Float, ou seja se tiver uma um sial de + ou - ou ate parenteses vai dar pau... EU sei que vc. sabe o que estou dizendo.. o que estou tentando te dizer e que desta forma NUNCA VAI DAR...
U nunca prescisei fazer isto que tu esta fazendo, mas se eu tivesse que fazer eu só teria 2 alternativa:
1º fazer uma telinha tipo calculadora...... onde ele ia clicar nos sinais...
2º Monitoraria tudo que esta sendo digitado no edit e armazenaria em variaveis ou array:
tenho que fazer a conta 5+5
* Quando ele pressionasse a 1º cadeia de numeros eu armazenava na variavel1 (ou array) o numero 5 (isto tudo no evento onkeypress ou onkeydow)
var1 := 5;
* Quando pressionasse o sinal de adiçao a mesma coisa
ex:
Op1 := ´+´;
* Quando ele pressionasse a 2ºcadeia de numeros eu armazenava na variavel2 (ou array) o numero 5
var2 := 5;
Quando o cara pressionasse o enter, e que a maluquice entrava em ação:
primeiro vc. tera que saber quantos operadores foi usado e se estao dentro de pareteses pois nao esqueca que o campo Op1 e uma String (Op1e o tipo de operacao)
ex:
if op1= ´+´ then
Calculo := var1 + var2;
if op1= ´-´ then
Calculo := var1 - var2;
if op1= ´*´ then
Calculo := var1 * var2;
Obs.: ë obvio que nao prescisa ser uma string o campo de operaçoes, existe um tipo de variavel especifica para as operaçoes, mas faz muito , mas muito tempo que nao a uso e nao me lembro no momento....
Eu acho que vc. entendeu o que eu quis te passar, Cara, isto é mais facil do que tu pensa, basta seguir esta lunha de raciocinio....
Abraços...
U nunca prescisei fazer isto que tu esta fazendo, mas se eu tivesse que fazer eu só teria 2 alternativa:
1º fazer uma telinha tipo calculadora...... onde ele ia clicar nos sinais...
2º Monitoraria tudo que esta sendo digitado no edit e armazenaria em variaveis ou array:
tenho que fazer a conta 5+5
* Quando ele pressionasse a 1º cadeia de numeros eu armazenava na variavel1 (ou array) o numero 5 (isto tudo no evento onkeypress ou onkeydow)
var1 := 5;
* Quando pressionasse o sinal de adiçao a mesma coisa
ex:
Op1 := ´+´;
* Quando ele pressionasse a 2ºcadeia de numeros eu armazenava na variavel2 (ou array) o numero 5
var2 := 5;
Quando o cara pressionasse o enter, e que a maluquice entrava em ação:
primeiro vc. tera que saber quantos operadores foi usado e se estao dentro de pareteses pois nao esqueca que o campo Op1 e uma String (Op1e o tipo de operacao)
ex:
if op1= ´+´ then
Calculo := var1 + var2;
if op1= ´-´ then
Calculo := var1 - var2;
if op1= ´*´ then
Calculo := var1 * var2;
Obs.: ë obvio que nao prescisa ser uma string o campo de operaçoes, existe um tipo de variavel especifica para as operaçoes, mas faz muito , mas muito tempo que nao a uso e nao me lembro no momento....
Eu acho que vc. entendeu o que eu quis te passar, Cara, isto é mais facil do que tu pensa, basta seguir esta lunha de raciocinio....
Abraços...
GOSTEI 0
Dor_poa
06/02/2003
************************************************************
OBSERVACAO
************************************************************
estou partindo do ponto de vita que as expressoes a serem realizadas estejam no edit, náo os numeros pressionados. Pois se vc. quiser evitar que os usuarios escreva valores diferente de numeros utilize este codigo no evento onkeypress ou onkeydow
if (Key in [´1´..´9´]) then
Key := Key
Else begin
Key := Chr(0) ;
end ;
OBSERVACAO
************************************************************
estou partindo do ponto de vita que as expressoes a serem realizadas estejam no edit, náo os numeros pressionados. Pois se vc. quiser evitar que os usuarios escreva valores diferente de numeros utilize este codigo no evento onkeypress ou onkeydow
if (Key in [´1´..´9´]) then
Key := Key
Else begin
Key := Chr(0) ;
end ;
GOSTEI 0
Dor_poa
06/02/2003
me manda um email dizendo como foi???
GOSTEI 0
Skaarj
06/02/2003
Ae piazada, vlw!! Vou tntar!!
GOSTEI 0
Anonymous
06/02/2003
Sorry Meu Bruxo....
Eu sei lá no que eu estava pensando...Não tinha prestado atenção no problema....BABEEEEEEEEEEEEEEEEEEIIIIIIIIIIIIIIIIIIIIIIIII :oops:
Eu sei lá no que eu estava pensando...Não tinha prestado atenção no problema....BABEEEEEEEEEEEEEEEEEEIIIIIIIIIIIIIIIIIIIIIIIII :oops:
GOSTEI 0
Skaarj
06/02/2003
me manda um email dizendo como foi???
Ae cara, não precisei fazer, é eu ia tr q guardar td´s essas variáveis em uma tabela, ia dar o maior rolo [era um formula genérica pra dpois ser aplicada[calculo de boletim escolar]], mas valeu!!
GOSTEI 0