Página 1 de 1

Erro no IF

Enviado: 29 Mai 2012 09:37
por Vandi
Bom dia,

Na rotina abaixo qualquer número que eu digito entre 0 e 9 a rotina vai sempre para a segunda opção Funcao2().
Alguém pode me dizer o que está errado nela?

Código: Selecionar todos

#include 'hwgui.ch'
Function Main
Local oDlg
Private vVar01,oVar01

Init Dialog oDlg at 200,100 size 500,300 title 'TESTANDO O <IF>'


vVar01:=0

@  50,100 say "entre um valor qualquer: " size 220,20
@ 240,100 get oVar01 VAR vVar01 picture '9' size 20,20 Valid If(vVar01>5, {||Funcao1() }, {||Funcao2() })

oDlg:Activate()

Function Funcao1
MsgInfo('A VARIAVEL DIGITADA EH MAIOR QUE 5')
retu

Function Funcao2
MsgInfo('a variavel digitada nao eh maior que 5')
retu
Gilvandi

Erro no IF

Enviado: 29 Mai 2012 10:01
por Pablo César
Acredito que o seu erro esteja na linha 12 do seu código/exemplo.

Não deveria ser assim ?

@ 240,100 get vVar01 picture '9' size 20,20 Valid If(vVar01>5, {||Funcao1() }, {||Funcao2() })

Remova: oVar01 VAR

Erro no IF

Enviado: 29 Mai 2012 11:37
por Vandi
Pablo,
Bom dia...

Fiz como vc disse, alterei a rotina mas continua do mesmo jeito. Qualquer número digitado a rotina vai sempre para a segunda opção: Funcao2().

Gilvandi

Erro no IF

Enviado: 29 Mai 2012 11:42
por Pablo César
As suas rotinas de validação, precisam retornar um valor lógico (.T. ou .F.) porque do jeito que estão, estariam retornando valor Nil.

Só não entendi, isso é possivel em HwGUI ? get oVar01 VAR vVar01 é assim mesmo ? Pergunto porque não trabalho em HwGUI...

Erro no IF

Enviado: 29 Mai 2012 13:10
por Vandi
Pablo,
Boa tarde...

Não sei te dar maiores detalhes, pois estou começando em HwGui.
O interessante é que, colocando o IF... ENDIF, a rotina funciona perfeitamente, conforme abaixo:

Código: Selecionar todos

#include 'hwgui.ch'
Function Main
Local oDlg
Private vVar01,oVar01

Init Dialog oDlg at 200,100 size 500,300 title 'TESTANDO O '


vVar01:=0

@  50,100 say "entre um valor qualquer: " size 220,20
@ 240,100 get oVar01 VAR vVar01 picture '9' size 20,20 Valid ({||FazTeste(vVar01) }) //If(vVar01>5, {||Funcao1() }, {||Funcao2() })

oDlg:Activate()

Function FazTeste(vVar01)
*----------------------------------
If vVar01>5
     Funcao1()
Else
     Funcao2()
EndIf




Function Funcao1
*----------------------------------
MsgInfo('A VARIAVEL DIGITADA EH MAIOR QUE 5')
retu

Function Funcao2
*----------------------------------
MsgInfo('a variavel digitada nao eh maior que 5')
retu

Gilvandi

Erro no IF

Enviado: 29 Mai 2012 16:14
por Vandi
Pablo,
Boa tarde...

Acontece que a mesma rotina, compilada no clipper, roda perfeitamente.
Por que será que não quer rodar xHarbour HwGui???

Código: Selecionar todos

Local vVar01:=0
@00,00 clear
set talk off
set scor off
set inte on
@00,00 to 23,79
@02,02 say 'TESTANDO O <IF>'
Do whil!LastKey()=27
@  10, 10 say "entre um valor qualquer: "
*@  10,100 get vVar01 picture '9' VALID IIf(vVar01>5, {||Funcao1() }, {||Funcao2() })
@  10,100 get vVar01 picture '9' VALID IIf(vVar01>5, Funcao1(), Funcao2() )
Read
EndDo
Return

Function Funcao1
Alert('A VARIAVEL DIGITADA EH MAIOR QUE 5')
vVar01:=0
return.f.

Function Funcao2
Alert('a variavel digitada nao eh maior que 5')
vVar01:=0
return.f.
Gilvandi

Erro no IF

Enviado: 29 Mai 2012 16:50
por Pablo César
Pois é... em Clipper dá certo. Se bem que você notou de que tipo foi declarada a suas variáveis ?
Talvez na forma que é apresentada as variáveis no hwgui estão privates ou publicas... creio que a forma mais certa a nível de codificação é colocando uma função validadora, recebendo "outra" variável ou até mesmo ponteiro da variável, caso ela cnsuma muita memória (que creio que não é o caso) e tratar de dentro da função.

Erro no IF

Enviado: 29 Mai 2012 18:05
por FTrautwein
Tente com:

Código: Selecionar todos

@ 240,100 get oVar01 VAR vVar01 picture '9' size 20,20 Valid { || If( vVar01 > 5, Funcao1(), Funcao2() ) }
Fausto

Erro no IF

Enviado: 29 Mai 2012 21:23
por Vandi
Fausto,
Boa noite...

Resolvido... funcionou perfeitamente a rotina.
Muito obrigado pela sua atenção.

Gilvandi