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)