Como retornar um valor de uma funcao que esta no valid...

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
ademilson
Usuário Nível 2
Usuário Nível 2
Mensagens: 87
Registrado em: 07 Ago 2007 10:01
Localização: Maringá
Contato:

Como retornar um valor de uma funcao que esta no valid...

Mensagem por ademilson »

Bom dia pessoal...

É o seguinte, tenho varios gets dentro de um while, cada get desse tem uma funcao no valid, dependendo do resultado desta funcao quero sair deste while... Como ficaria?

É mais ou menos assim:

nGet1 := 0
nGet2 := 0
nGet3 := 0
lOk := .t.

do while lOk

@ 01.01 get nGet1 pict "999" valid Valida(@lOk)
@ 02.01 get nGet1 pict "999" valid Valida(@lOk)
@ 03.01 get nGet1 pict "999" valid Valida(@lOk)
read

enddo

***************************
function Valida(lOk)
*/
/*
Dependendo do resultado o lOk retorna .f.


Entenderam??? ai quero sair do while quando lOk retornar .f.

Obrigado...
_____________________
José Ademilson da Cruz
Gerente de Desenvolvimento Harbour
SG Sistemas de Automação ltda.
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Você pode utilizar a função ReadKill(<lExit>). Veja no NG. Se <lExit> for TRUE, o READ será terminado. Exemplo:

Código: Selecionar todos

function Valida()
local cKey := Upper(Chr(Inkey(0)))
ReadKill(cKey = "A")
return .t.
Use esse código pra ver como funciona. Se for pressionada a tecla A, seu READ será terminado.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
SandroBelarmino
Usuário Nível 3
Usuário Nível 3
Mensagens: 464
Registrado em: 04 Set 2007 16:11
Localização: Pedreira-SP

Mensagem por SandroBelarmino »

Pelo que entendi, nesse exemplo nao vai sair do while enquanto voce nao passar por todos os gets. O que voce poderia fazer é usar a cláusula when nos seus gets.
Ex: @ 01.01 get nGet1 pict "999" when lOK valid Valida(@lOk)

Acho que pode resolver.
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Basta alterar o valor de lOk (passada por referência) para FALSE na função Valida(), e nela própria executar ReadKill(.T.) pra matar o READ. Dá certinho. O READ morre e o WHILE, tendo lOk=.F., morre também.

Ao invés de usar WHEN, eu preferiria usar a função ReadKill(), já que uma função de validação será executada de qualquer forma. E o código fica mais enxuto.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
ademilson
Usuário Nível 2
Usuário Nível 2
Mensagens: 87
Registrado em: 07 Ago 2007 10:01
Localização: Maringá
Contato:

Mensagem por ademilson »

Obrigado pessoal... Valeu mais uma vez...

Abracos,
_____________________
José Ademilson da Cruz
Gerente de Desenvolvimento Harbour
SG Sistemas de Automação ltda.
Responder