2009-09-16 11 views
2

Je voudrais changer la largeur ScrollingBar d'une TFrame.
Je sais que je pourrais changer tous ScrollingBars dans le système par:Comment changer la largeur d'un ScrollBar?

SystemParametersInfo(SPI_SETNONCLIENTMETRICS,.... 

Mais comment puis-je le faire pour un WinControl spécifique?

Répondre

1

Une grande partie du code dans Delphi dépend de la largeur des barres de défilement pour être le paramètre du système fixe de sorte que vous ne pouvez pas modifier la largeur sans rompre le contrôle. (Pas sans réécrire le TControlScrollBar et les contrôles associés dans la VCL.)

Vous pouvez, bien sûr, masquer les barres de défilement par défaut du contrôle et ajouter vos propres composants TScrollbar à côté de lui.


La classe TScrollBar standard est une WinControl elle-même, où la barre de défilement prend toute la largeur et la hauteur du contrôle. La classe TControlScrollBar est liée à d'autres WinControl pour gérer les barres de défilement par défaut affectées aux contrôles Windowed. Alors que l'API brute pourrait permettre d'utiliser une largeur plus flexible, vous aurez toujours le problème que la VCL assumera simplement la largeur par défaut définie par le système pour ces contrôles. Cela montre également la plus grande différence entre les deux types de barre de défilement: TScrollBar possède son propre handle Windows tandis que TControlScrollBar l'emprunte au contrôle associé.

0

Vous pouvez essayer quelque chose comme ceci:

your_frame.HorzScrollBar.Size := 50; 
    your_frame.HorzScrollBar.ButtonSize := your_frame.HorzScrollBar.Size; 
+0

Ce * pourrait * travail si vous utilisez des barres de défilement plat et une Comctl32.dll ci-dessous la version 6. Voir aussi http://msdn.microsoft.com/en -us/library/bb775438 (VS.85) .aspx et http://msdn.microsoft.com/en-us/library/bb787529(VS.85).aspx –

Questions connexes