¿Cómo hago para que el tamaño de la barra de desplazamiento cambie de tamaño?
-
05-07-2019 - |
Pregunta
Si abre el Bloc de notas, agrega diez líneas y cambia el tamaño del editor para mostrar solo nueve, la pista del pulgar (el bloque que se puede arrastrar en una barra de desplazamiento) es casi la longitud completa de la barra de desplazamiento vertical. Si agrega un par de miles de filas, la pista del pulgar tiene solo unos pocos píxeles de alto.
Me gustaría duplicar este bahaviour en un descendiente de TCustomControl donde implementé una barra de desplazamiento horizontal. Así que agregué WS_HSCROLL a mi estilo de ventana (en CreateParams) e implementé un controlador para WM_HSCROLL. En el camino, utilizo SetScrollRange y SetScrollPos para administrar el rango y la posición de la pista de exploración, pero el pequeño bugger sigue siendo un cuadrado casi perfecto.
¿Qué me estoy perdiendo?
Solución
La documentación recomienda usar SetScrollInfo
en lugar de SetScrollRange
y
Como La respuesta de Wouter señala , también es necesario establecer el tamaño de la página. La posición y el rango le dicen al sistema operativo a dónde pertenece el centro del pulgar, pero el tamaño de la página le dice qué parte del rango es visible, y eso es lo que determina el tamaño del pulgar. Tienes que usar SetScrollInfo
para eso; como beneficio adicional, le permite establecer la posición, el rango y el tamaño de la página a la vez.
TCustomControl
difiere de TWinControl
en una sola forma: tiene un lienzo. TScrollingWinControl
también se diferencia de una manera: tiene barras de desplazamiento. Agregar un lienzo a un descendiente TScrollingWinControl
debería ser mucho más fácil que agregar barras de desplazamiento a un descendiente TCustomControl
: es menos código para copiar y pegar desde el código fuente de VCL. Cambia la clase base de tu control y luego ve dónde estás.
Incluso si esa no es una opción, aún sería bueno ver cómo TScrollingWinControl
y TControlScrollBar
trabajan juntos.
Otros consejos
Puedes usar la propiedad PageSize
para influir en el tamaño del pulgar.
Ejemplo:
ScrollBar1.Min := 0;
ScrollBar1.Max := 100;
ScrollBar1.Position := 70;
ScrollBar1.PageSize := 50;
Se verá como: