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 :

Remplir Une ListView DynamicAppearance par programmation


Sujet :

Composants FMX Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite

    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    457
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 457
    Billets dans le blog
    1
    Par défaut Remplir Une ListView DynamicAppearance par programmation
    Bonjour,
    j'ai une TListView nommé ListView1
    avec le paramètre ItemAppearance en DynamicAppearance
    qui contient 4 Text nommé 'Text1', 'Text2' 'Text3' 'Text4'
    j'aimerais remplir la liste avec 2 item par programmation
    Le premier item avec
    'ListView1_Item1_Text1';
    'ListView1_Item1_Text2';
    'ListView1_Item1_Text3';
    'ListView1_Item1_Text4';
    Le deuxième avec
    'ListView1_Item2_Text1';
    'ListView1_Item2_Text2';
    'ListView1_Item2_Text3';
    'ListView1_Item2_Text4';

    Je pensais que c’était simple mais je bloque après l'ajout de l'item
    J'ai bien sur (mal) cherché sur internet et la doc mais je n'ai pas trouvé.
    Comment affecter un string a un "champ" text de la ListView?

    Voici un résumé du Code du Form
    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
     
    object Form1: TForm1
      Caption = 'Form1'
      object ListView1: TListView
        ItemAppearanceClassName = 'TDynamicAppearance'
        ItemAppearanceObjects.ItemObjects.ObjectsCollection = <
          item
            AppearanceObjectName = 'Text1'
          end
          item
            AppearanceObjectName = 'Text2'
          end
          item
            AppearanceObjectName = 'Text3'
          end
          item
            AppearanceObjectName = 'Text4'
          end>
      end
    end
    ET LE CODE ACTUEL DE L’UNITÉ
    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
     
    unit Unit1;
    interface
    uses
      System.SysUtils, System.Types, System.UITypes, System.Classes,
      System.Variants,
      FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
      FMX.ListView.Types, FMX.ListView.Appearances, FMX.ListView.Adapters.Base,
      FMX.ListView;
    type
      TForm1 = class(TForm)
        ListView1: TListView;
        procedure FormCreate(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
    var
      Form1: TForm1;
    implementation
    {$R *.fmx}
    procedure TForm1.FormCreate(Sender: TObject);
    var
      i: integer;
    begin
      for i := 0 to 1 do
      begin
        ListView1.Items.Add();
        //et là je bloque
        // ListView1.Item.Text1 := 'ListView1_Item1_Text1';
        // ListView1.Item.Text2 := 'ListView1_Item1_Text2';
        // ListView1.Item.Text3 := 'ListView1_Item1_Text3';
        // ListView1.Item.Text4 := 'ListView1_Item1_Text4';
      end;
    end;
    end.
    Merci d'avance de votre aide.

  2. #2
    Membre Expert
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 539
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 539
    Billets dans le blog
    10
    Par défaut Une réponse possible
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      with ListView1.items.Add do Text := 'a' ;

  3. #3
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par défaut
    N'est-ce pas dans la documentation : FMX.ListView.TListView ?

    Exemple
    Vous pouvez ajouter des éléments à TListView par la liaison à une source de données ou par code (TListView.Items.Add).

    Voici un exemple de code montrant comment ajouter des éléments à une TListView :

    Delphi :

    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
    var
      LItem: TListViewItem;
      I: Integer;
    begin
      for I := 1 to 10 do
      begin
        LItem := ListView1.Items.Add;
        LItem.Text := IntToStr(I); 
     end;
    end;
     
    // To achieve the best performance use BeginUpdate and EndUpdate.
     
    var
      LItem: TListViewItem;
      I: Integer;
    begin
      ListView1.BeginUpdate;
      try
        for I := 1 to 10 do
        begin
          LItem := ListView1.Items.Add;
          LItem.Text := IntToStr(I);
        end;
      finally
        ListView1.EndUpdate;
      end;
    end;


    C'est un bon début pour avoir des Items mais vous semblez vous ajouter des colonnes ?
    Il faut donc créer manuellement des TTextObjectAppearance et voir comment jouer avec TListViewItem.Objects.AccessoryObject
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  4. #4
    Membre émérite

    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    457
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 457
    Billets dans le blog
    1
    Par défaut
    Merci ALWEBER et ShaiLeTrol
    ShaiLeTroll c'est la seule page d'exemple que j'avais trouvé avant de poster ma question.
    Je dois être idiot, car je n'ai pas réussi à l'adapter à mon cas.
    dois-je mettre 4 LItem.Text := ' ';?
    dois-je faire LItem.Text[J] := ' '; où J est un entier de 0 à 3?
    dois-t-on faire un fieldbyname ?
    J'avoue que je suis perdu.

  5. #5
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par défaut
    Voir le tutoriel FMX : TListView, apparence dynamique et image

    Si tu as déjà défini Text1 à Text4 en ajoutant les TTextObjectAppearance a ton TListView

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var
      LItem: TListViewItem;
    begin 
       LItem := ListView1.Items.Add; 
       LItem.Objects.FindObjectT<TListItemText>('Text1').Text := 'Text1';
       LItem.Objects.FindObjectT<TListItemText>('Text2').Text := 'Text2';
       LItem.Objects.FindObjectT<TListItemText>('Text3').Text := 'Text3';
       LItem.Objects.FindObjectT<TListItemText>('Text4').Text := 'Text4';   
    end;
    ou encore

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    var
      LItem: TListViewItem;
    begin 
       LItem := ListView1.Items.Add; 
       Listview1.Items.AppearanceItem[LItem.Index].Data['Text1'] := 'Text1';
       Listview1.Items.AppearanceItem[LItem.Index].Data['Text2'] := 'Text2';
       Listview1.Items.AppearanceItem[LItem.Index].Data['Text3'] := 'Text3';
       Listview1.Items.AppearanceItem[LItem.Index].Data['Text4'] := 'Text4';  
    end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  6. #6
    Membre émérite

    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    457
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 457
    Billets dans le blog
    1
    Par défaut Toujours pas
    Voici ce que j'ai essayé sur la community 10.3.3
    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
     
    procedure TForm1.FormCreate(Sender: TObject);
    var
      i: integer;
      LItem: TListViewItem;
      AListItemText : TListItemText;
    begin
      for i := 0 to 1 do
      begin
        ListView1.Items.Add();
        // ListView1.Item1.Text1
        AListItemText:=LItem.Objects.FindObjectT<TListItemText>('Text1');
        AListItemText.Text := 'ListView1_Item1_Text1';
        // ListView1.Item1.Text2
        AListItemText:=LItem.Objects.FindObjectT<TListItemText>('Text2');
        AListItemText.Text := 'ListView1_Item1_Text2';
        //ListView1.Item1.Text3
        AListItemText:=LItem.Objects.FindObjectT<TListItemText>('Text3');
        AListItemText.Text := 'ListView1_Item1_Text3';
        // ListView1.Item1.Text4
        AListItemText:=LItem.Objects.FindObjectT<TListItemText>('Text4');
        AListItemText.Text := 'ListView1_Item1_Text4';
      end;
    end;
    Cela me provoque une Erreur sur Windows 10
    L'instruction 0x0000000000098911 emploie l'adresse mémoire 0x0000000044200000.
    L'état de la mémoire ne peut pas être read.

    En plus le tutoriel indique que FindObjectT est Obsolète.
    Donc merci de me mettre sur la bonne voie.

  7. #7
    Membre émérite

    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    457
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 457
    Billets dans le blog
    1
    Par défaut Ca y est
    Merci ShaiLeTroll
    Ta réponse c’était croisé avec la mienne
    Comment tu as trouvé [LItem.Index].Data['Text1'] ?

  8. #8
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 598
    Billets dans le blog
    65
    Par défaut
    Bonjour
    Citation Envoyé par popoy Voir le message
    En plus le tutoriel indique que FindObjectT est Obsolète.
    Mal lu, j'indique que FindObject est obsolète et doit être remplacée par FindDrawable ou FindObjectT<T>

    Je suis moins "chaud" pour l'utilisation de AppearanceItem[LItem.Index].Data['Text1'] car cela ne peut s'appliquer qu'à des objets text et uniquement sur la propriété text.
    Il y a aussi d'autres contre indications pour cette utilisation, mais je n'en ai plus une souvenance exacte, il faudrait en retrouver la trace dans mes divers posts (section FMX) ou billets blog.

    C'est un chapitre , ou, pour être plus exact un futur chapitre d'un fasicule, en cours de rédaction, que je suis en train d'écrire sur les styles. De même qu'il y en a un de prévu sur les Listes (listbox/listview). Pour tout écrire, je pensais utiliser une heure ou deux par jour durant mes vacances, l'oubli de mon transfo et une connexion internet faible m'ont fait rennoncer

  9. #9
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par défaut
    Citation Envoyé par popoy Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     ListView1.Items.Add();
        // ListView1.Item1.Text1
        AListItemText:=LItem.Objects.FindObjectT<TListItemText>('Text1');
        ...
    Cela me provoque une Erreur sur Windows 10
    L'instruction 0x0000000000098911 emploie l'adresse mémoire 0x0000000044200000.
    L'état de la mémoire ne peut pas être read.
    Normal, faut récupérer le résultat du Add
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LItem := ListView1.Items.Add();
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. [WD14] remplir une Table Fichier par programmation
    Par burndev dans le forum WinDev
    Réponses: 3
    Dernier message: 14/08/2009, 17h16
  2. onchange d'une zone remplie par programmation
    Par japz dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 30/05/2006, 13h58
  3. [Interbase]Comment créer une source ODBC par programme ?
    Par touhami dans le forum Bases de données
    Réponses: 1
    Dernier message: 13/03/2006, 16h40
  4. [VBA-Excel]Problème pour remplir une listview
    Par Le Djé dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 29/01/2006, 16h27
  5. Remplir une ListView avec une BD
    Par manikou dans le forum MFC
    Réponses: 1
    Dernier message: 17/05/2005, 09h48

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