Comment redimensionner la barre de défilement de la barre de défilement
-
05-07-2019 - |
Question
Si vous ouvrez le Bloc-notes, ajoutez dix lignes et redimensionnez l'éditeur pour n'en afficher que neuf, la piste du pouce (le bloc pouvant être déplacé sur une barre de défilement) correspond à presque toute la longueur de la barre de défilement verticale. Si vous ajoutez quelques milliers de lignes, la piste du pouce n’a que quelques pixels de haut.
J'aimerais dupliquer ce comportement dans un descendant de TCustomControl où j'ai implémenté une barre de défilement horizontale. J'ai donc ajouté WS_HSCROLL à mon style de fenêtre (dans CreateParams) et mis en place un gestionnaire pour WM_HSCROLL. En cours de route, j'utilise SetScrollRange et SetScrollPos pour gérer la plage et la position de la piste du pouce - mais le petit bugger reste un carré presque parfait.
Qu'est-ce qui me manque?
La solution
La documentation recommande d'utiliser SetScrollInfo
plutôt que SetScrollRange
et SetScrollPos
.
As La réponse de Wouter pointe du doigt , vous devez également définir la taille de la page. La position et la plage indiquent au système d’exploitation le centre du pouce, mais la taille de la page lui indique le pourcentage de la plage visible, et c’est ce qui détermine la taille du pouce. Vous devez utiliser SetScrollInfo
pour cela; En prime, il vous permet de définir à la fois la position, la plage et la taille de la page.
TCustomControl
diffère de TWinControl
par une seule façon: il possède un canevas. TScrollingWinControl
diffère également dans un sens: il comporte des barres de défilement. Ajouter un canevas à un descendant TScrollingWinControl
devrait être beaucoup plus simple que d’ajouter des barres de défilement à un descendant TCustomControl
& # 8212; c'est moins de code à copier et coller à partir du code source de la VCL. Changez la classe de base de votre contrôle et voyez où vous vous trouvez.
Même si ce n'est pas une option, vous feriez bien de regarder comment TScrollingWinControl
et TControlScrollBar
fonctionnent ensemble.
Autres conseils
Vous pouvez utiliser la propriété PageSize
pour influencer la taille du pouce.
Exemple:
ScrollBar1.Min := 0;
ScrollBar1.Max := 100;
ScrollBar1.Position := 70;
ScrollBar1.PageSize := 50;
ressemblera à: