IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants FMX Delphi Discussion :

Listview, ajouter des Footers par groupe


Sujet :

Composants FMX Delphi

  1. #1
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 952
    Points
    40 952
    Billets dans le blog
    62
    Par défaut Listview, ajouter des Footers par groupe
    Bonjour,

    Un TListWiew propose un Header et un Footer pour chaque Item ou groupe d'item ce qui permet, par exemple, de faire des listes classées en ordre alphabétiques avec, en Header, la première lettre.
    Ok, ça avec les livebindings c'est relativement aisé, il y a plusieurs exemples de répertoires sur le net et voici, avec des données disons "aléatoires" une image de ce que je veux exprimer.
    Nom : Capture.PNG
Affichages : 768
Taille : 6,9 Ko
    Je me suis penché sur les Footers en effet, j'aimerais bien avoir le cumul pour chaque groupe et ce, en bas du groupe. Mais, il n'y a aucun moyen de le faire via livebindings à ma connaissance
    Comme vous pourrez le remarquer j'ai réussi à mettre un Footer (en rose) tous les 5 items et ce de la manière suivante
    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
    procedure TForm13.FormCreate(Sender: TObject);
    begin
    i:=1;
    end;
     
    procedure TForm13.LinkListControlToField1FillingListItem(Sender: TObject;
      const AEditor: IBindListEditorItem);
    begin
     begin
      with ListView1.Items.Add do
        begin
          Text := Format('footer %s',['mmmm']);
          Purpose := TListItemPurpose.Footer;
        end;
       i:=1;
     end
    else inc(i);
    end;
    Bien évidemment ce n'est pas ce qu'il me faut puisque ce que je voudrai c'est bien tester sur la première lettre de ma donnée (dans mon image des noms de couleurs)

    La question est là ! Comment obtenir cette valeur dans l'évènement ?
    pour l'instant j'ai , à partir de AEditor :
    un purpose qui pourrait, à l'occasion, me permettre de savoir s'il s'agit d'un header ou pas,
    un CurrentIndex qui me permettrait de vérifier qu'il ne s'agit pas du premier groupe,
    une possibilité de transtyper AEditor en TListViewItem
    Je ne dois donc pas être très loin de la solution mais ... je vois pas
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 952
    Points
    40 952
    Billets dans le blog
    62
    Par défaut
    Pour info, je suis allé un peu plus loin.
    J'ai bien l'obtention de mes données en utilisant soit AnItem.Text soit en cas de liste customisée AnItem.Data['Text1'].asString (en cas de ListView avec des items dynamiques)

    reste un problème, l'événement à utiliser !
    FillingListItem - les données ne sont pas encore renseignées
    FilledListItem - Trop tard, si j'ajoute le Pied il ne se trouve pas au bon endroit, mais sous l'item rempli !

    voilà où j'en suis !
    Nom : Capture.PNG
