par , 07/03/2021 à 15h32 (2634 Affichages)
Ce billet fait suite à :
https://www.developpez.net/forums/bl...-1-decouverte/
https://www.developpez.net/forums/bl...ist-1-d-apnee/
Il est temps de capeler nos scaphandres autonomes (pour les néophytes : nos bouteilles d'air comprimés, surtout pas d'oxygène comme le pérore certains journalistes peu au fait). Cette plongée peu profonde, pour se mettre en jambes, ne nécessitera pas de paliers de décompression.
Pour cette première sortie, l'étude de la propriété ColumnLayout du composant. Par défaut cette propriété a la valeur cltSingle qui, vous l'avez déjà constaté, permet de faire d'un élément de la liste, une colonne. Toutefois, cette propriété peut aussi avoir les valeurs cltMultiTopToBottom et cltMultiLeftToRight. Dans ce cas, cette propriété va, associée avec la propriété ItemWidth d'une valeur différente de zéro, nous présenter des colonnes.
Quelques ajustements au masque (l'interface utilisateur). Par rapport à la précédente, je retire le Label2 qui contenait la description (Notes).
![Nom : CaptureSpot1_p1.PNG
Affichages : 156
Taille : 7,8 Ko](https://www.developpez.net/forums/attachment.php?attachmentid=592768&d=1615124589)
* La propriété IndexFieldNames, de valeur Common_Name, nous permettra de voir comment est remplie la liste en fonction de l'ordre alphabétique
Équipé ?
![Nom : plongee1_d.PNG
Affichages : 310
Taille : 27,0 Ko](https://www.developpez.net/forums/attachment.php?attachmentid=592769&d=1615124906)
À l'eau !
![Nom : plongee1_r.PNG
Affichages : 371
Taille : 97,8 Ko](https://www.developpez.net/forums/attachment.php?attachmentid=592770&d=1615124980)
Vous remarquerez que la liste répond parfaitement aux sollicitations d'agrandissement de taille de fenêtre.
Le remplissage se fait donc de gauche à droite puis de haut en bas tel le schéma suivant
![Nom : Capture.PNG
Affichages : 136
Taille : 1,3 Ko](https://www.developpez.net/forums/attachment.php?attachmentid=592773&d=1615125590)
Un petit exercice de vidage de masque au fond ? Oui, nous allons changer la propriété ColumnLayout de cltMultiTopToBottom à cltMultiLeftToRight.
![Nom : Capture_.PNG
Affichages : 128
Taille : 61,0 Ko](https://www.developpez.net/forums/attachment.php?attachmentid=592774&d=1615126026)
Au premier coup d’œil : la barre de défilement se retrouve en bas. Cependant, ce n'est pas tout, si vous vous promenez un peu (en retaillant la fenêtre), vous vous apercevrez que cela se passe moins bien qu'auparavant : le nombre de colonnes est de six
pourquoi 6
, quant à la barre de défilement en bas personnellement je ne trouve pas ça attrayant.
Un petit débriefing après la sortie de l'eau.
Pour le mystère du nombre de colonnes dans le cas d'un ColumnLayout à cltMultiLeftToRight il faut aller voir dans les sources la méthode de calcul adoptée, il y a là un test qui force le nombre de colonnes au nombres de colonnes calculées selon la formule (en simplifiant)Largeur du TControlList divisé par ItemWidth auquel on ajoute deux
. Ok, cela force l'apparition de la barre de défilement du bas mais pourquoi 2 et pas 1 ou 3, pourquoi dans ce cas ce calcul ne se refait pas en cas de changement de largeur du composant (le calcul à l'air de ne se faire qu'à la création de la fenêtre.
Nous sommes peut-être tombé dans petit trouble (bogue) telle une résurgence d'eau douce dans ces eaux maritimes si limpides. Il aurait peut-être été intéressant d'avoir une propriété ColumnNumber.
Je m'excuse d'avoir dû vous faire remonter en surface (recompiler) pour vous montrer la différence entre les deux présentations. J'aurai peut-être pu faire en sorte d'ajouter une boite de choix et de programmer le changement au fond (au runtime). Considérez que ce n'est encore qu'une plongée "vacance"
(no code ce que tout plongeur professionnel traduirait par "le moins d'effort possible")
Je ne voulais pas rester sur la dernière petite note négative aussi, rapidement, j'ai ajouté un Combobox pour pouvoir sélectionner la valeur de la propriété et, un peu de code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| procedure TForm1.ComboBox1Change(Sender: TObject);
// Changement de masque
begin
case Combobox1.ItemIndex of
0 : begin
ControlList1.ColumnLayout:=cltSingle;
ControlList1.ItemWidth:=0; // toute la liste
end;
1 : begin
ControlList1.ColumnLayout:=cltMultiTopToBottom;
ControlList1.ItemWidth:=150;
end;
2 : begin
ControlList1.ColumnLayout:=cltMultiLeftToRight;
ControlList1.ItemWidth:=150;
end;
end;
end; |