par , 13/04/2018 à 09h59 (1639 Affichages)
Cette histoire de manipulation des éléments de type Footer à remonter, que je qualifiais de non académique, ma laissait un goût légèrement amer.
Ce matin, éclair de génie (toute modestie mise à part ), je me suis posé la question : 'Et si je pouvais changer le propos (purpose) de l'élément créé ?'
Tout se joue effectivement lors de l'événement OnFilledListItem
Petit rappel du code, j'ai mis en rouge la partie ajout d'un pied de groupe.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| procedure TForm15.LinkListControlToField1FilledListItem(Sender: TObject;
const AEditor: IBindListEditorItem);
// le remplissage d'un item est fini
var AnItem : TListViewItem;
...
begin
AnItem:=AEditor.CurrentObject as TListViewItem;
if (AnItem.Purpose=TListItemPurpose.Header) then
begin
// Ajout du Pied de Groupe si ce n'est pas le premier groupe
if (AnItem.Index>1) then
begin
with ListView1.Items.Add do
begin
Text := AnItem.text;
Purpose := TListItemPurpose.Header;
end;
AnItem.Text:=Format('Total %s %3.2f',[Customer,Cumul]);
// cet item devra être déplacé vers le haut
end;
Cumul:=0;
end
else begin
// Ajout des libellés fixes
...
// Gestion de la couleur ---------------------------------------------
...
end;
// ----------------------------------------------------------
// Cumuls
...
end;
end; |
Cet ajout positionne sous l'élément en cours, l'élément créé à la volée, impossible de le mettre au-dessus du moins à mes tentatives infructueuses ! D'où la "remontée" à postériori de ces éléments
Le déclic de ce matin rend les choses plus simples :
Voici le code (en vert, ce qui change)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| procedure TForm15.LinkListControlToField1FilledListItem(Sender: TObject;
const AEditor: IBindListEditorItem);
// le remplissage d'un item est fini
var AnItem : TListViewItem;
...
begin
AnItem:=AEditor.CurrentObject as TListViewItem;
if (AnItem.Purpose=TListItemPurpose.Header) then
begin
// Ajout du Pied de Groupe si ce n'est pas le premier groupe
if (AnItem.Index>1) then
begin
with ListView1.Items.Add do // création, à la volée, en dessous
begin
// même texte
Text := AnItem.text;
Purpose := TListItemPurpose.Header;
end;
// texte du Pied de groupe
AnItem.Text:=Format('Total %s %3.2f',[Customer,Cumul]);
AnItem.Purpose:=TListItemPurpose.Footer; // changement du "propos"
end;
Cumul:=0;
end
else begin
// Ajout des libellés fixes
...
// Gestion de la couleur ---------------------------------------------
...
// Cumuls
...
end;
end; |