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?

Était-ce utile?

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 à:

Taille de la page

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top