Voir le flux RSS

Blog de Serge Girard (aka SergioMaster)

[FMX] ListBox et styles

Noter ce billet
par , 17/07/2019 à 11h17 (147 Affichages)
Je reviens un peu sur TListBox que j'avais largement laissé tomber au profit de TListView.
Ma première étape a été de revoir les styles d'items proposés en particulier colorlistboxitemstyle les autres étant plus aisé puisqu'il ne s'agit que de diverses variation avec une zone détail visible et des positions des textes.
Nom : Capture_1.PNG
Affichages : 563
Taille : 7,6 Ko
Bien sûr pour arriver à ce résultat il y a plusieurs manières de procéder, de plus en plus habitués à TListView j'ai d'abord tenté une approche à base de FindStyleResource mais, même si j'ai fini par y arrivé, force est de constater que ce n'était pas la bonne solution. Il m'a fallu relire mon propre tutoriel Introduction aux Styles Firemonkey pour me remettre dans la bonne direction.

Au cas où vous vous questionnerez sur la manière de faire pour le "coloriage" toute l'astuce réside dans l'utilisation de l'évènement de liste : OnFilledListItem
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure TForm1.FillListeFilledListItem(Sender: TObject;
  const AEditor: IBindListEditorItem);
var aItem : TListBoxItem;
begin
if AEditor.CurrentObject is TListBoxItem then
 begin
  AItem:=TListBoxItem(AEditor.CurrentObject);
  try
    AItem.StylesData['Color.Fill.Color']:=StringToAlphaColor(AItem.Text);
  except
    AItem.StylesData['Color.Fill.Color']:=TAlphaColors.null;
    AItem.StylesData['Color.Stroke.Color']:=TAlphaColors.null;
   end;
 end;
end;
Pour ce qui est du remplissage, j'ai utilisé un TProtypeBindSource pour obtenir toutes les couleurs répertoriées et bien sûr les LiveBindings

Nom : Capture_2.PNG
Affichages : 17
Taille : 42,5 Ko

Toutes les couleurs ? En fait, et c'est pour cela qu'il y a un bloc try except, il semblerait qu'il y ait un petit bogue dans le générateur car certains noms de couleurs sont inconnus : Cream,LegacySkyBlue, LtGray, MedGray sont ceux que j'ai relevés. Je me demande si ce petit bogue a été signalé .

Modifiez le bloc d'exception en AItem.SytlesData['Color.Visible']:=False; pour les mettre plus facilement en exergue.

Seconde étape, j'ai voulu personnaliser la présentation ce qui m'a fait prendre conscience du bond en avant de l'éditeur de style entre la version XE4 utilisée au cours de l'écriture du tutoriel déjà cité et la version Rio (10.3) que j'utilise actuellement, fini les manipulations "AFRO" évitant les crises de nerfs
Voilà donc le nouveau style que je vais appliquer
Nom : Capture_3.PNG
Affichages : 16
Taille : 17,2 Ko
J'ai modifié le type d'alignement aussi bien du rectangle (color), également relégué en arrière plan, ainsi que celui du texte (text) avant d'ajouter un autre TText pour afficher la valeur hexadécimale de la couleur (mettre la fonte en "courrier new" permet d'obtenir un meilleur rendu). Si dans mon style personnalisé j'ai utilisé comme propriété StyleName la valeur "hexvalue" ce n'est pas aussi anodin que cela le semble, le fait d'indiquer un nom de style permet ainsi d'utiliser StylesData

Il me suffira de deux étapes :
  1. Modifier le style par défaut (propriété DefaultItemStyle.ItemStyle);
  2. Changer légèrement le code pour affecter la nouvelle valeur

Code : 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
19
procedure TForm1.FillListeFilledListItem(Sender: TObject;
  const AEditor: IBindListEditorItem);
var aItem : TListBoxItem;
     color : TAlphaColor;
begin
if AEditor.CurrentObject is TListBoxItem then
 begin
  AItem:=TListBoxItem(AEditor.CurrentObject);
  try
    AItem.StylesData['Color.Fill.Color']:=StringToAlphaColor(AItem.Text);
    Color:=StringToAlphaColor(AItem.Text);
    AItem.StylesData['hexvalue']:=Format('#%x',[Color]);
  except
    AItem.StylesData['Color.Fill.Color']:=TAlphaColors.null;
    AItem.StylesData['Color.Stroke.Color']:=TAlphaColors.null;
    AItem.StylesData['hexvalue']:='unkwown';
   end;
 end;
end;
Nom : Capture.PNG
Affichages : 17
Taille : 16,1 Ko

Le résultat souhaité est bien obtenu, le seul hic concerne la couleur noire puisque le nom est invisible (noir sur noir = invisible ). Il y aurait certainement quelque chose de possible à faire au niveau du code sujet possible d'un futur billet.
Miniatures attachées Fichiers attachés

Envoyer le billet « [FMX] ListBox et styles » dans le blog Viadeo Envoyer le billet « [FMX] ListBox et styles » dans le blog Twitter Envoyer le billet « [FMX] ListBox et styles » dans le blog Google Envoyer le billet « [FMX] ListBox et styles » dans le blog Facebook Envoyer le billet « [FMX] ListBox et styles » dans le blog Digg Envoyer le billet « [FMX] ListBox et styles » dans le blog Delicious Envoyer le billet « [FMX] ListBox et styles » dans le blog MySpace Envoyer le billet « [FMX] ListBox et styles » dans le blog Yahoo

Tags: delphi, fmx, listes, styles
Catégories
Delphi , FMX

Commentaires