Affichages : 685
Taille : 8,9 Ko

    Donc, maintenant, la question est de savoir comment "remonter" un Item de liste ?
    J'ai essayé un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     if (AEditor.CurrentIndex>0)  then
        with ListView1.Items.Insert(AEditor.CurrentIndex)  do
        begin
          Text := Format('PIED %d',[i]);
          Purpose := TListItemPurpose.Footer;
         end;
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 661
    Points : 3 630
    Points
    3 630
    Billets dans le blog
    2
    Par défaut
    Bonjour Sergio,

    As tu essayé avec la méthode Exchange du TListview ? (pour échanger 2 items).
    Mon site - Mes tutoriels - GitHub - N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 952
    Points
    40 952
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Non, je ne connaissais même pas cette possibilité je vais tenter le coup dès que j'ai le temps

    [Edit]
    Bon, soit c'est une fausse piste, soit je ne sais pas m'en servir
    j'ai écrit ListView1.exchange(TFMxObject(ItemHeader), TFMXObject(ItemFooter)) non concluant rien n'a changé
    peut être faut-il que je le fasse une fois la liste remplie ? la suite après le prochain test
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 952
    Points
    40 952
    Billets dans le blog
    62
    Par défaut Suite et Fin
    J'ai fini par atteindre l'objectif en procédant en deux temps.

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    ...
    public 
      i : integer; 
    ....
     
    procedure TForm13.LinkListControlToField1FilledList(Sender: TObject);
    var Pied,Temp : TListViewItem;
        texte : String;
        Li : integer;
    begin
       // remonter les pieds créés au dessus des Header 
       for Li := 1 to ListView1.ItemCount-1 do
         begin
           if ListView1.Items[Li].Purpose=TListItemPurpose.Footer then
             begin
               Pied:=ListView1.Items[Li];
               Texte:=Pied.Text;
               ListView1.Items.Delete(Li);
               with ListView1.Items.Insert(Li-1) do 
                 begin
                   Text := Texte;
                   Purpose := TListItemPurpose.Footer;
                 end;
             end;
         end;
       // dernier item de liste 
       with ListView1.Items.Add do
        begin
          Text := Format('FIN PIED %d',[i]);
          Purpose := TListItemPurpose.Footer;
        end;
    end;
     
    procedure TForm13.LinkListControlToField1FilledListItem(Sender: TObject;
      const AEditor: IBindListEditorItem);
    var AnItem, FItem : TListViewItem;
    begin
    AnItem:=AEditor.CurrentObject as TListViewItem;
    if (AnItem.Purpose=TListItemPurpose.Header) then
     begin
      if (ListView1.ItemCount>1)  then
       begin
          with ListView1.Items.Add do
          begin
           Text := Format('PIED %d',[i]);
           Purpose := TListItemPurpose.Footer;
           // il faudra le remonter une fois la liste pleine!
         end;
       end;
      i:=0;
     end
     else  i:=i+StrToInt(AnItem.Data['Text2'].AsString);
    end;
    ce n'est certes pas très "académique" mais le résultat est là
    Nom : Capture.PNG
Affichages : 679
Taille : 4,4 Ko
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 952
    Points
    40 952
    Billets dans le blog
    62
    Par défaut Votre avis
    A vôtre avis, pour la postérité (ou plutôt le partage, ayons pitié de mes chevilles ) de cette trouvaille :
    cela mérite un billet dans mon blog ou un petit tutoriel ?
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  7. #7
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 664
    Points : 6 967
    Points
    6 967
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    A vôtre avis, pour la postérité (ou plutôt le partage, ayons pitié de mes chevilles ) de cette trouvaille :
    cela mérite un billet dans mon blog ou un petit tutoriel ?
    Je suis pour.

    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  8. #8
    Membre éprouvé
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Points : 1 072
    Points
    1 072
    Par défaut
    Bonjour,

    idem, je pense que ce sera utile à plus d'un

    Cordialement,
    @+

  9. #9
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 661
    Points : 3 630
    Points
    3 630
    Billets dans le blog
    2
    Par défaut
    Bonne idée un petit tuto
    Mon site - Mes tutoriels - GitHub - N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  10. #10
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 952
    Points
    40 952
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    en attendant une version définitive je vous propose d'aller voir par vous même un premier jus dans mon blog
    J'y attend vos commentaires/ suggestions etc..
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Tree control : Ajouter des noeuds par script AS3
    Par TheDrev dans le forum ActionScript 3
    Réponses: 0
    Dernier message: 01/05/2009, 10h01
  2. Comment ajouter des composants par un click ?
    Par haraelendil dans le forum Composants
    Réponses: 11
    Dernier message: 18/08/2008, 18h49
  3. Réponses: 3
    Dernier message: 29/01/2008, 08h48
  4. ListView > Ajouter des titres
    Par xela dans le forum C++Builder
    Réponses: 1
    Dernier message: 22/05/2007, 17h35
  5. Réponses: 2
    Dernier message: 07/08/2006, 16h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo