Página 1 de 1

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

Enviado: 30 Jan 2008 09:25
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...

Enviado: 30 Jan 2008 09:40
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.

Enviado: 30 Jan 2008 09:40
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.

Enviado: 30 Jan 2008 09:48
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.

Enviado: 30 Jan 2008 10:22
por ademilson
Obrigado pessoal... Valeu mais uma vez...

Abracos,