É sobre Clipper, mas sei que voces podem me ajudar.

11/07/2004

0

Olá pessoal, tudo bem?

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

Sandrad

Responder

Posts

12/07/2004

Thomaz_prg

Olá, tudo bein?

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.


Responder

12/07/2004

Aroldo Zanela

Colega,

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?


Responder

12/07/2004

Dopi

Realmente acho que não é possivel visualizar mas de 80 colunas em um achoice... pois ele não faz Scroll na Horizontal...

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...


Responder

12/07/2004

Dopi

Opa.... erro na digitação...

TEXTO := ´´ 
For A := 1 to len( VETOR ) 
   TEXTO += VETOR[A] + chr(13)+chr(10) 
next 



Responder

12/07/2004

Thomaz_prg

Pessoal,

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).


Responder

12/07/2004

Sandrad

:D

É, 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:


Responder

APRENDA A PROGRAMAR DO ZERO AO PROFISSIONAL

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar