2010-02-18 6 views
4

J'ai un TCheckListBox sur un formulaire. Sa propriété Columns est définie sur 2, et s'il y a plus d'éléments qui peuvent être affichés à l'écran dans deux colonnes, cela place une barre de défilement horizontale au bas du contrôle.Comment faire pour faire un TCheckListBox défiler verticalement?

Ce qui est, de la façon dont cette forme a été présentée, il serait beaucoup plus pratique de faire défiler verticalement. Mais je n'arrive pas à comprendre comment faire pour que la boîte fasse ça. Je pensais que mettre des colonnes à 1 devrait fonctionner, mais ce n'est pas le cas.

Quelqu'un sait comment faire un TCheckListBox faire défiler verticalement au lieu d'horizontalement?

Répondre

6

Vous devez définir Columns à 0.

Pour toutes les valeurs positives de la VCL envoie un message LB_SETCOLUMNWIDTH au contrôle de zone de liste native sous-jacente, avec le paramètre de largeur défini dans la zone de liste largeur client divisé par le nombre de colonnes. Les éléments qui ne correspondent pas vont démarrer une nouvelle colonne avec la même largeur de colonne, de sorte que la barre de défilement horizontale devient visible. Si Columns vaut 0 alors il y a une seule colonne qui couvre toute la largeur du client de la zone de liste, et les éléments qui ne correspondent pas rendront la barre de défilement verticale visible, et cacheront la barre de défilement horizontale.

Edit:

Il semble y avoir un intérêt réel ce qui se passe lorsqu'une valeur négative est utilisée pour la propriété Columns.

La méthode TCustomListBox.CreateParams() définit le style de liste LBS_MULTICOLUMN en fonction de la propriété Columns étant différente de 0. Pour les valeurs négatives le drapeau de style est défini, mais la VCL ne pas envoyer le message LB_SETCOLUMNWIDTH, de sorte que le contrôle natif utilise la valeur par défaut largeur de colonne. Il est documented être:

15 fois la largeur moyenne des caractères pour la police utilisée par la zone de liste.

(Recherche de "Les Précise de style LBS_MULTICOLUMN" pour trouver le passage pertinent du texte.)

+0

0 au lieu de 1? Si proche ... –

+0

Donc nous savons ce que fait 0, et nous savons ce que font les valeurs positives, alors qu'en est-il des négatives? ? ? ? –

+0

OMG Je ne le crois pas. J'ai débogué VCL en essayant de désactiver la barre de défilement H. –

Questions connexes