Como repassar um nome de uma matriz para uma função?

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Iwasa
Usuário Nível 1
Usuário Nível 1
Mensagens: 45
Registrado em: 16 Ago 2007 08:27
Localização: PRES. PRUDENTE SP
Contato:

Como repassar um nome de uma matriz para uma função?

Mensagem por Iwasa »

Boa tarde companheiros, estou com um problema que nao consigo solucionar, preciso repassar o nome de uma matriz publica repassada como parametro (MVAR) em uma funcao, só que na funcao LEN está dando erro de argumento .
a entrada pela funcao é feita assim:

MMENU(31,cMENU10101)
cMENU10101 é uma variavel com 5 matrizes, e as matrizes contém elementos de Strings.

FUNCTION MMENU(pcol,mvar)

nCOL := pcol // posicionamento do menu (prompt)
nPOS := nCOL // posicao de inicio do menu
nARRAY:=LEN(mvar) // aqui está o meu problema...

FOR i = 1 TO nARRAY // le todo conteudo da matriz
nCOUNT := LEN(mvar) //e aqui tb dá o mesmo erro de argumento
nPOS := nPOS + nCOUNT // soma todas matrizes
NEXT

SETCOLOR(cCOLOR3)
@ 04,nCOL-1 CLEAR TO 06,nPOS
DISPBOX(04,nCOL-1,6,nPOS,1)
SOMBRA(04,nCOL-1,6,nPOS)
return

Desde já agradeço a ajuda. :))
CLIPPER 5.3b/BLINKER 7.0/RDD CDX => Migrando para HARBOUR/RDD CDX

"Podemos construir um mundo melhor, compartilhando informações. Compartilhar conhecimento é edificar um mundo melhor para todos!".

http://iwasa.4shared.com/
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 »

repassar o nome de uma matriz publica
Mas se a matriz é pública, não precisa passar seu nome para a função. O acesso é global. Tem certeza de que ela é pública mesmo?
[]'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!
Iwasa
Usuário Nível 1
Usuário Nível 1
Mensagens: 45
Registrado em: 16 Ago 2007 08:27
Localização: PRES. PRUDENTE SP
Contato:

Mensagem por Iwasa »

Olá, caro Maligno!

Essa funcao eu uso pra posicionar menus...
e acontece que eu preciso passar como parametro: o nome da matrize (variável) para que o comando FOR conte todas as strings das matrizes para montar os quadros e posicionar os menus, essa é uma funcao para contar o conteúdo das matrizes por isso preciso passar o nome da variavel.
e na hora que faz as contagens com o comando LEN está dando como ERRO DE ARGUMENTO.
E eu dei uma verificada na declaração da matriz, ela está como publica.
Vou enviar todo o bloco pra vc dar uma olhada
CLIPPER 5.3b/BLINKER 7.0/RDD CDX => Migrando para HARBOUR/RDD CDX

"Podemos construir um mundo melhor, compartilhando informações. Compartilhar conhecimento é edificar um mundo melhor para todos!".

http://iwasa.4shared.com/
Iwasa
Usuário Nível 1
Usuário Nível 1
Mensagens: 45
Registrado em: 16 Ago 2007 08:27
Localização: PRES. PRUDENTE SP
Contato:

Mensagem por Iwasa »

esta é a parte que fica abaixo da função acima.

oldCOLOR:=SETCOLOR()

SETCOLOR(cCOLOR3)
@ 03,nCOL PROMPT cMENU10100[1] MESSAGE {||UDF("CADASTRO DE CLIENTES: INCLUSAO, EXCLUSAO, ALTERACAO E CONSULTA")}
@ 03,COL() PROMPT cMENU10100[2] MESSAGE {||UDF("CADASTRO DE COBRADORES: INCLUSAO, EXCLUSAO, ALTERACAO E CONSULTA")}
@ 03,COL() PROMPT cMENU10100[3] MESSAGE {||UDF("CADASTRO DE PRACAS: INCLUSAO, EXCLUSAO, ALTERACAO E CONSULTA")}
@ 03,COL() PROMPT cMENU10100[4] MESSAGE {||UDF("CADASTRO MESAS DO CLIENTE: INCLUSAO, EXCLUSAO, ALTERACAO E CONSULTA")}
@ 03,COL() PROMPT cMENU10100[5] MESSAGE {||UDF("CADASTRO CLASSIFICACAO DE MESAS: INCLUSAO, EXCLUSAO, ALTERACAO E CONSULTA")}

