Página 1 de 1
Preciso de ajuda com "get ativo"
Enviado: 25 Jun 2010 18:02
por lugab
Ola, pesoal. Boa divesão nessa copa para todos.
Eu Tenho 5 gets , um único Read e uma funcao() que só deve ser executada até o fim se o Get ativo for o do CAMPO2 , tipo o exemplo abaixo:
Código: Selecionar todos
Set key -3 to funcao()
@ 2,1 get campo1 pict "99" valid campo1>0
@ 3,1 get campo2 pict "99" valid campo2>0
@ 4,1 get campo3 pict "99" valid campo3>0
@ 5,1 get campo4 pict "99" valid campo4>0
read
No início da funcao() , eu tenho q identificar em qual Get entrou na funcao() e retornar sem executar a funcao() se o get não for o do campo CAMPO2
Podem me ajudar a fazer isso ?
Grato,
Gabriel
Re: Preciso de ajuda com "get ativo"
Enviado: 25 Jun 2010 18:28
por Maligno
Acho que a função ReadVar() pode ajudar. Ela informa o nome da variável associada ao campo atualmente ativo na lista GET.
Re: Preciso de ajuda com "get ativo"
Enviado: 25 Jun 2010 18:35
por lugab
Maligno, sempre útil, como sempre.
Muito obrigado, Maligno.
Vou experimentar sua ajuda.
gabriel
Re: Preciso de ajuda com "get ativo"
Enviado: 26 Jun 2010 12:08
por alxsts
Olá!
A dica do Maligno certamente funciona. Se quiser outra opção, veja o código abaixo. Neste exemplo, utilizo o "objeto" GetActive(), que permite mais flexibilidade:
Código: Selecionar todos
#include "Inkey.ch"
FUNCTION Main()
LOCAL campo1 := 0, campo2 := 0
LOCAL campo3 := 0, campo4 := 0
LOCAL GetList := {}
Set key K_F4 to funcao()
CLS
@ 2,1 Say "campo1" get campo1 pict "99" valid campo1>0
@ 3,1 Say "campo2" get campo2 pict "99" valid campo2>0
@ 4,1 Say "campo3" get campo3 pict "99" valid campo3>0
@ 5,1 Say "campo4" get campo4 pict "99" valid campo4>0
READ
RETURN NIL
//------------------------------------------------------------------------------
FUNCTION Funcao()
If GetActive():name == "campo3"
Alert( "Executando Funcao()" )
Else
Alert( "Get ativo: " + GetActive():name )
ENDIF
RETURN NIL
//------------------------------------------------------------------------------
Procure utilizar sempre os nomes das teclas, ao invés dos códigos das mesmas. Facilita o entendimento do código:
Re: Preciso de ajuda com "get ativo"
Enviado: 26 Jun 2010 12:48
por lugab
Obrigado, Alxts e maligno
Todas 2 soluções funcionaram redondo.
Grato
Gabriel
Re: Preciso de ajuda com "get ativo"
Enviado: 26 Jun 2010 16:46
por lugab
Ainda sobre este assunto, eu tenho mais uma necessidade.
Na mesma rotina postada acima, assim q entrar na Funcao(), será q vcs me ajudariam a:
1) Salvar previamente os gets q estão pendentes antes de entrar em Funcao() ?
(preciso salvar antes de dar um clear nesses gets , c/o comando: clea gets )
2) Ao encerrar a Funcao() poderia restaurar os gets pendentes ?
Preciso disso, pq apesar de já existir vários gets pendentes, antes de entrar na Funcao(), eu preciso executar outro get + outro read dentro desta Funcao(), sem ter que executar os gets anteriores que estavam pendentes, antres de entrar em Funcao().
Gabriel
Re: Preciso de ajuda com "get ativo"
Enviado: 26 Jun 2010 17:40
por Toledo
Bom, não sei qual a necessidade de dar o clear gets, mas acho que bastaria colocar no início da funcao() o comando "LOCAL GetList := {}", assim os gets anteriores seriam mantidos, independente se dentro da funcao() tem um novo GET e READ.
Abraços,
Re: Preciso de ajuda com "get ativo"
Enviado: 26 Jun 2010 17:55
por lugab
Oi Toledo, obrigado pelo Help.
Explicação:
]Bom, não sei qual a necessidade de dar o clear gets
Pq se eu não der um CLEAR GETS, antes de dar um novo GET + READ, a funcão() vai executar primeiro os gets anteriores que estavam pendentes
colocar no início da funcao() o comando "LOCAL GetList := {}", assim os gets anteriores seriam mantidos, independente se dentro da funcao() tem um novo GET e READ.
Neste caso, Toledo, um READ novo não vai executar os GETS enteriores q estão Pendentes com seu read específico, na rotina anterior a Funcao()
Gabeirl,
Re: Preciso de ajuda com "get ativo"
Enviado: 26 Jun 2010 18:02
por Toledo
lugab escreveu:um READ novo não vai executar os GETS enteriores
Exatamente, basta declarar o LOCAL GetList := {} no início da funcao() e não usar o Clear Gets.
Abraços,
Re: Preciso de ajuda com "get ativo"
Enviado: 26 Jun 2010 18:46
por alxsts
Olá!
O código abaixo, extraido do NG do Clipper 5, vem reforçar as palavras do Toledo:
Código: Selecionar todos
■ This example demonstrates how to perform a nested READ within a SET
KEY, WHEN, or VALID procedure or user-defined function:
LOCAL cName := SPACE(10)
@ 10, 10 GET cName VALID SubForm( cName )
READ
RETURN
FUNCTION SubForm( cLookup )
LOCAL GetList := {} // Create new GetList
USE Sales INDEX Salesman NEW
SEEK cLookup
IF FOUND()
@ 15, 10 GET Salesman // Add Get objects to new GetList
@ 16, 10 GET Amount
READ // READ from new GetList
ENDIF
CLOSE Sales
RETURN .T. // Release new GetList
Encontra-se no NG em Language >> Commands >> READ.
Re: Preciso de ajuda com "get ativo"
Enviado: 26 Jun 2010 22:15
por lugab
Sim, Toledo e Alxst.
Cês mataram a charada. É isso mesmo !
Funcionou, q nem Messi, no ataque da Arqgentina.
E, como sempre, eu sou todo agradecimentos..