Valores diferentes na entrada de dados

Dúvidas sobre ObjectDCL...

Moderador: Moderadores

Responder
Avatar do usuário
rogeriomota
Concreto
Concreto
Mensagens: 82
Registrado em: Qui 10 Jul 2008 12:00:00 am
Localização: Sarzedo-MG

Valores diferentes na entrada de dados

Mensagem por rogeriomota » Qua 22 Mai 2013 2:38:32 pm

pessoal se alguém puder ajudar quando eu dou um click no "ok" da caixa de dialogo sem mudar os valores pré-definidos fica tudo certo mas se eu digito eles não funciona, descobri que os valores definidos estão vindo como números reais e quando eu entro com as informações não sei o porque eles vem como "strings" coloquei um if para transformá-los em reais, só que quando eu inspeciono ponto a ponto do programa funciona mas quando eu carrego ele não funciona, já tentei de tudo mas não consegui nada se alguém puder me ajudar.

(DEFUN SPT ()
(setq dcl_id (load_dialog "SAPATA.DCL"))
(IF(NOT(new_dialog "SAPATA" dcl_id)) (exit))

(set_tile "BT1" "100")
(set_tile "BT2" "150")
(set_tile "BT3" "20")
(set_tile "BT4" "30")
(set_tile "BT5" "35")
(set_tile "BT6" "75")
(set_tile "BT7" "0")
(set_tile "BT8" "11")
(set_tile "BT9" "12")
(set_tile "BT10" "13")

(DEFUN MARCA ()
;;QUANDO ATIVA TOGGLE
(IF (= BT7 "1")
(PROGN
(mode_tile "BT8" 1) (mode_tile "BT9" 1) (mode_tile "BT10" 1) ))
;;QUANDO DESATIVA TOGGLE
(IF (= BT7 "0")
(PROGN
(mode_tile "BT8" 0) (mode_tile "BT9" 0) (mode_tile "BT10" 0) ))
)

(action_tile "BT1" "(SETQ BT1 $VALUE)")
(action_tile "BT2" "(SETQ BT2 $VALUE)")
(action_tile "BT3" "(SETQ BT3 $VALUE)")
(action_tile "BT4" "(SETQ BT4 $VALUE)")
(action_tile "BT5" "(SETQ BT5 $VALUE)")
(action_tile "BT6" "(SETQ BT6 $VALUE)")
(action_tile "BT7" "(SETQ BT7 $VALUE)(MARCA)")
(action_tile "BT8" "(SETQ BT8 $VALUE)")
(action_tile "BT9" "(SETQ BT9 $VALUE)")
(action_tile "BT10" "(SETQ BT10 $VALUE)")

(if (=(get_tile "BT1") numberp) (setq BT1 (get_tile "BT1")) (setq BT1(atof(get_tile "BT1"))))
(if (=(get_tile "BT2") numberp) (setq BT2 (get_tile "BT2")) (setq BT2(atof(get_tile "BT2"))))
(if (=(get_tile "BT3") numberp) (setq BT3 (get_tile "BT3")) (setq BT3(atof(get_tile "BT3"))))
(if (=(get_tile "BT4") numberp) (setq BT4 (get_tile "BT4")) (setq BT4(atof(get_tile "BT4"))))
(if (=(get_tile "BT5") numberp) (setq BT5 (get_tile "BT5")) (setq BT5(atof(get_tile "BT5"))))
(if (=(get_tile "BT6") numberp) (setq BT6 (get_tile "BT6")) (setq BT6(atof(get_tile "BT6"))))
(setq BT7 (get_tile "BT7"))
(if (=(get_tile "BT8") numberp) (setq BT8 (get_tile "BT8")) (setq BT8(atof(get_tile "BT8"))))
(if (=(get_tile "BT9") numberp) (setq BT9 (get_tile "BT9")) (setq BT9(atof(get_tile "BT9"))))
(if (=(get_tile "BT10") numberp) (setq BT10 (get_tile "BT10")) (setq BT10(atof(get_tile "BT10"))))


(start_dialog)

(unload_dialog dcl_id)
)

Avatar do usuário
cracksther
Diamante
Diamante
Mensagens: 1064
Registrado em: Seg 13 Dez 2004 11:00:00 pm

Re: Valores diferentes na entrada de dados

Mensagem por cracksther » Qua 22 Mai 2013 6:38:06 pm

Aparentemente as linhas do tipo (if (=(get_tile "BT1") numberp) (setq BT1 (get_tile "BT1")) (setq BT1(atof(get_tile "BT1")))) estão no lugar errado.

Elimine-as e use, depois de done-dialog, linhas do tipo (setq BT1 (atof "BT1")).
Você pode converter os valores de BT1, etc.. imediatamente antes de utiliza-los em qualquer calculo.

O procedimento acima assume que nos campo estão digitados números. No caso de estar digitado um texto não númerico, a função atof vai converter para 0.0.

Atenciosamente.
Marcelo Silva - Cascavel - PR
cracksther@gmail.com

Avatar do usuário
rogeriomota
Concreto
Concreto
Mensagens: 82
Registrado em: Qui 10 Jul 2008 12:00:00 am
Localização: Sarzedo-MG

Re: Valores diferentes na entrada de dados

Mensagem por rogeriomota » Qui 23 Mai 2013 9:48:05 am

Marcelo.

valeu depois do seu comentario as coisas ficarão claras, funcionou assim:

troqui o (if (=(get_tile "BT1") numberp) (setq BT1 (get_tile "BT1")) (setq BT1(atof(get_tile "BT1"))))
por (setq BT1 (get_tile "BT1")) e depois coloquei assim

(start_dialog)
(done_dialog)

(if (= BT1 numberp) (setq BT1 BT1) (setq BT1 (atof BT1))) ;assim resolvo o problema de numero e textos porque quando o valor esta pré-definido na caixa ele vem como numero mas quando eu entro com o valor numérico pelo teclado ele vem como string.

Ta funcionando mas se tiver alguma coisa pra melhorar e sempre bem vindo.

Obrigado t+

Avatar do usuário
cracksther
Diamante
Diamante
Mensagens: 1064
Registrado em: Seg 13 Dez 2004 11:00:00 pm

Re: Valores diferentes na entrada de dados

Mensagem por cracksther » Qui 23 Mai 2013 1:54:08 pm

Rogério,

"quando o valor esta pré-definido na caixa ele vem como numero mas quando eu entro com o valor numérico pelo teclado ele vem como string"

O valores de qualquer "campo de texto" de uma DCL, invariavelmente são do tipo "String", ou seja, sempre terão que ser convertidos para usar em cálculos.
Você deve ter a impressão "erradamente" de que não editando os valores são do tipo número, isso por que você deve estar utilizando o valor das variáveis BT1, etc.., porém ao ponto em que clica no campo, na verdade tira o foco do mesmo, a função action_tile é executada e as variáveis BT1, etc... são setadas com o valor do campo, sempre em formato de string.

Até mais!
Marcelo Silva - Cascavel - PR
cracksther@gmail.com

Responder