Oi,
Tenho uma tbrowse editando uma Matriz com umas 25 colunas, ocorre que o campo descricao presisaria de umas 4 linhas de 50 caracteres para ficar bom visualmente.
Em vez de digitar uma coluna atraz da outra fazendo 4 colunas para descricao ou fazer um campo como 200 caracteres e usar a pict '@S50' para fazer rolagem, pergunto:
Nao tem a possibilidade da tbrowse quando chegasse ao final da coluna abrisse uma noma linha na coluna EM BAIXO da mesma coluna em edicao..e assim por diante como ocorre numa celula no Excell.
Esses outra linhas para digitacao poderiam aparecer apenas na edicao, quando desse enter
Alguma solucao..
Obrigado a todos
Mais espaco edicao Tbrowse
Moderador: Moderadores
- Alexandre Silva
- Usuário Nível 3

- Mensagens: 376
- Registrado em: 26 Mar 2007 00:16
- Localização: Itapema - SC
Re: Mais espaco edicao Tbrowse
Amigo, fiz esta função usando array e achoice, embora tenha testado em um DbEdit, creio que possa ser utilizada no TBrowse normalmente.
Use a parte do lastkey()=13 adaptando para sua chamada a tecla ENTER no seu TBrowse.
Aqui a funcao que faz o controle da edição
Espero ter ajudado.
Ate+
Código: Selecionar todos
cls
use teste2
dbedit(00,00,22,79,,"myudf")
quit
Código: Selecionar todos
function myudf
parameters modo, campo
l1=row()
c1=col()
t=field(campo)
t1=&t
if lastkey()=27
return 0
elseif lastkey()=13
*--preencha este array com os campos e conteudos necessarios
arCampos :={{CAMPO1_,"CAMPO1_"},;
{CAMPO2_,"CAMPO2_"},;
{CAMPO3_,"CAMPO3_"},;
{CAMPO4_,"CAMPO4_"};
}
*--array para retornar os dados editados
arBuffer:={}
if edicao(l1,c1,arCampos,50)=-9
for i=1 to len(arCampos)
if i<=len(arBuffer)
cmp=arCampos[i,2]
repla &cmp with arBuffer[i]
else
cmp=arCampos[i,2]
vlr=&cmp
repla &cmp with space(len(vlr))
endif
next
endif
keyb chr(255)
return 2
else
return 1
endif
Código: Selecionar todos
function edicao()
parameters l1,c1,arCampos,largura
local tela
//priv arBuffer:={}
priv arLinhas[len(arBuffer)], sub:=0
*--obtem o primeiro elemento passado pelo
*--array a funcao para uso no achoice
for i = 1 to len(arCampos)
if !empty(arCampos[i,1])
aadd(arBuffer,arCampos[i,1])
endif
next
do while .t.
lfin=l1+len(arBuffer)
l4=lfin
tela:=savescreen(l1-1,c1-1,l4+2,c1+1+largura)
set colo to b/w,w/b
@l1-1,c1-1 to lfin,c1+largura+1
@lfin+1,c1-1 say padr("[F10]=Aceitar [Esc]=Nao Alterar",largura+3)
sub=achoice(l1,c1,lfin,c1+largura,arBuffer,arLinhas,"contro",sub)
restscreen(l1-1,c1-1,l4+2,c1+1+largura,tela)
if lastkey()=-9.or.lastkey()=27
exit
endif
enddo
return lastkey() //{{lastkey(),arBuffer}}
function contro
parameters modo, num_sel, posicao
do case
case lastkey()>=48.and.lastkey()<=57.or.lastkey()>=65.and.lastkey()<=90.or.lastkey()>=97.and.lastkey()<=122.or.lastkey()=13
setcursor(3)
if lastkey()#13
keyb chr(lastkey())
else
keyb chr(6)
endif
@row(),col() get arBuffer[num_sel] colo "w/n,w+/b"
read
setcursor(0)
*--se a linha for toda preenchida, add uma
*--nova linha e posiciona o cursor
if len(alltrim(arBuffer[num_sel]))=largura
if num_sel=len(arBuffer)
aadd(arBuffer,space(largura))
lfin++
sub=num_sel+1
keyb chr(30)
return 1
endif
elseif len(alltrim(arBuffer[num_sel]))=0
*--se a linha for editada e seu conteudo final
*--for vazio, elimina a linha do achoice
adel(arBuffer,num_sel)
asize(arBuffer,len(arBuffer)-1)
keyb chr(30)
sub=num_sel-1
return 1
endif
return 2
case lastkey()=-9
return 0
case lastkey()=13
return 1
case lastkey()=27
return 0
otherwise
return 2
endcase
Ate+
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Re: Mais espaco edicao Tbrowse
Isso aí Andril, acho que essa idéia vai servir para editar esse campo que parece ter um tamanho muito grande. Agora isso servirá para editar, mas pode também fazer uma função que apenas mostre o campo em forma completa quando o cursor estiver posicionado em dita coluna. Você poderá fazer apenas um SAY do campo concatenando em frações ao mesmo estilo que o Excel faz. É impresionante as opções que podemos obter no Tbrowse, a variável "colpos" possui a localização do cursor com respeito ao numero de colunas durante a navegação. Então antes do INKEY() que verifica se está estabilizado o TBROWSE possui faça um if b:colPos=3 -> chama a função para exibir o campo por completo em forma de janela.
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.
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.
- Alexandre Silva
- Usuário Nível 3

- Mensagens: 376
- Registrado em: 26 Mar 2007 00:16
- Localização: Itapema - SC
Re: Mais espaco edicao Tbrowse
Obrigado a todos..
vou adaptar e testar...
vou adaptar e testar...
* Clipper 5.2e/Gaspro 4.0 /CDX/Blinker 7.0 Harbour 3.2 Console Hbmk2
