IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

Blog de Serge Girard (aka SergioMaster)

[Dephi][VCL]Carnet de plongées : TControlList, Jour 2 - Première plongée.

Noter ce billet
par , 07/03/2021 à 15h32 (1698 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 : 33
Taille : 7,8 Ko
* 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 : 21
Taille : 27,0 Ko

À l'eau !

Nom : plongee1_r.PNG
Affichages : 20
Taille : 97,8 Ko

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 : 20
Taille : 1,3 Ko

Un petit exercice de vidage de masque au fond ? Oui, nous allons changer la propriété ColumnLayout de cltMultiTopToBottom à cltMultiLeftToRight.

Nom : Capture_.PNG
Affichages : 20
Taille : 61,0 Ko

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
Code delphi : Sélectionner tout - Visualiser dans une fenêtre à part
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;
Nom : Capture_.PNG
Affichages : 23
Taille : 40,3 Ko

Envoyer le billet « [Dephi][VCL]Carnet de plongées : TControlList, Jour 2 - Première plongée. » dans le blog Viadeo Envoyer le billet « [Dephi][VCL]Carnet de plongées : TControlList, Jour 2 - Première plongée. » dans le blog Twitter Envoyer le billet « [Dephi][VCL]Carnet de plongées : TControlList, Jour 2 - Première plongée. » dans le blog Google Envoyer le billet « [Dephi][VCL]Carnet de plongées : TControlList, Jour 2 - Première plongée. » dans le blog Facebook Envoyer le billet « [Dephi][VCL]Carnet de plongées : TControlList, Jour 2 - Première plongée. » dans le blog Digg Envoyer le billet « [Dephi][VCL]Carnet de plongées : TControlList, Jour 2 - Première plongée. » dans le blog Delicious Envoyer le billet « [Dephi][VCL]Carnet de plongées : TControlList, Jour 2 - Première plongée. » dans le blog MySpace Envoyer le billet « [Dephi][VCL]Carnet de plongées : TControlList, Jour 2 - Première plongée. » dans le blog Yahoo

Mis à jour 11/03/2021 à 14h40 par SergioMaster

Catégories
Programmation , Delphi

Commentaires