TBrowse com Barra de Rolagem

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Re: TBrowse com Barra de Rolagem

Mensagem 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.
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.
Avatar do usuário
wanderley.monteiro
Usuário Nível 1
Usuário Nível 1
Mensagens: 30
Registrado em: 14 Ago 2008 10:42
Localização: São Bernardo do Campo - São Paulo

Re: TBrowse com Barra de Rolagem

Mensagem 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!
Wanderley Monteiro
------------------------
MAMVTH - Customizações ADVPL/Protheus
São Bernardo do Campo SP
wanderley.monteiro@gmail.com
ADVPL, ERP TOTVS (Protheus), SQL, Oracle, Clipper 5.3b, Visual Fox Pro 9, xHarbour
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Re: TBrowse com Barra de Rolagem

Mensagem 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?
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

TBrowse com Barra de Rolagem

Mensagem 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).
Anexos
demobrow.zip
(158.91 KiB) Baixado 559 vezes
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.
Avatar do usuário
Poka
Usuário Nível 4
Usuário Nível 4
Mensagens: 563
Registrado em: 25 Out 2004 21:26
Localização: Leme/SP

TBrowse com Barra de Rolagem

Mensagem 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
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

TBrowse com Barra de Rolagem

Mensagem 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,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
Poka
Usuário Nível 4
Usuário Nível 4
Mensagens: 563
Registrado em: 25 Out 2004 21:26
Localização: Leme/SP

TBrowse com Barra de Rolagem

Mensagem por Poka »

Olá

Hazael disse
nAt não existe no tbrowse... de onde vem?
eu uso a minigui extend , deve ser por isso.
Poka
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

TBrowse com Barra de Rolagem

Mensagem 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!
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

TBrowse com Barra de Rolagem

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

TBrowse com Barra de Rolagem

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

TBrowse com Barra de Rolagem

Mensagem 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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Linguagemclipper
Usuário Nível 3
Usuário Nível 3
Mensagens: 240
Registrado em: 16 Abr 2016 17:33
Localização: Maceió/AL
Contato:

TBrowse com Barra de Rolagem

Mensagem 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.
Usando xHarbour v1.2.3 Rev. 10264 + BCC 5.8, Elchs' LetoDBf, DBFCDX e SIBRA para imprimir relatórios.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

TBrowse com Barra de Rolagem

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Linguagemclipper
Usuário Nível 3
Usuário Nível 3
Mensagens: 240
Registrado em: 16 Abr 2016 17:33
Localização: Maceió/AL
Contato:

TBrowse com Barra de Rolagem

Mensagem 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.
Usando xHarbour v1.2.3 Rev. 10264 + BCC 5.8, Elchs' LetoDBf, DBFCDX e SIBRA para imprimir relatórios.
Responder