Página 1 de 2

Exibir coluna atual dentro do GET

Enviado: 22 Ago 2008 15:17
por ANDRIL
Pessoal,

Preciso saber quando estou editando uma variável a coluna atual, a exemplo do que fazemos na função MEMOEDIT() para exibir linha e coluna onde o cursor esta.

Sei que com o objeto GET é possivel atraves do "POS", mais não consigo entender nem como criar ou manipular o objeto GET.

Usava o MEMOEDIT mais este tem limite de exibição de 255 caracteres e preciso editar uma var com mais de 600 caracteres e saber em que coluna estou?

Se alguem tiver uma idéia ou exemplo, agradeço.

Ate+

Re: Exibir coluna atual dentro do GET

Enviado: 22 Ago 2008 16:52
por sygecom
Não entendi bem sua duvida, mas acredito que com FieldName(), você resolva o seu problema. Abaixo um link que fala sobre fildname()
http://www.itlnet.net/programming/progr ... 45816.html

Re: Exibir coluna atual dentro do GET

Enviado: 22 Ago 2008 17:07
por Stanis Luksys
Olá...

Voltei! rs

Partindo do princípio que você sabe onde coloocou seu memoedit ou get, basta usar a função Col() e fazer as continhas...

[]s

Re: Exibir coluna atual dentro do GET

Enviado: 23 Ago 2008 09:32
por ANDRIL
Obrigado pessoal,

Mais meu problema é outro.

Tenho a seguinte linha:
VAR=space(600)
@00,00 get VAR pict"@!s70"
read
Quando uso as setas (dir/esq) navego no GET porem não sei em que coluna esta dentro do GET, precisava saber o número da coluna porque faço a captura de parte do conteudo da variavel "VAR".

A função COL() me retorna a posição incial do GET neste caso (@00,00) e não a posição durante a "EDIÇÃO" do GET.

Por isso, conto com a ajuda do pessoal que utiliza o GET porem como OBJETO , pois acho eu, é a única forma de obter a posição que preciso através da instância "POS".

Como disse, usava o MEMOEDIT porem este tem um limite de 255 caracteres e preciso navegar por +- 600 caracteres.

Ate+

Enviado: 23 Ago 2008 09:38
por Maligno
Pra obter o número da coluna de acordo com a posição do cursor, você teria de interagir com o código do pseudo-objeto que controla a edição. Posso estar enganado, mas acho que isso não será possível. Porém, uma vez que você conhece a posição inicial do GET e conhece a posição do cursor, basta fazer a conta, não?

Re: Exibir coluna atual dentro do GET

Enviado: 23 Ago 2008 10:16
por ANDRIL
Pessoal,
Porém, uma vez que você conhece a posição inicial do GET e conhece a posição do cursor, basta fazer a conta, não?
Qual a função que me retorna então a posição atual da coluna quando um GET esta sendo editado? COL() não é!

???

Exibir coluna atual dentro do GET

Enviado: 23 Ago 2008 12:59
por Pablo César
Andril, para esses casos eu modifico o GETSYS.PRG, é dizer faço um específico. Lá você pode inserir uma função que leia inkey um a um e fazer teu próprio controle.

Re: Exibir coluna atual dentro do GET

Enviado: 23 Ago 2008 16:17
por Zoc
Andril,

Teste a rotina, creio que poderá dar uma início para você.
Conforme vc vai digitando, o número da coluna é atualizada.
Também é atualizado utilizando setas, backspace, home e end.
Do jeito que está, você terá problemas utilizando "@!s70".
Tente adaptar a sua necessidade

Código: Selecionar todos

#include "inkey.ch"  

clear
cNOME = space(40)
@ 10,10 GET cNOME    PICT "@!s20"  WHEN POSCOLUNA()
READ


/////////////////////////////
FUNCTION POSCOLUNA
LOCAL tam, buf, get, pos, lin, col, tec
get := GETACTIVE()
lin := get:row
col := get:col
buf := get:VarGet()
tam := LEN(buf)
pos := 1
SETCOLOR("N/W")
DO WHILE .T.
   SETPOS(lin, col)
   DISPOUT(buf)
   SETPOS(lin, col - 1 + pos)
   tec := INKEY(0)
   IF tec >= 32 .AND. tec <= 255
      *TEC := ASC( UPPER( CHR( TEC )))
      buf := LEFT(buf, pos - 1) + CHR(tec) + SUBS(buf, pos + 1)
      pos := MIN(tam, pos + 1)
   ELSEIF tec == K_LEFT
      pos := MAX(1, pos - 1)
   ELSEIF tec == K_RIGHT
      pos := MIN(tam, pos + 1)
   ELSEIF tec == K_HOME
      pos := 1
   ELSEIF tec == K_END
      pos := MIN(tam, LEN(TRIM(buf)) + 1)
   ELSEIF tec == K_BS
      IF pos > 1
         pos --
         buf := LEFT(buf, pos - 1) + SUBS(buf, pos + 1) + " "
      ENDIF
   ELSE
      KEYB CHR(tec)
      get:VarPut(buf)
      get:UpdateBuffer()
      RETURN .T.
   ENDIF
   @ 15,10 say str( pos, 5)
ENDDO
RETURN .T.

[]´s
Zoc

Re: Exibir coluna atual dentro do GET

Enviado: 23 Ago 2008 18:11
por ANDRIL
Zoc,

