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 ImageListItemBottomDetail 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
    464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 464
    Billets dans le blog
    1
    Par défaut Remplir une listview ImageListItemBottomDetail par programmation
    Bonjour a tous,
    j'ai encore du mal a comprendre le remplissage des listview par programmation
    j'ai mis sur ma fiche un TImageList avec plusieurs images
    Ainsi qu'une ListView où je souhaite remplir l'image , le detail et text.
    Je ne peux utiliser de boucle
    A l’exécution les 2 items apparaissent mais sans texte et image.
    Voici le code de la fiche (j'ai remplacer par des XXX le code des images pb de droits)
    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    object Form_FEN_Horaires_TAB: TForm_FEN_Horaires_TAB
      Left = 0
      Top = 0
      BorderIcons = []
      Caption = 'CalHeb'
      ClientHeight = 536
      ClientWidth = 612
      Fill.Color = xFF4285F4
      Fill.Kind = Solid
      FormFactor.Width = 320
      FormFactor.Height = 480
      FormFactor.Devices = [Desktop]
      OnShow = FormShow
      DesignerMasterStyle = 3
      object ListView2: TListView
        ItemAppearanceClassName = 'TImageListItemBottomDetailAppearance'
        ItemEditAppearanceClassName = 'TImageListItemBottomDetailShowCheckAppearance'
        HeaderAppearanceClassName = 'TListHeaderObjects'
        FooterAppearanceClassName = 'TListHeaderObjects'
        Anchors = []
        Position.X = 25.000000000000000000
        Position.Y = 129.000000000000000000
        Size.Width = 300.000000000000000000
        Size.Height = 305.000000000000000000
        Size.PlatformDefault = False
        TabOrder = 0
      end
      object Label1: TLabel
        Position.X = 136.000000000000000000
        Position.Y = 40.000000000000000000
        Text = 'Label1'
        TabOrder = 2
      end
      object Label2: TLabel
        Position.X = 136.000000000000000000
        Position.Y = 72.000000000000000000
        Text = 'Label2'
        TabOrder = 3
      end
      object Label3: TLabel
        Position.X = 136.000000000000000000
        Position.Y = 96.000000000000000000
        Text = 'Label3'
        TabOrder = 4
      end
      object ImageList1: TImageList
        Source = <
          item
            MultiResBitmap.Height = 51
            MultiResBitmap.Width = 68
            MultiResBitmap.LoadSize = 0
            MultiResBitmap = <
              item
                Width = 68
                Height = 51
                PNG = {
                  XXX}
                FileName = 'E:\DELPHI\CalHeb_Delphi\ImagesList\coucher_du_soleil.jpg'
              end>
            Name = 'coucher_du_soleil'
          end
          item
            MultiResBitmap.Height = 53
            MultiResBitmap.Width = 68
            MultiResBitmap.LoadSize = 0
            MultiResBitmap = <
              item
                Width = 68
                Height = 53
                PNG = {
                  XXX}
                FileName = 'E:\DELPHI\CalHeb_Delphi\ImagesList\corban.png'
              end>
            Name = 'corban'
          end
          item
            MultiResBitmap.Height = 68
            MultiResBitmap.Width = 68
            MultiResBitmap.LoadSize = 0
            MultiResBitmap = <
              item
                Width = 68
                Height = 68
                PNG = {
    XXX}
                FileName = 'E:\DELPHI\CalHeb_Delphi\ImagesList\FLS12460.png'
              end>
            Name = 'Time'
          end
          item
            MultiResBitmap = <
              item
                Width = 68
                Height = 45
                PNG = {
    XXX}
                FileName = 'E:\DELPHI\CalHeb_Delphi\ImagesList\midi.jpg'
              end>
            Name = 'midi'
          end
          item
            MultiResBitmap = <
              item
                Width = 68
                Height = 46
                PNG = {
    XXX}
                FileName = 'E:\DELPHI\CalHeb_Delphi\ImagesList\Lever_du_soleil.jpg'
              end>
            Name = 'Lever_du_soleil'
          end
          item
            Layers = <
              item
                Name = 'coucher_du_soleil'
                SourceRect.Right = 68.000000000000000000
                SourceRect.Bottom = 51.000000000000000000
              end>
          end
          item
            Layers = <
              item
                Name = 'midi'
                SourceRect.Right = 68.000000000000000000
                SourceRect.Bottom = 45.000000000000000000
              end>
          end
          item
            Layers = <
              item
                Name = 'Lever_du_soleil'
                SourceRect.Right = 68.000000000000000000
                SourceRect.Bottom = 46.000000000000000000
              end>
          end
        Left = 336
        Top = 40
      end
    end
    voici le code pascal ici dans un onform mais j'ai aussi essayer dans un oncreate
    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
     
    unit FEN_Horaires_TAB;
     
    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,
      System.ImageList, FMX.ImgList, FMX.Controls.Presentation, FMX.StdCtrls,
      FMX.ListView;
     
    type
      TForm_FEN_Horaires_TAB = class(TForm)
        ListView2: TListView;
        Label1: TLabel;
        Label2: TLabel;
        Label3: TLabel;
        ImageList1: TImageList;
        procedure FormShow(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form_FEN_Horaires_TAB: TForm_FEN_Horaires_TAB;
     
    implementation
     
    {$R *.fmx}
     
    procedure TForm_FEN_Horaires_TAB.FormShow(Sender: TObject);
    var
      sJour: string;
      LItem: TListViewItem;
      AListItemBitmap: TListItemImage;
      AListItemText: TListItemText;
     
    begin
      sJour := '1255';
      // début programme
      // affichage de la listview
      ListView2.BeginUpdate;
      // style non appliqué dans oncreate
      ListView2.ApplyStyleLookup;
      // efface la liste
      ListView2.Items.Clear;
      // ajoute un item a la liste
      LItem := ListView2.Items.Add;
      AListItemBitmap := LItem.Objects.FindObjectT<TListItemImage>('Image');
      AListItemText := LItem.Objects.FindObjectT<TListItemText>('Detail');
      if Assigned(AListItemBitmap) AND Assigned(AListItemText) then
      begin
        AListItemText.Text := 'premiere image :';
        AListItemBitmap.ImageIndex := 1;
      end;
      LItem := ListView2.Items.Add;
      AListItemBitmap := LItem.Objects.FindObjectT<TListItemImage>('Image');
      AListItemText := LItem.Objects.FindObjectT<TListItemText>('Detail');
      if Assigned(AListItemBitmap) AND Assigned(AListItemText) then
      begin
        AListItemText.Text := 'deuxieme image :';
        AListItemBitmap.ImageIndex := 2;
      end;
     
      ListView2.EndUpdate;
     
    end;
     
    end.
    Pour information je suis en delphi 10.3.3 community
    Si je suis obligé a chaque fois de demander de l'aide pour un truc qui a l'air si simple
    Je crois que je vais essayer de trouver un autre langage que Delphi.

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 663
    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 663
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    Avec tout ce que j'ai écrit sur lesTListVieww vous ne serez pas étonné si je dis que je n'aurais pas fait de cette manière.

    Cependant tout dépend du contexte est-ce que l'on a ici un remplissage partiel d'un ensemble de données plus étoffé ? et quel sera la source de ces données (table d'une base de données, fichier texte etc...)
    Une solution que j'aurais préconisé : moins de code plus de Livebinding c'est là pour ça
    par exemple en utilisant un TProtypebindsource comme indiqué dans ce tutoriel https://serge-girard.developpez.com/...tviewImage/#LI
    Je suis sûr d'avoir une autre démonstration (une liste avec des petits personnages) quelque part mais à l'instant <T> je ne remets pas la main dessus ( Aloïs quand tu me tutoies)
    Cela m'a fait voir que j'avais oublié de mettre des mots clés dans beaucoup de mes billets blog (une tâche pour samedi)

    Pourquoi un PrototypeBindSource ? Cela aurait l'avantage de mettre la partie données dans une unité "à part" (datamodule)

    Pour en revenir au code indiqué de but en blanc j'écrirais que l'utilisation des findobjects est de trop, toujours sans tester, le temps que le café du matin fasse son effet j'aurais tenté un simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    with  ListView2.Items.Add do
     begin
       Text:='premiere image :';
       Detail:='Lever du soleil';
       ImageIndex:=0;
     end;
    et voilà, le café ayant fait son oeuvre
    Nom : Capture.PNG
Affichages : 217
Taille : 23,4 Ko

    l'utilisation des Objects.FindObjectT<T> est à garder pour des items d'apparence dynamique (c'est le piège)

  3. #3
    Membre émérite

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

    Informations forums :
    Inscription : Juillet 2011
    Messages : 464
    Billets dans le blog
    1
    Par défaut
    Merci SergioMaster,
    Pour répondre à ta question,
    J'ai l'intention de remplir la listeview avec une vingtaine d'horaires calculés.
    Il n'y a donc pas de base de données.
    Les calculs se font selon une géolocalisation, timezone
    Etc.
    Mon algorithmes existe déjà dans un autre language.
    Je ne pense pas qu'un livebinding puisse être utilisé dans ce cas.
    Je vais tester ton code et je reviens vers vous.

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 663
    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 663
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    une vingtaine d'horaires, raison de plus.

    Il n'y a donc pas de base de données.
    Donc comme dans ce tutoriel, une fois pigé c'est facile

    Les seuls trucs où j'hésite, fonction de ce qui est voulu c'est si les calculs peuvent se faire directement (par customformat) ou via une fonction "objet" (comme dans le chapitre IV-C)

    Si les calculs sont de ce calibre (http://www.softrun.fr/index.php/base...cher-du-soleil) une fonction semble de rigueur

  5. #5
    Membre émérite

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

    Informations forums :
    Inscription : Juillet 2011
    Messages : 464
    Billets dans le blog
    1
    Par défaut
    Salut @sergiomaster,
    Merci pour les informations.

    Juste une question sur ton tutoriel
    A quoi sert le exit dans cette ligne par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Exit(Format('%d Jours',[DaysBetween(uneDate,Date)]));
    Pour ce qui est des horaires, ils ressemblent bien aux calculs de lever et coucher du Soleil a ceci près que le ho est différent a chaque fois et que le lien que tu as fourni ne tient pas compte des latitudes proche des pôles où les horaires peuvent durer jusqu'à 6 mois.

    Je n'ai pas encore eu le temps de revoir mon code.

    Je me répond à moi même
    Exit depuis la version 2009 accepte un paramètre donnant un résultat c'est une sorte de renvoi
    Désolé, j'avais pas lu l'aide.

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 663
    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 663
    Billets dans le blog
    65
    Par défaut
    Citation Envoyé par popoy Voir le message
    Juste une question sur ton tutoriel
    A quoi sert le exit dans cette ligne par exemple :
    Exit(Format('%d Jours',[DaysBetween(uneDate,Date)]));
    cela m'évite d'écrire result:=Format('%d Jours',[DaysBetween(uneDate,Date)]; mais c'est la même chose

    ho est différent a chaque fois
    le H0 est calculé dans le lien cité

    ne tient pas compte des latitudes proche des pôles
    bon, là, je n'en sais rien, j'ai juste fait une "pré"-recherche sur la fonction de calcul que tu pouvais utiliser

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

Discussions similaires

  1. Remplir Une ListView DynamicAppearance par programmation
    Par popoy dans le forum Composants FMX
    Réponses: 19
    Dernier message: 16/08/2021, 09h59
  2. [WD14] remplir une Table Fichier par programmation
    Par burndev dans le forum WinDev
    Réponses: 3
    Dernier message: 14/08/2009, 17h16
  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