Exibir coluna atual dentro do GET

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1298
Registrado em: 06 Jul 2004 00:44
Contato:

Exibir coluna atual dentro do GET

Mensagem 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+
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Exibir coluna atual dentro do GET

Mensagem 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
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Re: Exibir coluna atual dentro do GET

Mensagem 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
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1298
Registrado em: 06 Jul 2004 00:44
Contato:

Re: Exibir coluna atual dentro do GET

Mensagem 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+
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
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 »

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?
[]'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!
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1298
Registrado em: 06 Jul 2004 00:44
Contato:

Re: Exibir coluna atual dentro do GET

Mensagem 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 é!

???
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Exibir coluna atual dentro do GET

Mensagem 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.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
Zoc
Usuário Nível 1
Usuário Nível 1
Mensagens: 20
Registrado em: 24 Set 2004 13:08
Localização: Leme/SP

Re: Exibir coluna atual dentro do GET

Mensagem 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
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1298
Registrado em: 06 Jul 2004 00:44
Contato:

Re: Exibir coluna atual dentro do GET

Mensagem 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é+
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Re: Exibir coluna atual dentro do GET

Mensagem por gvc »

Vc já tentou estes?

- oget:col
- oget:pos
"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}
Avatar do usuário
vagucs
Membro Master
Membro Master
Mensagens: 1480
Registrado em: 10 Jul 2004 10:45
Localização: Ipanema - MG
Contato:

Re: Exibir coluna atual dentro do GET

Mensagem 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.
Sem mais
Wagner Nunes
www.vagucs.com.br
Avatar do usuário
Clipper
Colaborador
Colaborador
Mensagens: 1334
Registrado em: 23 Ago 2004 00:04
Localização: Recife/PE

Re: Exibir coluna atual dentro do GET

Mensagem 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
Programador que é programador, quando tá de folga vai inventar função nova, fazer testes, ou seja... se divertir
Cobra 210 - Drive de 8" 1.024 KB - 64 KB RAM - Impressora de Linha Cobra - Visicalc - Fortran - Dialog - Sistema Operacional SP/M (é sp/m mesmo - era o cp/m da cobra)
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1298
Registrado em: 06 Jul 2004 00:44
Contato:

Re: Exibir coluna atual dentro do GET

Mensagem 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+,
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Exibir coluna atual dentro do GET

Mensagem 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.
Anexos
pe.prg
Editor do Clipper 5.3 (..\Source\Pe)
(11.99 KiB) Baixado 103 vezes
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
vagucs
Membro Master
Membro Master
Mensagens: 1480
Registrado em: 10 Jul 2004 10:45
Localização: Ipanema - MG
Contato:

Re: Exibir coluna atual dentro do GET

Mensagem 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)
Sem mais
Wagner Nunes
www.vagucs.com.br
Responder