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?

Foi útil?

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:

Tamanho da página

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top