Página 2 de 2

Re: TBrowse com Barra de Rolagem

Enviado: 19 Abr 2010 13:31
por Pablo César
alxsts escreveu:Olá!
Pablo César escreveu: O proprio TBROWSE ja faz isso,
Desculpe Pablo. Eu nunca vi...
Não me expressei corretamente. Quis eu dizer que a "rolagem" de tela ou deslocamento de tela, o proprio TBROWSE já faz. Explico-me:

Quando você o seu TBROWSE tem muitas colunas, o usuário utiliza a tecla da direita e esquerda para navegar entre colunas. E quando no seu TBROWSE precisa exibir todas as linhas (que normalmente seriam os registros), o usuário utiliza as teclas de acima e abaixo para navegar entre elas. Por isso achei desnecessário. Mas depois eu conseguí compilar e ví que seria apenas para situar (mostrar localização) de onde o ponteiro (ou prompt de navegação) está na exibição toda.

Agora com respeito ao Setswmouse() for da VL2_52 ou da SuperLib, realmente não sei, pois nunca precisei utilizar.

Re: TBrowse com Barra de Rolagem

Enviado: 19 Abr 2010 14:09
por wanderley.monteiro
Gente obrigado pela força, consegui inserir a barra. A ordenação de colunas por mouse, não vou comprara essa briga não, o cliente contnuara apertando F2 rsrsrsrs

Valeu a força!

Re: TBrowse com Barra de Rolagem

Enviado: 19 Abr 2010 17:15
por alxsts
Olá!

[Pablo]
Lendo o teu texto, tive a impressão de que você dizia que o TBrowse colocava barras de rolagem.
[Wanderlei]
Dá pra mostrar como você fez? Usou a Superlib?

TBrowse com Barra de Rolagem

Enviado: 19 Abr 2010 18:14
por Pablo César
[Pablo]
Lendo o teu texto, tive a impressão de que você dizia que o TBrowse colocava barras de rolagem.
Ahammm por isso que eu disse que eu não tinha me expressado direito, mas não foi isso que eu quise dizer.

Aqui está o código exemplo ja compilado em anexo (mas sem o evento do mouse).

TBrowse com Barra de Rolagem

Enviado: 05 Ago 2018 13:09
por Poka
Boa tarde

Hazael

experimenta assim

Código: Selecionar todos

priva nRow:= browsepesq:nAt
   xcodigo:=adados[nrow,1] 
   xnome:=adados[nrow,2] 

depende dos campos do seu browse 




Poka

TBrowse com Barra de Rolagem

Enviado: 05 Ago 2018 16:45
por Toledo
Hazael, no seu código, a variável nArryRowNo já controla a posição do ponteiro dentro do Array, faltou apenas incluir neste controle se for pressionado o CTRL+HOME e CTRL+END para posicionar no primeiro ou último elemento da array, então depois do comando oBrowse:SkipBlock := { | nSkip | TbrASkipper( nSkip, @nArryRowNo ) }, incluir:

Código: Selecionar todos

oBrowse:GoTopBlock    := {|| nArryRowNo := 1 }
oBrowse:GoBottomBlock := {|| nArryRowNo := nAgenSize }
Então nArryRowNo vai ter a posição dentro da array. Para pegar o primeiro campo do elemento atual da Array (aAgenda) use aAgenda[nArryRowNo,1] .

Abraços,

TBrowse com Barra de Rolagem

Enviado: 06 Ago 2018 09:16
por Poka
Olá

Hazael disse
nAt não existe no tbrowse... de onde vem?
eu uso a minigui extend , deve ser por isso.
Poka

TBrowse com Barra de Rolagem

Enviado: 12 Ago 2018 08:52
por microvolution
hazael escreveu:Video: https://youtu.be/jbXJMgySKa0
além do vídeo ser explicativo, quero um dia implementar usando a HMG ou WVG, pois o meu TBROWSE console ainda não funciona nada de mouse.

Parabéns!

TBrowse com Barra de Rolagem

Enviado: 12 Ago 2018 18:43
por JoséQuintas
Eu cheguei a colocar, mas não mostrando exatamente a posição.
Seria o desenho da barra de rolagem, e o usuário poder clicar nessa barra.
Agora tá comentado, nem uso mais.

Código: Selecionar todos

   aHotKeys := {}
   //    { nTop + 1, nRight, nTop + 1, nRight, "", K_CTRL_PGUP }, ;
   //    { nTop + 2, nRight, nTop + 2, nRight, "", K_CTRL_PGUP }, ;
   //    { nTop + 3, nRight, nTop + 3, nRight, Chr(30), K_UP }, ;
   //    { nTop + 4, nRight, nTop + 4, nRight, Chr(30), K_UP }, ;
   //    { nBottom - 2, nRight, nBottom - 2, nRight, Chr(31), K_DOWN }, ;
   //    { nBottom - 1, nRight, nBottom - 1, nRight, Chr(31), K_DOWN }, ;
   //    { nBottom, nRight, nBottom, nRight, "", K_CTRL_PGDN }, ;
   //    { nBottom, nLeft + 1, nBottom, nLeft + 2, Chr(17) + Chr(17), K_LEFT }, ;
   //    { nBottom, nRight - 2, nBottom, nRight - 1, Chr(16) + Chr(16), K_RIGHT }, ;
   //    ;// Nesta ordem, se tiver area livre, PgUp e PgDn funciona
   //    { nTop + 5, nRight, nTop + 5, nRight, "", K_PGUP }, ;
   //    { nTop + 6, nRight, nTop + 6, nRight, "", K_PGUP }, ;
   //    { nBottom - 4,nRight, nBottom - 4, nRight, "", K_PGDN }, ;
   //    { nBottom - 3,nRight, nBottom - 3, nRight, "", K_PGDN }, ;
   //    { nBottom, nLeft + 3, nBottom, nLeft + 12, "[Localiza]", K_ALT_L}, ;
   //    { nBottom, nLeft + 13, nBottom, nLeft + 20, "[Filtro]", K_ALT_F}, ;
   //    { nBottom, nLeft + 21, nBottom, nLeft + 27, "[Ordem]", K_F5 } }
   // FOR EACH oElement IN aHotKeys
   //    @ oElement[ 1 ], oElement[ 2 ] SAY oElement[ 5 ]
   // NEXT
