Página 1 de 2
TBrowse com Barra de Rolagem
Enviado: 16 Abr 2010 09:37
por wanderley.monteiro
Bom dia a Todos
Alguem tem algum exemplo de como inserir barra de rolagem em um TBrowse?
Abs
WMonteiro
Re: TBROWSE com Barra de Rolagem
Enviado: 16 Abr 2010 10:07
por alxsts
Olá!
Entre algumas opções, existe a SuperLib, que você poderá baixar
daqui.. Tem várias funções, incluido TBrowse com barras de rolagem. Vem com o respectivo NG e os fontes.
Re: TBROWSE com Barra de Rolagem
Enviado: 16 Abr 2010 10:09
por wanderley.monteiro
Obrigado Alexandre!!! Isso é uma pérola!
TBROWSE com Barra de Rolagem
Enviado: 16 Abr 2010 10:23
por Pablo César
TBROWSE com barra de rolagem ? Nunca precisei disso. O proprio TBROWSE ja faz isso, no entanto seria interessante ver como funciona. Baixei o arquivo, mas não consegui compilar pois precisa da VL e eu só tenho a VL2_52 que não possui a função ( Setswmouse() ). Mesmo desabilitando-la o exemplo não consegue criar os arquivos dbfs. Em outra palavras desistí por falta de tempo. Mas se algué possuir algum exemplo compilado e quiser mostrar anexando-lo em forma de ZIP aqui no forum, eu agradeço para eu ver e matar a curiosidade.
Re: TBROWSE com Barra de Rolagem
Enviado: 16 Abr 2010 10:30
por wanderley.monteiro
neste fim de semana vou me divertir com isso, quem sabe rola... Abs!
TBROWSE com Barra de Rolagem
Enviado: 16 Abr 2010 10:40
por Pablo César
Ahh ja conseguí testar, pena que os eventos do mouse não conseguí reproduzir (mas isso não é o que mais importa). Agora entendí a finalidade... essa função seria para apenas MOSTRAR ao usuário a posição de edição dentro da área toda do TBROWSE. Achei de uso vanal, porque pensei que as barras de rolagem iriam interferir na exibição de forma estática durante a navegação. Mas se é isso que você quer... boa sorte então !
Re: TBROWSE com Barra de Rolagem
Enviado: 16 Abr 2010 10:43
por alxsts
Olá!
Pablo César escreveu: O proprio TBROWSE ja faz isso,
Desculpe Pablo. Eu nunca vi... Não sei qual arquivo você baixou mas, a SuperLib nada tem a ver com a VL Lib.
A Superlib tem uma função que aguarda por um evento de teclado ou mouse e devolve o código do evento. Dependendo deste código, o programador atualiza as barras de rolagem.
A SuperLib já foi migrada para [x]Harbour.
Re: TBROWSE com Barra de Rolagem
Enviado: 16 Abr 2010 10:58
por wanderley.monteiro
Ah tah, pensei que existisse alguma propriedade do TBrowse que ativada exibia essa barra vertical de scrool.
Eh verdade se não me engano na VL tem algo parecido, o problem que rodo o sistem aem Win7 e os caracteres da VL não ficam bons aqui...
Mas tem muitas funçoes interessantissimasnesse pacotasso...
Abs
WMonteiro
Re: TBROWSE com Barra de Rolagem
Enviado: 16 Abr 2010 23:51
por sygecom
Olá Wanderley,
Esse problema de caracter eu resolvi compilando um pequeno aplicativo com clipper+rtlink e descompilando esse meu proprio aplicativo depois peguei as funções da VL e mudei para o meu gosto para mudar esses caracter que ficavam estranho, ai rodou legal tanto janela como tela cheia, e se compilar com xHarbour ai da pra melhorar mais ainda o visual da VL no 4shared tem uns exemplos bom:
http://www.4shared.com/dir/9103314/4c5c ... aring.html
Re: TBROWSE com Barra de Rolagem
Enviado: 17 Abr 2010 06:29
por wanderley.monteiro
Vou dar uma brincada! Obrigado Leonardo!
Re: TBROWSE com Barra de Rolagem
Enviado: 18 Abr 2010 02:51
por rochinha
Amiguinho,
Colocar uma barra de rolagem em suporte ao TBrowse é muito fácil.
Voce precisará dos caracteres 176 e 178, onde:
O Caracter 176 sera a barra de scroll por onde o cursor, caracter 178, navegará.
Suponde que o seu Browse tenha 78 colunas(tirando as duas da linha de contorno) e 21(tirando duas linhas de contorno e a ultima para mensagem) voce poderá posicionar sua barra na coluna 80 e linha 2.
Com um FOR voce repete os caracteres 176 de 2,80 até 20,80, pensando nisto sua barra de rolagem tera ao menos 18 colunas, este numero será o STEP/SALTO para o movimento do cursor.
Então supondo que o ponteiro do DBF esteja no inicio e voce tenha 180 registros na mesma, o cursor não se movimentará para outra posição até que o cursor do DBF esta entre os registros 11 e 20.
Ou seja, voce tem 180 registros, sua barra tem 18 posições, 180/18 = 10.
O seu cursor só poderá mudar de posição de 10 em 10 registros. Então 10 é o ponto para salto.
Para saber o ponto para salto em outras quantidades de registros voce calcula RECCO()/18=ponto de salto.
Então a partir do ponto de salto voce dá um @...SAY do caracter 176 na posição do cursor e @...SAY do caracter 178 na nova posição.
Se TBrowse fará a verificação da posição a cada SKIP ou vez que voce desce ou sobe o cursor.
De uma pesquisada e analise a função de barra de progressão para indexação que pode estar perdida pelo site e voce terá uma base do que estou falando.
Faça uma pesquisa afinada no forum por barra|rolagem e veja se encontra outras duvidas e quais soluções foram apresentadas.
Re: TBROWSE com Barra de Rolagem
Enviado: 18 Abr 2010 11:51
por alxsts
Olá!
Pode-se adaptar o fonte exibido abaixo, que veio com os exemplos do Clipper 5.
Seria interessante adaptar para que quando o usuário arrastasse o cursor da barra de rolagem com o mouse, o arquivo fosse movimentado proporcionalmente à nova posição desse cursor.
C:\Clipper5\Source\Sample\ScrolBar.Prg.
Código: Selecionar todos
/***
*
* Scrolbar.prg
*
* Implements a scroll bar that can be updated as the cursor moves down
* in a TBrowse object, ACHOICE(), DBEDIT(), or MEMOEDIT()
*
* Copyright (c) 1993, Computer Associates International Inc.
* All rights reserved.
*
* NOTE: Compile with /n /w
*
*/
#include "Fileman.ch"
/***
*
* ScrollBarNew( <nTopRow>, <nTopColumn>, <nBottomRow>,
* <cColorString>, <nInitPosition> ) --> aScrollBar
*
* Create a new scroll bar array with the specified coordinates
*
*/
FUNCTION ScrollBarNew( nTopRow, nTopColumn, nBottomRow, ;
cColorString, nInitPosition )
LOCAL aScrollBar := ARRAY( TB_ELEMENTS )
aScrollBar[ TB_ROWTOP ] := nTopRow
aScrollBar[ TB_COLTOP ] := nTopColumn
aScrollBar[ TB_ROWBOTTOM ] := nBottomRow
aScrollBar[ TB_COLBOTTOM ] := nTopColumn
// Set the default color to White on Black if none specified
IF cColorString == NIL
cColorString := "W/N"
ENDIF
aScrollBar[ TB_COLOR ] := cColorString
// Set the starting position
IF nInitPosition == NIL
nInitPosition := 1
ENDIF
aScrollBar[ TB_POSITION ] := nInitPosition
RETURN ( aScrollBar )
/***
*
* ScrollBarDisplay( <aScrollBar> ) --> aScrollBar
*
* Display a scoll bar array to the screen
*
*/
FUNCTION ScrollBarDisplay( aScrollBar )
LOCAL cOldColor
LOCAL nRow
cOldColor := SETCOLOR( aScrollBar[ TB_COLOR ] )
// Draw the arrows
@ aScrollBar[ TB_ROWTOP ], aScrollBar[ TB_COLTOP ] SAY TB_UPARROW
@ aScrollBar[ TB_ROWBOTTOM ], aScrollBar[ TB_COLBOTTOM ] SAY TB_DNARROW
// Draw the background
FOR nRow := (aScrollBar[ TB_ROWTOP ] + 1) TO (aScrollBar[ TB_ROWBOTTOM ] - 1)
@ nRow, aScrollBar[ TB_COLTOP ] SAY TB_BACKGROUND
NEXT
SETCOLOR( cOldColor )
RETURN ( aScrollBar )
/***
*
* ScrollBarUpdate( <aScrollBar>, <nCurrent>, <nTotal>,
* <lForceUpdate> ) --> aScrollBar
*
* Update scroll bar array with new tab position and redisplay tab
*
*/
FUNCTION ScrollBarUpdate( aScrollBar, nCurrent, nTotal, lForceUpdate )
LOCAL cOldColor
LOCAL nNewPosition
LOCAL nScrollHeight := ( aScrollBar[TB_ROWBOTTOM] - 1 ) - ;
( aScrollBar[TB_ROWTOP] )
IF nTotal < 1
nTotal := 1
ENDIF
IF nCurrent < 1
nCurrent := 1
ENDIF
IF nCurrent > nTotal
nCurrent := nTotal
ENDIF
IF lForceUpdate == NIL
lForceUpdate := .F.
ENDIF
cOldColor := SETCOLOR( aScrollBar[ TB_COLOR ] )
// Determine the new position
nNewPosition := ROUND( (nCurrent / nTotal) * nScrollHeight, 0 )
// Resolve algorythm oversights
nNewPosition := IF( nNewPosition < 1, 1, nNewPosition )
nNewPosition := IF( nCurrent == 1, 1, nNewPosition )
nNewPosition := IF( nCurrent >= nTotal, nScrollHeight, nNewPosition )
// Overwrite the old position (if different), then draw in the new one
IF nNewPosition <> aScrollBar[ TB_POSITION ] .OR. lForceUpdate
@ (aScrollBar[ TB_POSITION ] + aScrollBar[ TB_ROWTOP ]), ;
aScrollBar[ TB_COLTOP ] SAY TB_BACKGROUND
@ (nNewPosition + aScrollBar[ TB_ROWTOP ]), aScrollBar[ TB_COLTOP ] SAY ;
TB_HIGHLIGHT
aScrollBar[ TB_POSITION ] := nNewPosition
ENDIF
SETCOLOR( cOldColor )
RETURN ( aScrollBar )
C:\Clipper5\Include\FileMan.Ch
Código: Selecionar todos
/***
*
* Fileman.ch
*
* Include file for Fileman.prg
*
* Copyright (c) 1993, Computer Associates International.
* All rights reserved.
*
*/
// The elements in aFileMan
#define FM_ROWTOP 1
#define FM_COLTOP 2
#define FM_ROWBOTTOM 3
#define FM_COLBOTTOM 4
#define FM_COLOR 5
#define FM_PATH 6
#define FM_RETURNFILE 7
#define FM_OLDCOLOR 8
#define FM_OLDSCREEN 9
#define FM_OLDSELECT 10
#define FM_ELEMENTS 10
// The elements in aTab
#define TB_ROWTOP 1
#define TB_COLTOP 2
#define TB_ROWBOTTOM 3
#define TB_COLBOTTOM 4
#define TB_COLOR 5
#define TB_POSITION 6
#define TB_ELEMENTS 6
// The main menu items
#define MN_LOOK 1
#define MN_COPY 2
#define MN_RENAME 3
#define MN_DELETE 4
#define MN_PRINT 5
#define MN_OPEN 6
// The Up and Down arrows, highlight and background char's for the thumb tab
#define TB_UPARROW CHR( 24 )
#define TB_DNARROW CHR( 25 )
#define TB_HIGHLIGHT CHR( 178 )
#define TB_BACKGROUND CHR( 176 )
// The checkmark for the tagged files
#define FM_CHECK CHR( 251 )
// Other definitions
#define FM_SINGLEFRAME "ÚÄ¿³ÙÄÀ³"
#define FM_SINGLEBORDER "ôÂÁ"
#define FM_DOUBLEFRAME "ÉÍ»º¼ÍȺ"
#define FM_DOUBLEBORDER "̹ËÊ"
#define FM_LEFT 1
#define FM_RIGHT 2
#define FM_TOP 3
#define FM_BOTTOM 4
#define FM_HORIZONTAL 2
#define FM_VERTICAL 4
Re: TBROWSE com Barra de Rolagem
Enviado: 18 Abr 2010 15:26
por rochinha
Amiguinhos,
Ta ai a prova.
A rotina colocada pelo nobre colega alxsts bateu direitinho com o que falei, com a diferença de concretizar a didática.
Pena que a memória do véio aqui não chegou a lembrar que ainda tinha os sample sources do seu velho Clipper ou que pudesse recorrer ao seu velho livro carcomido pelos ratos e sem capa do mais velho Tom Retting com maravilhas como estas.
Então mãos à obra.
Re: TBrowse com Barra de Rolagem
Enviado: 19 Abr 2010 09:16
por wanderley.monteiro
Valeeeeuu!!! Funcinou legal!
Outra pergunta, o TBrowse possui alguma propriedade que organiza a lista por determinada coluna ou tenho obrigatoriamente que manter um indice de cada uma delas e usar o DBSETORDER para alternar? Atualmente trabalho assim quando é TBrowse de DBF, agora com Array ja resolvi esse caso com o ASORT.
Abs
WMonteiro
Americana SP
Re: TBrowse com Barra de Rolagem
Enviado: 19 Abr 2010 11:15
por alxsts
Olá!
Não meu amigo... É como no caso dos arrays que você mencionou. Tem que fazer "no braço".
Se estiver usando a SuperLib, poderá definir como hot areas as colunas do browser que tem índice aberto. Quando o usuário clicar nestas colunas, muda-se a ordem ativa no arquivo e faz-se um refreshAll() no browser.
PS:
Rochinha:
grato pela gentileza. Uma demostração clara de que urbanidade, educação, humildade e boa vontade cabem em qualquer lugar. E não custam nada!