Página 1 de 1

Congelar LINHAS com o tbrowse

Enviado: 11 Jan 2006 09:18
por janio
Pessoal,

Na sessão download tem uma função chamada TELA que serve para visualizar RELATÓRIOS NO VÍDEO, muito boa por sinal. Esta função, feita com o tbrowse, congela COLUNAS a esquerda.

Estou precisando congelar LINHAS. O problema é que não sei fazer essa adaptação para que se possa, além de congelar colunas, também congelar LINHAS acima do cursor.

Eis a função, se alguém puder fazer essa adaptação, já agradeço de logo.

Código: Selecionar todos

***************************************************************************
* Recebe um arquivo texto, cria um dbf, grava  neste arquivo e mostra na
* tela, quando sair os arquivos temporarios criados serao apagados.
***************************************************************************
Proce lertexto
Para arquivo
#INCLUDE "INKEY.CH"
#INCLUDE "SETCURS.CH"
local1:= {}
declare acamp:=[15]
cor_ant = setcolor()    // Salva cor antiga
dbf_veio= select()      // Salva arquivo que estava selecionado
 aadd(Local1, {"TELA01", "C", 13, 0})
 aadd(Local1, {"TELA02", "C", 13, 0})
 aadd(Local1, {"TELA03", "C", 13, 0})
 aadd(Local1, {"TELA04", "C", 13, 0})
 aadd(Local1, {"TELA05", "C", 13, 0})
 aadd(Local1, {"TELA06", "C", 13, 0})
 aadd(Local1, {"TELA07", "C", 13, 0})
 aadd(Local1, {"TELA08", "C", 13, 0})
 aadd(Local1, {"TELA09", "C", 13, 0})
 aadd(Local1, {"TELA10", "C", 13, 0})
 aadd(Local1, {"TELA11", "C", 13, 0})
 aadd(Local1, {"TELA12", "C", 13, 0})
 aadd(Local1, {"TELA13", "C", 13, 0})
 aadd(Local1, {"TELA14", "C", 13, 0})
 aadd(Local1, {"TELA15", "C", 13, 0})
 dbcreate("tela", Local1)
 sele 99  // ou comando de rede 
 use tela alias tela
 append from &arquivo sdf   //nomecompl_arq sdf
 goto top
 qtde_reg=lastrec()
 set cursor off
 @ 00,00 to 24,79 colo 'w+/b' //BOX CHR(219)
 //               /-------------> Cor do TBrowse
 //              /    /---------> Cor da barra em destaque
 //             /    /      /---> Cor da barra luminosa
 set color to "w+/b,n/w,,,g+/b"

oTab := TBrowseDB(02,01,24,78)
oTab:colsep := ""  // CHR(219)+" "
OTAB:HEADSEP:= 'Ä' // CHR(205)+CHR(203)+CHR(205)
OTAB:COLSEP := ''  // CHR(032)+CHR(186)+CHR(032)
OTAB:FOOTSEP:= 'Ä' // CHR(205)+CHR(202)+CHR(205)

for i = 1 to fcount()
 OTAB:ADDCOLUMN(TBCOLUMNNEW("", FIELDWBLOCK(FIELDNAME(i),SELE() )))
next

@ 01,01 say ' Tecle <C> para congelar as colunas que estao … esquerda do cursor            ' colo 'w-/b'
lin_br=30
Do while .T.
   nRow := ROW()
   nCol := COL()

   do while !oTab:Stabilize() ; enddo
   oTAB:hilite()
   dispbox(3,79,23,79,'°')
   ult_pos=3+(((recno()*100)/qtde_reg)/(100/(21-1)))
   if recno()=1 ; ult_pos=3
   endif
   @ ult_pos,79 say chr(219) colo 'bg/b'


   setpos( nRow, nCol )
   nKey := inkey()

   IF oTAB:stable
      setpos( nRow, nCol )
      nKey := Inkey(0)
   endif
   if nKey == K_F1
   elseif nKey == K_F2
   elseif nKey == K_F3
   elseif nKey == K_F4
   elseif nKey == K_F5
   elseif nKey == K_F6
   elseif nKey == K_F7
   elseif nKey == K_UP         ; oTab:UP()
   elseif nKey == K_DOWN       ; oTab:DOWN()
   elseif nKey == K_LEFT       ; oTab:LEFT()
   elseif nKey == K_CTRL_LEFT  ; oTab:PANLEFT()
   elseif nKey == K_RIGHT      ; oTab:RIGHT()
   elseif nKey == K_CTRL_RIGHT ; oTab:PANRIGHT()
   elseif nKey == K_PGUP       ; oTab:PAGEUP()
   elseif nKey == K_CTRL_PGUP  ; oTab:GOTOP()
   elseif nKey == K_PGDN       ; oTab:PAGEDOWN()
   elseif nKey == K_CTRL_PGDN  ; oTab:GOBOTTOM()
   elseif nKey == K_HOME       ; oTab:HOME()
   elseif nKey == K_CTRL_HOME  ; oTab:PANHOME()
   elseif nKey == K_END        ; oTab:END()
   elseif nKey == K_CTRL_END   ; oTab:PANEND()
   elseif nKey == K_ESC        ; EXIT
   elseif nkey == 99 .or. nkey==67
    if otab:freeze=0
     otab:freeze := otab:colpos -1
     lin_br=21
    else
     otab:freeze = 0    
     lin_br= 30
     otab:panhome()
     otab:refreshall()
    endif
   endif
   oTab:colorRect({1,1,lin_br,oTab:freeze},{2,5})
  enddo
  arq=dbf()
  use
  arq_dbf=alltrim(arq)+'.DBF'
  erase &arq_dbf   // apaga o arquivo dbf que mostra na tela a impressao.
****  erase &arquivo   // apaga o arquivo prn que mostra na tela a impressao.
   sele &dbf_veio   // seleciona novamente o arquivo que estava aberto
   set color to '&cor_ant.'
Um abraço,

Janio

Enviado: 13 Jan 2006 11:01
por janio
#-) #-)