Basicamente é a área do clique, e qual será a tecla acionada, como se fossem buttons de tamanhos variados.
No TBrowse, ao clicar com o mouse, verifica se MRow(), MCol() se encaixam em alguma dessas regiões, e substitui pela tecla que seria equivalente.

Código: Selecionar todos

      CASE nKey == K_LBUTTONDOWN
         FOR EACH oElement IN aHotKeys
            IF nMRow >= oElement[ 1 ] .AND. nMRow <= oElement[ 3 ] .AND. nMCol >= oElement[ 2 ] .AND. nMCol <= oElement[ 4 ]
               nKey := oElement[ 6 ]
               EXIT
            ENDIF
         NEXT
Pra mostrar a barra de rolagem com a posição exata, teria que saber o total de registros, e isso poderia ser demorado.

TBrowse com Barra de Rolagem

Enviado: 13 Ago 2018 12:17
por JoséQuintas
hazael escreveu:Mas o que não consegui fazer é clicar e arrastar o ponteiro indicador
O Tbrowse foi projetado para uma única tecla.
Isso de arrastar, até daria pra fazer, talvez um loop entre o MouseDown e MouseUp, e dependeria de saber a quantidade total.
Acho de um modo geral, o Scroll já ajuda.
Talvez só o lateral, que basta analisar o próprio array do tbrowse.

TBrowse com Barra de Rolagem

Enviado: 13 Ago 2018 13:55
por JoséQuintas
É praticamente isso que postei.
Transformar a região da barra de rolagem em posição de clique.
E no Inkey() verificar qual a posição que clicaram.

Se embaixo, no desenho horizontal, lado direito ou esquerdo, troca pelas setas.
Se no lateral, se for na parte de cima troca por PGUp
Se for na parte de baixo PgDn
Se for na parte que parece seta, Up ou Down

As posições tem a ver diretamente com o desenho, de onde estão as barras, e as setas das barras.
A única coisa é criar o array com as posições, e a tecla que entra se o usuário clicar lá.

José M. C. Quintas

TBrowse com Barra de Rolagem

Enviado: 25 Ago 2020 12:33
por Linguagemclipper
Pessoal eu não entendí como o programa determina a variável nTotal.
Quero implementar a barra de rolagem num TBROWSE com banco de dados. O problema é determinar o total de registros que é mostrado no TBROWSE, não posso simplesmente usar o LASTREC() porque tem registros marcados para deleção; tem registros filtrados etc. Então, não sei como descobrir quantas linhas tem meu objeto TBROWSE quando uso um DBF.
Esses exemplos de programas aí eu não entendí como funcionam. Se alguém conseguiu implementar, seria legal também constar um exemplo usando tais funções.

TBrowse com Barra de Rolagem

Enviado: 25 Ago 2020 13:19
por JoséQuintas
Determinar a quantidade de registros ou posição, sem ficar demorado, é a parte mais difícil.
O resto é moleza.

Só a parte do gráfico:
Digamos que as linhas vão de 1 a 10
E a posição atual? talvez uma fórmula, supondo que fosse RecNo() sem índice...

Código: Selecionar todos

nPos := Round( RecNo() / LastRec() * 10, 0 )
FOR nLin = 1 TO 10
   @ nLin, nCol SAY iif( nPos == nLin, "X", "." )
NEXT
Pronto, tá feito um gráfico.
E uma navegação? Testando a posição do clique do mouse

Código: Selecionar todos

IF Inkey() == K_BUTTONDOWN
   IF MCol() == 50 // supondo que o gráfico está na coluna 50
      IF MRow() >= 0 .AND. MRow() <= 11 // testa se o clique foi nas linhas do gráfico
         nNewPos := MRow()
        IF nNewPos < nPosAtual // se clicou antes da posição atual, PageUp
           KEYBOARD Chr( K_PGUP )
        ELSEIF nNewPos > nPosAtual // se clicou depois da posição atual, PageDown
           KEYBOARD Chr( K_PGDN )
      ENDIF
   ENDIF
ENDIF
Apenas um exemplo básico, não é um bicho de sete cabeças mas... o problema é obter quantidade de registros sem deixar lento.
Acabei nunca colocando gráfico por conta disso.

"Talvez" fazer igual outras linguagens fazem: deixa tudo num array, que teste encima do array é mais simples/rápido.

TBrowse com Barra de Rolagem

Enviado: 25 Ago 2020 13:27
por Linguagemclipper
Obrigado pela dica, mas acabei encontrando agora aqui uma função que resolveu tudo: OrdKeyCount()
Fiz só colocar assim que deu tudo certo:

Código: Selecionar todos

nTOTAL := OrdKeyCount() 
O resto continua a mesma coisa.