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?

¿Fue útil?

Solución

La documentación recomienda usar SetScrollInfo en lugar de SetScrollRange y SetScrollPos .

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:

Tamaño de página

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top