Obrigado pela sua função, mais não funcionou corretamente por ser uma string de 600 caracteres, ou seja, usando a "@s70" apos a coluna 70 nao rola a tela.
Mais foi muito boa, por que aprendi um pouco sobre o objeto GET que nem tinha ideia de como utilizá-lo.

Resolvi o problema fazendo uma função que recebe a string e navega por ela fazendo um SCROLL até o seu final. Outro problema que tinha encontrado no GET era que a string não poderia ser editada (alterada pelo usuário) ficando o processo muito difícil.

Segue a função que estou usando:

Código: Selecionar todos

FUNCTION myvisao(string,largura,exibent,exibsai)
*string  a var que sera posicionada 
*largura tamanho de exibicao na tela
*exibent array {0,10} indica onde a string sera apresentada na tela
*exibsai array {1,1} indica para exibir na tela em linha 1 e coluna 10 a coluna atual
LOCAL coluna:=1,contador:=1,largrela:=1,linhaunica:=savescreen(exibent[1],exibent[2],exibent[1],exibent[2]+largura)

do while .t.
     @exibent[1],exibent[2] clea to exibent[1],exibent[2]+largura
     @exibent[1],exibent[2] say substr(string,largrela*contador,largura)  
     @exibent[1],exibent[2]-1+coluna say substr(substr(string,largrela*contador,largura),coluna,1) colo "gr+/r"
     @exibsai[1],exibsai[2] say padl(coluna+contador-1,3,"0") colo "r/gr*"
     inkey(0)

     if lastkey()=19      //esquerda
         coluna=coluna-1
     elseif lastkey()=4   //direita
         coluna=coluna+1
     elseif lastkey()=1   //home
         coluna=coluna-10 //-10 esquerda
     elseif lastkey()=6   //.and.contador+10<=len(a)   //end
         if coluna+10+contador>len(string)+1
            *coluna=coluna-1
         else
            coluna=coluna+10 //+10 direita
         endif
     elseif lastkey()=27
         exit
     endif

     if coluna<1.and.contador=1
        contador=1
        coluna=1
     elseif coluna<1
        coluna=len(string)
        contador=contador-largura
        coluna=largura
     elseif coluna>largura
        contador=contador+largura
        coluna=1
     elseif lastkey()=27
        exit
     endif

     if coluna+contador>len(string)+1
        coluna=coluna-1
     endif
enddo
restscreen(exibent[1],exibent[2],exibent[1],exibent[2]+largura,linhaunica)
return coluna+contador-1


Uso:

Código: Selecionar todos

var="Aqui deve ter uma string com mais de 500 caracters para que seja feito o exemplo"
myvisao(var,70,{07,04},{05,65})

Agradeço a todos,
Até+

Re: Exibir coluna atual dentro do GET

Enviado: 25 Ago 2008 12:20
por gvc
Vc já tentou estes?

- oget:col
- oget:pos

Re: Exibir coluna atual dentro do GET

Enviado: 03 Set 2008 01:11
por vagucs
Bom, pelo que sei, o limite do dbedit é 64k e nao apenas 255 bytes, acho que devia informar bem sobre isto, mesmo um campo caractere com 600 posições pode ser editado pelo memoedit e nao apenas os campos do tipo memo ou arquivos texto, e ele você ja tem controle de linha e coluna. Acho que está quebrando cabeça atoa.

Re: Exibir coluna atual dentro do GET

Enviado: 03 Set 2008 06:44
por Clipper
Prezado Colega

Você pode pegar como exemplo o utilitário PE.PRG que vem com o Clipper, ele edita usando o MEMOEDIT() e controla corretamente/mostra a posição do cursor (linha e coluna).

Até logo.

Marcelo

Re: Exibir coluna atual dentro do GET

Enviado: 03 Set 2008 09:19
por ANDRIL
Vagner

Quando disse que o limite do MEMOEDIT era 255 me referia a largura por linha e nao do tamanho da variavel/arquivo, realmente ele aceita ate o tamanho de 64k.

O meu problema é que cada linha do meu arquivo tem 600 caracteres, porem so precisava da 1a. linha:

Código: Selecionar todos

string=memoedit("ARQUIVO.TXT")
string=memoline(string,600,1)
memoedit(string,01,01,01,79)
Este codigo me retornava uma string vazia se o comprimento fosse maior que 254 caracteres, ok

Marcelo,

Não tenho mais o PE.PRG depois que deu pane no meu micro perdi muitas coisas legais e o meu backup era somente do básico.

Já consegui obter o resultado que eu queria com a função que postei acima, obrigado a todos vcs.

Ate+,

Exibir coluna atual dentro do GET

Enviado: 03 Set 2008 09:34
por Pablo César
Não tenho mais o PE.PRG depois que deu pane no meu micro perdi muitas coisas legais
Se precisarem ver o arquivo PE.PRG que o colega menciona, vai aqui em anexo.
ANDRIL escreveu:Já consegui obter o resultado que eu queria com a função que postei acima, obrigado a todos vcs.
Claro, o importante é isso e que os colegas dispuseram-se para lhe ajudar.

Re: Exibir coluna atual dentro do GET

Enviado: 03 Set 2008 10:19
por vagucs
Andril, o tamanho da linha é customizável é um parametro do Memoedit que você pode definir como 600. Se não me engano é o oitavo parâmetro.

Código: Selecionar todos

string=memoedit("ARQUIVO.TXT",,,,,,,600)
string=memoline(string,600,1)
memoedit(string,01,01,01,79)