Question

J'ai un TCheckListBox sur un formulaire. Ses colonnes propriété est définie sur 2, et s'il y a plus d'éléments que peut s'adapter à l'écran en deux colonnes, il met une barre de défilement horizontale au bas du contrôle.

La chose est, la façon dont cette forme aménagée, il serait beaucoup plus pratique pour faire défiler verticalement. Mais je ne peux pas à comprendre comment faire la boîte faire. Je pensais que la mise en colonnes 1 devrait fonctionner, mais il ne fonctionne pas.

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

Était-ce utile?

La solution

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ée par le nombre de colonnes. Les éléments qui ne correspondent pas à se lancer une nouvelle colonne avec la même largeur de colonne, de sorte que la barre de défilement horizontale devient visible.

Si Columns est 0 alors il y a une seule colonne qui couvre toute la largeur du client de la liste, et les éléments qui ne correspondent pas fera la barre de défilement verticale visible, et masquer la barre de défilement horizontale.

Modifier

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 zone 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 de LB_SETCOLUMNWIDTH, de sorte que le contrôle natif utilise la colonne par défaut largeur. Il est documenté être:

  

15 fois la largeur moyenne des caractères de la police de caractères utilisée par la boîte de liste.

(Chercher "Le style LBS_MULTICOLUMN précise" pour trouver le passage pertinent du texte.)

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