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:

Código: Selecionar todos

   #include "Inkey.ch"
   Set Key K_F4 to funcao()

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..