como identificar o get de uma 'var' matriz

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
juniorcamilo
Usuário Nível 3
Usuário Nível 3
Mensagens: 343
Registrado em: 10 Nov 2006 09:12
Localização: Pará

como identificar o get de uma 'var' matriz

Mensagem 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?
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 »

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.
[]'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
juniorcamilo
Usuário Nível 3
Usuário Nível 3
Mensagens: 343
Registrado em: 10 Nov 2006 09:12
Localização: Pará

Obrigado maligno

Mensagem por juniorcamilo »

Obrigado Maligno, legal mesmo, onde eu aprendo mais sobre estes assuntos de 'objeto' 'block' tanto de getlist quanto de browse?
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 »

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.
[]'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
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Mensagem 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)
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 »

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. :[
[]'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!
Responder