Como posso fazer redimensionamento thumbtrack da barra de rolagem
-
05-07-2019 - |
Pergunta
Se você bloco de notas aberto, adicionar linhas dez e redimensionar o editor para mostrar apenas nove anos, a pista polegar (o bloco arrastável em uma barra de rolagem) é quase o comprimento total da barra de rolagem vertical. Se você adicionar um par de milhares de linhas, a pista polegar é apenas alguns pixels de altura.
Eu gostaria de duplicar esse bahaviour em um descendente TCustomControl onde eu implementada uma barra de rolagem horizontal. Então eu adicionei WS_HSCROLL ao meu estilo de janela (em CreateParams) e implementado um manipulador para WM_HSCROLL. Ao longo do caminho, eu uso SetScrollRange e SetScrollPos para gerenciar o intervalo ea posição da pista polegar - mas o pestinha permanece um quadrado quase perfeito
.O que eu estou ausente?
Solução
A documentação recomenda o uso de SetScrollInfo
em vez de SetScrollRange
e SetScrollPos
.
Como aponta de Wouter resposta , você também precisa definir o tamanho da página. A posição e alcance dizer ao sistema operacional onde o centro do polegar pertence, mas o tamanho da página diz-lhe como grande parte da gama é visível, e desse o que determina o tamanho do polegar. Você tem que usar SetScrollInfo
para isso; como um bônus, ele permite que você definir a posição, alcance e tamanho da página de uma vez.
difere TCustomControl
de TWinControl
em apenas um caminho: Ele tem uma tela. difere TScrollingWinControl
em apenas uma maneira, demasiado: Tem barras de rolagem. Adicionando uma tela para um descendente TScrollingWinControl
deve ser muito mais fácil do que adicionar barras de rolagem para um descendente TCustomControl
- é menos código para copiar e colar a partir do código-fonte VCL. Alterar classe base do seu controle e, em seguida, ver onde você está.
Mesmo que isso não é uma opção, você ainda fazer bem para olhar em como TScrollingWinControl
e trabalho TControlScrollBar
juntos.
Outras dicas
Você pode usar a propriedade PageSize
para influenciar o tamanho do polegar.
Exemplo:
ScrollBar1.Min := 0;
ScrollBar1.Max := 100;
ScrollBar1.Position := 70;
ScrollBar1.PageSize := 50;
será algo como: