Página 1 de 1
Como repassar um nome de uma matriz para uma função?
Enviado: 27 Ago 2007 15:47
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.
)
Enviado: 27 Ago 2007 15:52
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?
Enviado: 27 Ago 2007 16:01
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
Enviado: 27 Ago 2007 16:04
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)
Enviado: 27 Ago 2007 16:06
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)
Enviado: 27 Ago 2007 16:25
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
Enviado: 27 Ago 2007 16:32
por gvc
Quando vc vai passar uma matriz para uma função, deve fazê-lo por referência.
MMENU(31, @cMENU10101)
Boa sorte.
Enviado: 28 Ago 2007 09:38
por Iwasa
Valeu gvc
