É sobre Clipper, mas sei que voces podem me ajudar.
11/07/2004
0
Me perdoem por colocar uma dúvida que não diz respeito a este site, mas sei que podem me ajudar.
Quero usar a funçao achoice() do Clipper para exibir um array com mais de 80 colunas. Como eu faço isso?
Agradeço a quem puder me ajudar.
Sandrad
Posts
12/07/2004
Thomaz_prg
Bom, a função achoice do Clipper só vetores, não tendo a opção de colunas. Mas vc pode burlar isto, fazendo com que os valores sejam transformados em strings, somados e adicionados como vetores. Exemplo:
array={ {1 , "João " },{ 2, "Maria" }, {3 , "Cláudia } } menu={} for i=1 to len(array) aadd( menu , str(array[i,1] , 5)+" "+array[i,2] ) next achoice(0,0,5,40,menu)
Bom, mas se o que vc quer é buscar as informações da array numa base de dados, use a função DBEDIT.
Exemplo:
USE clientes INDEX cli01 NEW DBEDIT(0,0,5,40,{"codigo","nome"},,,," "," ") CLOSE clientes
Da forma descrita acima, o vetor contém os campos que vc quer que apareçam, e a parte com os espaços, transforma as linhas divisórias em espaços.
Não sei se é isso o que vc queria saber, mas se não for, entre em contato que se eu puder te ajudar, será um prazer.
12/07/2004
Aroldo Zanela
São mais de 80 colunas ou mais de 80 elementos no array? A limitação de exibição em termos de coluna se deve ao fato da mesma ser em modo DOS. No caso de variáveis em edição por Get/Read (GetSys) é possível utilizar uma máscara de formatação (acho que é Sn, onde n representa o comprimento do Scroll).
A propósito, qual é objetivo disso?
12/07/2004
Dopi
Uma alternativa seria transformar o Vetor em uma String do tipo Memo e exibi-lo com o MEMOEDIT. voce pode configurar o MemoEdit para bloquear a digitação...
Porém isso só funcionará se o Vetor nao for muito grande, pois a variavel memo pode ter no máximo 64 Kb
TEXTO := ´´
For A := 1 to len( VETOR )
TEXTO := VETOR[A] + chr(13)+chr(10)
next
memoedit( TEXTO, 0,0,24,79, .F. ) // O .F. bloqueia a ediçao...
12/07/2004
Dopi
TEXTO := ´´ For A := 1 to len( VETOR ) TEXTO += VETOR[A] + chr(13)+chr(10) next
12/07/2004
Thomaz_prg
Eu havia entendido que era um array com 80 elementos, mas em se tratando de 80 caracteres para serem apresentados na tela, se o mesmo estiver ou for salvo em um arquivo, mesmo que ele tenha acima de 64K ele pode ser apresentado na tela, utilizando-se as funções FOPEN, FREAD, ou, simplesmente criar um arquivo temporário, e dar um APPEND FROM ...SDF
Não irei postar a função utilizando FOPEN e FREAD, pois as mesmas são extensas, mas se for este o problema e/ou alguém se interessar, mande uma MP com o email que envio as funções (ambas, usando APPEND FROM...SDF e FOPEN).
12/07/2004
Sandrad
É, não dá mesmo para usar achoice. Quanto a outras funções, como DBEDIT(), BROWSE(), faz um tempão que eu não uso e preciso me lembrar as sintaxes, mas o Toledo, da www.pctoledo.com.br me passou esta função a seguir. Eu testei superficialmente e funcionou.
OP=machoice(04,01,24,79,VETX) PROC MACHOICE(vx_ls,vx_cs,vx_li,vx_ci,vx_matriz) LOCAL vx_ret, vx_tam, vx_op, vx_colmax vx_col:=1 @ vx_ls,vx_cs TO vx_li,vx_ci vx_tam:=LEN(vx_matriz[1]) vx_larg:=(vx_ci-vx_cs)-1 vx_colmax:=vx_tam-(vx_larg-1) PRIV vx_mat[LEN(vx_matriz)] vx_elem=1 vx_posi=1 DO WHILE .T. FOR i=1 TO LEN(vx_matriz) vx_mat[i]=SUBS(vx_matriz[i],vx_col,vx_larg) NEXT vx_op:=achoice(vx_ls+1,vx_cs+1,vx_li-1,; vx_ci-1,vx_mat,.T.,"AFUNC",vx_elem,vx_posi) DO CASE CASE LASTKEY()=27 vx_ret:=0 EXIT CASE LASTKEY()=13 vx_ret:=vx_op EXIT CASE LASTKEY()=4 vx_col+=1 IF vx_col>vx_colmax vx_col:=vx_colmax ENDIF CASE LASTKEY()=19 vx_col-=1 IF vx_col<1 vx_col:=1 ENDIF ENDCASE ENDDO RETU (vx_ret) FUNC AFUNC PARAMETERS modo, elem, posi vx_elem:=elem vx_posi:=posi IF modo=3 IF LASTKEY()=27 RETU (0) ELSEIF LASTKEY()=13 RETU (1) ELSEIF LASTKEY()=4 .OR. LASTKEY()=19 RETU (0) ENDIF ENDIF RETU (2)
Obrigada a todos pela ajuda. :D :wink:
Clique aqui para fazer login e interagir na Comunidade :)