Bonjour,

j'ai un TListview en mode Icon dans lequel je veux ajouter un nouvel élément,
seulement j'observe des comportements que je ne comprends pas :


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
//CAS1
var
  item:TListItem;
begin
  item:=Listview.items.add;
  item.Caption:='Test';
end;
Dans ce cas-ci, RAS l'élément est bien ajouté au Listview et le libellé 'Test' apparaît bien.


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
//CAS2
var
  item:TListItem;
begin
  item:=TListItem.Create(ListView.Items);
  item.Caption:='Test';
  item.subitems.add('sub1');
  ListView.items.addItem(item);
end;
Dans ce cas-ci l'élément et son sous élément 'sub1', sont bien ajouté au Listview mais le libellé 'Test' n'apparaît pas, est-ce normal ?


Si je pousse un peu plus loin en ajoutant un gestionnaire CustomDrawItem que je debuggue, je m'aperçois que dans le CAS2 :
- Item.caption n'est pas vide , malgré qu'il ne soit pas affiché
- Item.caption peut être remplacé par une nouvelle valeur qui là s'affichera
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
procedure TfrmMain.listviewCustomDrawItem(Sender: TCustomListView;
  Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
var
  str:string;
begin
  //un test en debug m'indique bien que Item.caption est initialisé à 'Test' 
  //comme prévu pourtant le libellé ne s'affiche pas.
  //si j'affecte à Item.caption une autre valeur que 'Test' alors 
 //celle-ci s'affiche (?)
  item.Caption:='valeur';
end;

Vous y comprenez quelque chose ?

Etes-vous déjà arrivé à insérer un nouvel élément comme dans le cas 2 mais en ayant l'affichage du libellé de l'élément ?