MENU TO nMENU1

DO CASE
CASE nMENU1==1
MCAD10101()
CASE nMENU1==2
MCAD10102()
CASE nMENU1==3
MCAD10103()
CASE nMENU1==4
CASE nMENU1==27

RESTSCREEN(00,00,25,80,oTELA)
ENDCASE

RESTSCREEN(00,00,25,80,oTELA)
setcolor(oldCOLOR)
CLIPPER 5.3b/BLINKER 7.0/RDD CDX => Migrando para HARBOUR/RDD CDX

"Podemos construir um mundo melhor, compartilhando informações. Compartilhar conhecimento é edificar um mundo melhor para todos!".

http://iwasa.4shared.com/
Iwasa
Usuário Nível 1
Usuário Nível 1
Mensagens: 45
Registrado em: 16 Ago 2007 08:27
Localização: PRES. PRUDENTE SP
Contato:

Mensagem por Iwasa »

esta é a parte que quero passar como funcao que está no inicio do tópico:

nCOL := 11 // posicionamento do menu (prompt)
nPOS := nCOL // posicao de inicio do menu
nARRAY:=LEN(cMENU10100) // conta matriz *** nesta forma nao dá erro de argumento.

FOR i = 1 TO nARRAY // le todo conteudo da matriz
nCOUNT := LEN(cMENU10100)
nPOS := nPOS + nCOUNT // soma todas matrizes
NEXT

SETCOLOR(cCOLOR3)
@ 02,nCOL-1 CLEAR TO 04,nPOS
DISPBOX(02,nCOL-1,4,nPOS,1)
SOMBRA(02,nCOL-1,4,nPOS)
CLIPPER 5.3b/BLINKER 7.0/RDD CDX => Migrando para HARBOUR/RDD CDX

"Podemos construir um mundo melhor, compartilhando informações. Compartilhar conhecimento é edificar um mundo melhor para todos!".

http://iwasa.4shared.com/
Iwasa
Usuário Nível 1
Usuário Nível 1
Mensagens: 45
Registrado em: 16 Ago 2007 08:27
Localização: PRES. PRUDENTE SP
Contato:

Mensagem por Iwasa »

CARO MALIGNO, consegui fazer funcionar a função, como disse, nao declarei as outras variáveis de coordenadas como publicas. Valeu pela dica.

function MMENU(L1,L2,pCOL,mVAR)
public nCOL, nPOS, nARRAY, nCOUNT // aqui estava meu erro.
nCOL := pCOL // posicionamento do menu (prompt)
nPOS := nCOL // posicao de inicio do menu
nARRAY:=LEN(mVAR) // conta matriz

FOR i = 1 TO nARRAY // le todo conteudo da matriz
nCOUNT := LEN(mVAR)
nPOS := nPOS + nCOUNT // soma todas matrizes
NEXT

SETCOLOR(cCOLOR3)
@ L1,nCOL-1 CLEAR TO L2,nPOS
DISPBOX(L1,nCOL-1,L2,nPOS,1)
SOMBRA(L1,nCOL-1,L2,nPOS)
return
CLIPPER 5.3b/BLINKER 7.0/RDD CDX => Migrando para HARBOUR/RDD CDX

"Podemos construir um mundo melhor, compartilhando informações. Compartilhar conhecimento é edificar um mundo melhor para todos!".

http://iwasa.4shared.com/
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Mensagem por gvc »

Quando vc vai passar uma matriz para uma função, deve fazê-lo por referência.

MMENU(31, @cMENU10101)

Boa sorte.
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
Iwasa
Usuário Nível 1
Usuário Nível 1
Mensagens: 45
Registrado em: 16 Ago 2007 08:27
Localização: PRES. PRUDENTE SP
Contato:

Mensagem por Iwasa »

Valeu gvc :D
CLIPPER 5.3b/BLINKER 7.0/RDD CDX => Migrando para HARBOUR/RDD CDX

"Podemos construir um mundo melhor, compartilhando informações. Compartilhar conhecimento é edificar um mundo melhor para todos!".

http://iwasa.4shared.com/
Responder