Página 1 de 1
como identificar o get de uma 'var' matriz
Enviado: 01 Jun 2007 07:00
por juniorcamilo
quando usa-se get para matriz o getactive() idetifica perfeitamete o nome da 'var' que esta ativa no mometo, mas como achar a posicao desta matriz? tipo:
@ ..... get aMatriz[1,i] ......
@ ..... get aMatriz[2,i] ......
@ ..... get aMatriz[2,i] ......
read
vamos supor que o get ativo seje da 2 linha como faço para saber isso pelo getactive?
Enviado: 01 Jun 2007 08:38
por Maligno
Use o método
SubScript para obter o número de ordem do elemento sendo editado. Veja o exemplo:
Código: Selecionar todos
priva nOrder
@ 1,10 get aMatriz[1,i] when Order()
@ 2,10 get aMatriz[2,i] when Order()
@ 3,10 get aMatriz[3,i] when Order()
read
function Order()
nOrder := LTrim(Str(GetActive():SubScript[1]))
return .t.
A função
GetActive lhe dá o objeto em edição. Através dele você tem uma série de informações a respeito da variável atualmente focalizada, inclusive o nome completo desta. E fazem parte do nome os índices das dimensões do elemento dentro da matriz. A partir daí é só você recuperar aquele que deseja. No exemplo eu peguei o primeiro índice diretamente.
Obrigado maligno
Enviado: 01 Jun 2007 10:52
por juniorcamilo
Obrigado Maligno, legal mesmo, onde eu aprendo mais sobre estes assuntos de 'objeto' 'block' tanto de getlist quanto de browse?
Enviado: 01 Jun 2007 10:59
por Maligno
No NG do Clipper tem tudo o que é necessário. Mas também ajuda dar uma bisbilhotada nos vários fontes existentes na pasta de instalação do Clipper.
Enviado: 01 Jun 2007 12:56
por Eolo
Maligno,
Aproveitando o gancho: qdo eu faço 10 GETs, o foco é iniciado sobre o GET1, certo? E se eu quiser mudar isso, mudar o foco? É possível? Via When?
Por ex, eu tenho 10 GETs. Aí, no GET6, o cidadão altera uma info e, como efeito, tenho que reconstruir a tela e os GETs do 7 pra baixo (um exemplo comum é o "física/jurídica" versus "CPNJ/CPF").
No meu caso, eu boto os GETs dentro de um DO/WHIL, só saio com ESC ou com F10Grava_e_Sai. Então, a cada vez que o foco passa pelo GET6, checo se o tipo mudou: se positivo, faço CLEA GETS e encho o keyb com "n" chr(13). Com isso, saio do READ, volto ao início do DO/WHIL, refaço os GETs/READ e o cursor pára lá no GET7...
Pq uso o DO/WHIL? O usuário pode ficar navegando indefinidamente entre os GETs (ENTER ou Setas ou PgDn ou...). Quando terminar a edição, F10 ou ESC.
(concordo que a minha solução é esdrúxula! eh eh eh)
Enviado: 01 Jun 2007 13:21
por Maligno
Eolo escreveu:Aproveitando o gancho: qdo eu faço 10 GETs, o foco é iniciado sobre o GET1, certo? E se eu quiser mudar isso, mudar o foco? É possível? Via When?
É sempre possível. Mas a melhor forma não é pela cláusula
WHEN. O melhor é acrescentar um parâmetro no comando
READ, indicando um ponto de
start. Isso implica em alterar o GETSYS, claro. Mas se você estiver disposto, não é tão complicado quanto parece.
Por ex, eu tenho 10 GETs. Aí, no GET6, o cidadão altera uma info e, como efeito, tenho que reconstruir a tela e os GETs do 7 pra baixo (um exemplo comum é o "física/jurídica" versus "CPNJ/CPF").
Sei como é. Eu implementei o conceito de grupos no meu GETSYS. No exemplo da pessoa física/jurídica, os campos SEXO, CPF e PROFISSÃO pertencem a um grupo, enquanto que CNPJ e ATIVIDADE pertencem a outro. Quando seleciono qual pessoa quero, o GETSYS "filtra" a lista e redesenha a lista, mostrando apenas os campos do grupo selecionado. Na teoria é super-simples, mas alterar o GETSYS pra ter isso dá um bocado de trabalho. Mas seria o ideal.
(concordo que a minha solução é esdrúxula! eh eh eh)
Esdrúxulo é o GETSYS padrão. Uma coisa muito mal feita. Poderiam ter feito um esforço pra tornar a vida do programa Clipper um pouco melhor. Aliás, é como dizem: se é de graça, é porcaria. :[