Erro no IF

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Vandi
Usuário Nível 2
Usuário Nível 2
Mensagens: 83
Registrado em: 16 Set 2011 23:26
Localização: Brasilia-DF

Erro no IF

Mensagem 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
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Erro no IF

Mensagem 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
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Vandi
Usuário Nível 2
Usuário Nível 2
Mensagens: 83
Registrado em: 16 Set 2011 23:26
Localização: Brasilia-DF

Erro no IF

Mensagem 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
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Erro no IF

Mensagem 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...
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Vandi
Usuário Nível 2
Usuário Nível 2
Mensagens: 83
Registrado em: 16 Set 2011 23:26
Localização: Brasilia-DF

Erro no IF

Mensagem 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
Vandi
Usuário Nível 2
Usuário Nível 2
Mensagens: 83
Registrado em: 16 Set 2011 23:26
Localização: Brasilia-DF

Erro no IF

Mensagem 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
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Erro no IF

Mensagem 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.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
FTrautwein
Usuário Nível 1
Usuário Nível 1
Mensagens: 1
Registrado em: 18 Mai 2012 09:23
Localização: Cambará/PR

Erro no IF

Mensagem 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
Vandi
Usuário Nível 2
Usuário Nível 2
Mensagens: 83
Registrado em: 16 Set 2011 23:26
Localização: Brasilia-DF

Erro no IF

Mensagem por Vandi »

Fausto,
Boa noite...

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

Gilvandi
Responder