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 :

Equivalent de (l'ancien) Tlistview


Sujet :

Composants FMX Delphi

  1. #1
    Débutant
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    886
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 886
    Points : 330
    Points
    330
    Par défaut Equivalent de (l'ancien) Tlistview
    bonjour
    j'aimerais afficher des donnés dans une sorte de tableau à plusieurs colonnes
    sous delphi 7 j'utilisais le Tlistview, en mode vreport
    on dirait que le Tlistview fonctionne différemment sous firemonkey ? je n'ai pas réussi à trouver le même mode que sous delphi 7 et lors d'un essaie (avec une seule colonne) il y a une flèche au bout de chaque item, comme pour dire qu'en cliquant, un détail pourrait s'afficher
    une idée svp ?

  2. #2
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 611
    Points
    3 611
    Par défaut
    Le TListView de FMX est calqué sur le fonctionnement des listes sur les OS mobiles.

    Il est entièrement personnalisable (même si c'est un peu complexe selon ce qu'on veut faire).

    Si tu as juste besoin d'un tableau c'est le TGrid ou TStringGrid qu'il faut utiliser.

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    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 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    J'en ai pourtant écrit pas mal sur les ListView entre les billets sur mon blog (utiliser la recherche par tag listview)
    et les tutoriels (4) articles
    Il n'y a pas quelques trucs que j'ai pu trouver sur les headers mais eux aussi sont légèrement personnalisables
    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

  4. #4
    Débutant
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    886
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 886
    Points : 330
    Points
    330
    Par défaut
    bonjour,

    veuillez excuser mon absence
    en fait avec D7 j'avais l'habitude des Tlistview, pratique et présentable, j'aimerais donc continuer avec firemonkey

    pour illustrer mon besoin, j'aimerais les afficher ainsi : https://softwareonastring.com/179/ho...ues-in-columns

    merci

  5. #5
    Débutant
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    886
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 886
    Points : 330
    Points
    330
    Par défaut
    Citation Envoyé par pprem Voir le message
    Le TListView de FMX est calqué sur le fonctionnement des listes sur les OS mobiles.

    Il est entièrement personnalisable (même si c'est un peu complexe selon ce qu'on veut faire).

    Si tu as juste besoin d'un tableau c'est le TGrid ou TStringGrid qu'il faut utiliser.
    pour apporter plus de précisions, j'aimerais afficher une liste mais sur plusieurs colonnes
    nom / prénom / profession / date de naissance
    en sélectionnant une ligne on devrait avoir la possibilité de récupérer ce qu'on veut profession par ex, ou date de naissance par ex

    j'ai regardé si on pouvait bidouiller un Tlistbox, mais le soucis c'est que chaque item est séparé (même si on met en colone)

  6. #6
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 611
    Points
    3 611
    Par défaut
    Citation Envoyé par Coussati Voir le message
    pour apporter plus de précisions, j'aimerais afficher une liste mais sur plusieurs colonnes
    Chez moi on appelle ça une grille.

    La TListView de FireMonkey est personnalisable. On peut mettre des infos en plusieurs cellules, mais c'est pas l'idéal ou faut coder des trucs. Pour le clic c'est la ligne complète, pas les éléments indépendants.

    Autant prendre un truc fait pour afficher des lignes de données en colonnes ou passer par un TFrame dans un TVertScrollBox.

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    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 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par Coussati Voir le message
    j'ai regardé si on pouvait bidouiller un Tlistbox, mais le soucis c'est que chaque item est séparé (même si on met en colone)
    Bonjour, j'allais répondre hier soir que si le FMX.TListView était peut-être mal adapté ce n'était pas le cas du FMX.TListBox (j'indique FMX. pour ne pas les confondre avec ceux de VCL)
    Encore que, comme le souligne Patrick, ce qui est demandé s'apparente à une simple Grid facilement 'liable' aux données

    il est possible de le faire "à la main", ici un simple design pour montrer que le ListBoxHeader reste en place en haut
    Nom : Capture.PNG
Affichages : 475
Taille : 3,3 Ko Nom : Capture_1.PNG
Affichages : 472
Taille : 5,1 Ko

    La solution possible : est d'utiliser des Styles FMX
    Les explications ? Il faut aller les chercher dans mon seul tutoriel sur les styles, datant de XE4 (à l'époque pas de FMX.TListView et pire pas d'apparence dynamique). Bon d'accord, il n'y a pas d'entête de colonnes dans ce tutoriel, mais, ce n'est qu'un type particulier d'item (TListBoxHeader) que l'on associera à un style différent (ou pas) à celui des éléments.

    Dans mon esprit quelque chose comme ça
    Nom : Capture_2.PNG
Affichages : 457
Taille : 75,3 Ko
    l'éditeur de style ne se comporte pas comme le designeur de forme donc attention aux tentatives de copier/coller de composants (je me suis encore fait avoir !)
    résultat rapide (juste du design et une exécution)
    Nom : Capture.PNG
Affichages : 463
Taille : 14,9 Ko

    Avantage caché du style Header que j'ai créé, rien n'empêche de coder des évènements sur les boutons , on peut donc faire quelque chose de sophistiqué

    P.S. j'ai bien des idées pour utiliser quand même du Livebindings mais cela me demande quelques tests de faisabilité
    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

  8. #8
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    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 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par pprem Voir le message
    La TListView de FireMonkey est personnalisable. On peut mettre des infos en plusieurs cellules, mais c'est pas l'idéal ou faut coder des trucs. Pour le clic c'est la ligne complète, pas les éléments indépendants.
    Oh, là, on peut quand même faire beaucoup de choses sans coder (merci l'apparence dynamique) et si le clic c'est la ligne complète le OnItemClickEx permet de faire "son choix"

    ou passer par un TFrame dans un TVertScrollBox.
    ce qui revient à ma solution style , mais en moins brise-nerfs niveau éditeur de style

    je ne voulais pas être en reste avec le remplissage aussi ai-je "rapidement" fait ceci
    Nom : Capture.PNG
Affichages : 473
Taille : 5,7 Ko
    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
    procedure TForm2.Button1Click(Sender: TObject);
    var aItem : TListBoxItem;
         hItem : TListBoxHeader;
    begin
    Listbox1.BeginUpdate;
    //  vider liste 
     ListBox1.Clear;
    // todo : ajouter header si n'existe pas (le clear n'efface pas le Header !)  et modifier titre des colonnes
    // if  ? then begin 
    Hitem:=TlistBoxHeader.Create(ListBox1);
    Hitem.Parent:=Listbox1;
    Hitem.StyleLookup:='ListBox1Header';
    Hitem.ApplyStyleLookup;
    Hitem.StylesData['BtnCol1']:='Contact';
    Hitem.StylesData['BtnCol2']:='Date';
    // end 
    while not PrototypeBindSource2.Eof do
     begin
      AItem:=TlistBoxItem.Create(ListBox1);
      AItem.Parent:=Listbox1;
      AItem.StyleLookup:='ListBox1Item';
      AItem.ApplyStyleLookup;
      AItem.StylesData['ValeurCol1']:=PrototypeBindSource2.DataGenerator.Fields[0].GetTValue;
      AItem.StylesData['ValeurCol2']:=PrototypeBindSource2.DataGenerator.Fields[1].GetTValue;
      PrototypeBindSource2.Next;
     end;
    Listbox1.EndUpdate;
    et voilà, c'est réalisable
    Nom : Capture_1.PNG
Affichages : 455
Taille : 6,2 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

  9. #9
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 611
    Points
    3 611
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    et voilà, c'est réalisable
    reste à voir si c'est pertinent de le faire comme ça juste parce que le composant a le même nom que le composant qu'on utilisait dans un autre framework (VCL en l'occurrence) et ne faisait pas la même chose

  10. #10
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    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 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Oui mais une grille ne proposerait pas ça
    Nom : Capture.PNG
Affichages : 438
Taille : 32,4 Ko

    Cela étant je ne sais pas remplir le combobox au runtime
    Edit 17:20 Moyennant adaptation du Style, j'ai réussi ça aussi
    Nom : Capture.PNG
Affichages : 432
Taille : 5,0 Ko

    en sélectionnant une ligne on devrait avoir la possibilité de récupérer ce qu'on veut profession par ex, ou date de naissance par ex
    Bien sûr, les éléments peuvent être récupérés
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm2.ListBox1ItemClick(const Sender: TCustomListBox;
      const Item: TListBoxItem);
    begin
    ShoWMessage(Item.StylesData['ValeurCol2'].AsString);
    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

  11. #11
    Débutant
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    886
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 886
    Points : 330
    Points
    330
    Par défaut
    salut

    je vous remercie une fois de plus pour vos interventions

    je ne sais pas s'il n'y a que moi ça choque ? mais QUE DE CHOSES pour afficher des malheureuses données ? utilisation de style, bidouillage ou autre ? alors qu'avec delphi 7 un Tlistview, on configure le nombre de colonne, style vreport, c'est réglé ?

    ça quelque temps que je suis passé à la version comunauty, et je m'y habitude petit à petit aux nouveautés, masi il y a beaucoup de chose que je ne maitrise pas comme les styles, les livebinding, ect

    pour le moment, j'aimerais afficher du texte sur plusieurs colonne et je suis prêts à faire l'impasse sur l'esthétique pour privilégier la simplicité

    j'ai essayé listbox, config 2 colonnes, mais à chaque colonne on a un Titem seul, enfin j'y arrive pas

    j'ai essayé TstringGrid, j'ai un peu de mal car je n'ai jamais utilisé ce composant

    déjà pour insérer des données, j'ai du le configurer : clique droit ajout des colonnes
    ensuite je ne sais pas pkoi quand je vérifie le nombre de ligne ça me dit 100 ?
    ce qui était pratique avec listbox / listview (même compo pour moi à peu près, sauf que le listview pouvait gérer des colonnes alors que listbox non) c'est qu'on pouvait facilement ajouter / supprimer des lignes, tout était géré
    pour le TstringGrid je trouve un peu bizarre / différent sa gestion

    me proposez vous un autre compo ? on reste sur listbox ? on garde stringgrid ?
    avez vous quelques explication sur le Stringgrid ? (ajout, suppression, modification) de ligne, ect ?

    merci d'avance

  12. #12
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 611
    Points
    3 611
    Par défaut
    L'ajout de colonnes par l'idée permet de définir le type de chaque colonne.

    Le nombre de lignes est définit par la propriété RowCount, mets-y ce dont tu as besoin.

  13. #13
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    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 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Bonjour
    Citation Envoyé par Coussati Voir le message
    je ne sais pas s'il n'y a que moi ça choque ? mais QUE DE CHOSES pour afficher des malheureuses données ? Utilisation de style, bidouillage ou autre ? Alors qu'avec delphi 7 un Tlistview, on configure le nombre de colonnes, style vreport, c'est réglé ?
    Alors il y a un peu de confusion car avec un TGrid ou TStringGrid cela se passe sans une ligne de code (voir zip joint)

    Nom : Capture.PNG
Affichages : 417
Taille : 48,3 Ko
    Bon effectivement il y a à définir les colonnes, mais c'est plus pour le texte des headers et les largeurs qu'autre chose.
    Bien entendu, si, ici, j'ai utilisé un TProtypeBindSource, cela ne veut pas dire que l'on ne peut utilisé un Dataset quelconque (xxxQuery, xxxTable, ClientDataset etc...) apparaitra juste, en pluse une sorte d'équivalent du TDatasource de D7, un TBindSource

    Quant à l'esthétique, avec FMX, une simple utilisation d'un Style (TStyleBook) permettra d'avoir autre chose que la proposition "standard"

    LE "QUE DE CHOSE" est en fait sur la demande ListView mais Patrick avait déjà insisté sur le fait qu'une simple StringGrid pouvait faire l'affaire.
    pour le moment, j'aimerais afficher du texte sur plusieurs colonnes et je suis prêts à faire l'impasse sur l'esthétique pour privilégier la simplicité
    la StringGrid correspond donc à la demande

    Ça fait quelque temps que je suis passé à la version communauté, et je m'habitue petit à petit aux nouveautés, mais il y a beaucoup de chose que je ne maitrise pas comme les styles, les livebinding, etc.
    j'ai essayé TstringGrid, j'ai un peu de mal car je n'ai jamais utilisé ce composant
    Lié par Livebindings c'est l'équivalent du TDBGrid de D7

    déjà pour insérer des données, j'ai dû le configurer : clique droit ajout des colonnes
    Oui et non, en utilisant le concepteur de liaison, on passe par l'étape * <-> *, les colonnes avec entête et largeur par défaut sont alors déjà visibles
    c'est ensuite que l'ajout des colonnes permet d'arriver au résultat que je montre

    ensuite je ne sais pas pkoi quand je vérifie le nombre de ligne ça me dit 100 ?
    juste le comportement par défaut d'un TGrid

    ce qui était pratique avec listbox / listview (même compo pour moi à peu près, sauf que le listview pouvait gérer des colonnes alors que listbox non) c'est qu'on pouvait facilement ajouter / supprimer des lignes, tout était géré
    Les FMX.ListBox et FMX.ListView ne sont pas équivalents à ceux de VCL un point c'est tout

    pour le TstringGrid je trouve un peu bizarre / différent sa gestion
    ne différe pas d'un VCL.TStringGrid s'il n'est pas lié
    avez-vous quelques explications sur le Stringgrid ? (ajout, suppression, modification) de ligne etc. ?
    Tout dépend s'il s'agit d'un remplissage "manuel" dans ce cas c'est la même chose que D7
    ou d'un remplissage via liaison et là cela devient la même chose qu'une utilisation d'une DBGrid
    Une petite différence toutefois en utilisant un TProtypeBindSource et des Objets, là il faudra un peu de code (cf mon tutoriel TPrototypeBindSource , une base de données sans SGBD )
    Fichiers attachés Fichiers attachés
    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

  14. #14
    Débutant
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    886
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 886
    Points : 330
    Points
    330
    Par défaut
    tout d'abord veuillez m'excuser, je n'ai pas sous la main le pc avec la version comunauty tous les jours
    j'ai ouvert ton zip, c'est exactement l'affichage que j'ai besoin
    seulement, n'ayant jamais utilisé ce genre de composant, je suis un peu bloqué

    déjà pourquoi un grid et non stringgrid? (juste par curiosité)

    ensuite je ne suis pas fan du "0 code" parce qu'en fait, je n'ai pas compris le principe :

    - ajouter des colonnes, j'ai découverts grâce au clique droit
    - mais le nom des 3 colonnes dans le header ?
    - je n'ai jamais utilisé livebinding, et TProtypeBindSource d'ailleurs j'ai essayé de chercher comment tu as pu y incruster les données, mais en vain
    - dans mon projet, les données proviennent d'une requête web, et donc c'est à moi de les ajouter dans la grid, hors je n'ai aucun code pour le faire

    je suppose qu'il faudra que j'apprenne ces notions à un moment donné, mais pour l'instant T je n'ai pas trop le temps, et ce qui m'intéresse c'est arrivé au bout de mon projet

    plus à l'aise avec delphi 7, j'aurais tout bouclé en 5 min, mais je suis contraints de rester sur cet ide pour 2 raisons :
    1/ le multiplateforme (j'aimerais utiliser l'application sur mon tel)
    2/ j'ai besoin d'utiliser des threads avec syncronize notamment, et c'est vachement mieux géré et plus facile ici

  15. #15
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 611
    Points
    3 611
    Par défaut
    Citation Envoyé par Coussati Voir le message
    je suppose qu'il faudra que j'apprenne ces notions à un moment donné, mais pour l'instant T je n'ai pas trop le temps, et ce qui m'intéresse c'est arrivé au bout de mon projet
    Pour boucler le projet et faire les choses proprement, connaître les façons de remplir un composant à partir de tes données est quand même un truc à savoir faire, donc temps ou pas temps, je crois que tu n'as pas trop le choix.

    Citation Envoyé par Coussati Voir le message
    plus à l'aise avec delphi 7, j'aurais tout bouclé en 5 min, mais je suis contraints de rester sur cet ide pour 2 raisons :
    1/ le multiplateforme (j'aimerais utiliser l'application sur mon tel)
    2/ j'ai besoin d'utiliser des threads avec syncronize notamment, et c'est vachement mieux géré et plus facile ici
    Je ne vois pas ce qu'il y a de plus compliqué dans un projet FMX qu'un projet VCL pour ça.

    Soit tu fais tout à la main, dans le code, et là, à part ton choix de composant, c'est la même chose.

    Soit tu le fais dans le concepteur de fiches et dans ce cas là tu y mets :
    - un ensemble de données que tu alimentes depuis ta base de données
    - une grille

    Un clic droit sur la fiche et "lier visuellement" te permet ensuite de faire un lien entre la grille et ton ensemble de données. Tu actives l'ensemble de données et c'est terminé.

    Ca, c'est la base. Ensuite selon où tu veux faire ces choses et où se trouves tes données ça se complique car l'accès direct n'est pas toujours faisable ou tu auras envie de personnaliser l'affichage. C'est là que connaître les subtilités de LiveBindings ou de FireDAC (notamment les TFDMemTable) peuvent t'être utiles.

  16. #16
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    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 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    Citation Envoyé par Coussati Voir le message
    déjà pourquoi un grid et non stringgrid? (juste par curiosité)
    Parce que le TGrid, de mon point de vue, fait plus de chose que le Stringgrid.
    D'un autre côté un StringGrid peut se remplir d'une manière plus "classique" en utilisant les cellules StringGrid.Cell[col,row]:='mon texte'
    ensuite je ne suis pas fan du "0 code"
    C'est vrai que Livebindings cache des choses dans le DFM, et que tout "vieux programmeur" a quelques difficultés à ne pas avoir vraiment "la main" sur cette partie, je travaille d'ailleurs sporadiquement sur une solution plus "code" facile à commenter.
    @pprem qui passera, j'ai (enfin) regardé l'alternative openwire livebindings de Boian Mitov c'est une peu ce que j'avais en tête pour le concepteur de lien visuel, excepté la non-possibilité d'avoir "plusieurs pages visuelles" c'est pour l'introduction, assez convaincant


    - mais le nom des 3 colonnes dans le header ?
    Chaque TColumn a une propriété Header
    - je n'ai jamais utilisé livebinding, et TProtypeBindSource d'ailleurs j'ai essayé de chercher comment tu as pu y incruster les données, mais en vain
    Là, logiquement, le tutoriel pointé devrait expliquer le comment et le pourquoi.
    - dans mon projet, les données proviennent d'une requête web, et donc c'est à moi de les ajouter dans la grid, hors je n'ai aucun code pour le faire
    C'est la première fois dans ce sujet que je vois la notion requête web. Quand j'avais lu requête je pensais requête sur BDD et, par flemme j'avais choisi un TProtypeBindSource me générant des données aléatoires. Mais c'est plutôt un mal pour un bien. Si, une fois de plus, tu lis le tutoriel tu remarqueras que le protype n'est qu'une sorte de cadre pour le design. Une "simple" instruction permet au début du programme de "remplacer" les données du TProtypeBindSource par une liste d'objets lors de l'évènement on CreateAdapter du TPrototypeBindSource
    ABindSourceAdapter:=TListBindSourceAdapter<TEvenement>.Create(self,DonneesInternes, True);Où TEvenement est un objet de même structure et DonneesInternes un TList<TEvenement>.

    Il est d'ailleurs proposé dans ce même logiciel un "source de données" de type JSON

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    plus à l'aise avec delphi 7, j'aurais tout bouclé en 5 min,
    Ce n'est qu'une question d'habitude, pour preuve le petit zip a été fait en 5 min.
    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

  17. #17
    Débutant
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    886
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 886
    Points : 330
    Points
    330
    Par défaut
    merci encore à vous pour vos interventions

    @pprem j'avais déjà parcouru ces tuto, c'est vrai que ça demande quand même une grande disponibilité pour tous les assimilés

    j'ai quand même regardé et je comprends un peu le principe :
    si j'ai bien compris, TPrototypeBindSource sert uniquement à générer des données aléatoires pour nos tests ?
    c'est une source de donnée, nous relions au grid pour les afficher
    contrairement à la Tlistbox et Tlistview, on ne gère rien sur le Tgrid, on ajoute / supprime des données directement sur le "Tsource" qui lui met à jour le Tgrid, c'est bien ça ?

    pour compléter mon projet : donc il n'y a pas de bdd en local, j'affiche des données depuis une requête web par retour json
    cette partie là, ça va, j'ai déjà fait des tests, je rajoutais les donnés dans un Tlistbox, mais ce n'est pas ordonné (d'où ma demande de passer par un grid)

    si je suis encore sur la même longueur d'onde (ce que j'espère ) j'aimerais savoir quel compo source utiliser que j'alimenterai à chaque requête web ?
    comment aussi parcourir ses données ? supprimer ?

    j'espère ne pas trop m'embrouiller :/

    sinon aujourd'hui j'ai pensé à une autre solution, mais c'est un peu long : utiliser Tlistbox
    je dois dans ce cas créer un Tlistboxitem par résultat
    dans ce Tlistboxitem j'ajoute à ma guise, des Tlabel, ou autre pour afficher les données

    je préfère éviter cette solution, surtout que j'aime bien l'affichage du Tgrid

  18. #18
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    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 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par Coussati Voir le message
    si j'ai bien compris, TPrototypeBindSource sert uniquement à générer des données aléatoires pour nos tests ?
    c'est une source de donnée, nous relions au grid pour les afficher
    Oui
    contrairement à la Tlistbox et Tlistview, on ne gère rien sur le Tgrid, on ajoute / supprime des données directement sur le "Tsource" qui lui met à jour le Tgrid, c'est bien ça ?
    pas vraiment, un FMX.TListBox ou même FMX.TlistView peuvent être liés via LiveBindings, tout comme un FMX.TStringGrid peut être rempli "à la main"

    pour compléter mon projet : donc il n'y a pas de bdd en local, j'affiche des données depuis une requête web par retour json
    Donc, si la version Delphi à des composants REST (la matrice fonctionnelle m'indique que c'est valable même pour une version Community) ? Un petit tour avec RESTDebugger permettrait non seulement de tester les requêtes mais aussi de préparer tous les composants nécessaires (dont un FDMemtable). De là toute ma démonstatrion LiveBindings fonctionne.

    cette partie là, ça va, j'ai déjà fait des tests, je rajoutais les donnés dans un Tlistbox, mais ce n'est pas ordonné (d'où ma demande de passer par un grid)
    L'autre solution, traiter les données comme une liste d'objets, liste d'objets pouvant être ordonnée, fonctionne sur le principe montré avec le ProtypeBindSource
    mais ce n'est pas ordonné (d'où ma demande de passer par un grid)
    ATTENTION, ce n'est pas passer par un Grid ne rendra pas la liste ordonnée, c'est l'utilisation d'index dans le cas d'une FDMemTable ou d'une fonction de tri de la liste d'objets qui fera le travail

    si je suis encore sur la même longueur d'onde (ce que j'espère ) j'aimerais savoir quel compo source utiliser que j'alimenterai à chaque requête web ?
    au choix et selon disponibilité :
    - mon premier choix REST (moins casse tête)
    - le second , utilisation de HTTP (TNetHTTPRequest ou composants Indy) et traitement du JSON obtenu
    mais je croyais que c'était déjà fait :
    cette partie là, ça va, j'ai déjà fait des tests, je rajoutais les données dans un Tlistbox,

    comment aussi parcourir ses données ? supprimer ?
    Avec REST, c'est une simple gestion de table (FDmemTable), avec la liste d'objet, c'est à peine plus compliqué

    j'espère ne pas trop m'embrouiller :/
    si parce que l'on retourne sans arrêt sur le même travers : affichage visuel et données en lisant la suite du post

    sinon aujourd'hui j'ai pensé à une autre solution, mais c'est un peu long : utiliser Tlistbox
    je dois dans ce cas créer un Tlistboxitem par résultat
    dans ce Tlistboxitem j'ajoute à ma guise, des Tlabel, ou autre pour afficher les données
    Quelque-soit le composant d'affichage il faut d'abord se pencher sur la forme d'obtention des données. Là, je ne parle qu'en partie de la partie requête et surtout de la partie "stockage" niveau programme. Et là je vois deux choix possibles le FDMemTable ou la liste d'objets. A partir de ce choix tout composant ListBox,ListView,StringGrid,Grid etc..

    P.S. Je ne vais pas, ici, indiquer comment faire pour l'utilisation des composants REST une recherche dans le forum Delphi permettra de trouver de nombreuses (trop ?) interventions de ma part où j'en parle (en tant que poseur de question ou en tant que répondant) images à l'appui
    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

  19. #19
    Débutant
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    886
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 886
    Points : 330
    Points
    330
    Par défaut
    pour la partie récupération des données, ne t'en fais pas, je m'en occupe
    j'utilise un Thttpclient de chez indy, et je récupère du json
    pour exploiter les données du json, je dois faire une boucle pour tout récupérer
    actuellement, je stock les données dans un Tlistbox avec des séparations entre les champs : id / nom / prénom / date /

    donc ce qu'il me faut maintenant, c'est savoir dans quel conteneur (qui sera lié au Tgrid) je dois insérer ces données

  20. #20
    Rédacteur/Modérateur

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

    Je ferais la chose suivante :
    SOLUTION OBJET
    1 - déclaration d'une classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      TContact = Class
        Id : integer;
        Nom : string;
        Prenom : string;
        UneDate : Tdatetime;
      end;
    2- d'une liste d'objet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      MesContacts : TList<TContact>;
    3- l'utilisation d'un TProtypeBindsource avec les champs
    premier avantage, l'utilisation de générateurs (non obligatoire) permet de faire du design sans pour autant avoir de données réelles
    Nom : Capture.PNG
Affichages : 328
Taille : 22,3 Ko
    c'est à dessein que je n'ai pas mis de colonne id mais, bien sûr, elle est facile à ajouter

    SOLUTION FDMEMTABLE

    Nom : Capture_1.PNG
Affichages : 326
Taille : 30,2 Ko


    4- récupérer les données JSON
    ce n'est pas tout à fait comme indiqué dans le chapitre de ce tutoriel mais cela s'en approche
    une procédure ou fonction va
    - récupérer le JSONArray (quelque chose sous cette forme [{"id":"1","nom":"alex","prenom":"marc","unedate":"25/06/2022"},{"id":"2","nom":"steeve","prenom":"albert","unedate":"25/06/2022"}] - le traiter, je ne suis pas très à l'aise avec JSON, mais il me semble me souvenir qu'il était possible de déclarer un TJSONArray<TContact> (j'ai déjà vu passer un truc de ce genre dans un forum) sinon un truc plus code est toujours possible

    (je fournirai un code plus tard)


    5- dernière étape , l'affichage
    ce qui devient une formalité
    SOLUTION OBJET
    avec le TprototypeBindSource et Livebindings puisque une simple instruction dans l'évènement on CreateAdapter du TPrototypeBindSource
    ABindSourceAdapter:=TListBindSourceAdapter<TEvenement>.Create(self,DonneesInternes, True); permet de le réaliser.

    Juste une inconnue, ou plutôt un oubli de ma part, la "réouverture" d'un BindsourceAdapter

    SOLUTION FDMEMTABLE
    Livebindings fait le boulot facilement : pas code nécessaire
    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

Discussions similaires

  1. [TListView] Compter le nombre de lignes
    Par agh dans le forum Composants VCL
    Réponses: 2
    Dernier message: 30/09/2002, 20h25
  2. equivalent à explode?
    Par djridou dans le forum Langage
    Réponses: 3
    Dernier message: 28/08/2002, 11h01
  3. [Kylix] Equivalent ShellExec en CLX
    Par Anonymous dans le forum EDI
    Réponses: 7
    Dernier message: 14/08/2002, 11h55
  4. Equivalent à ExeName pour une DLL
    Par Smortex dans le forum Langage
    Réponses: 7
    Dernier message: 16/07/2002, 21h07
  5. [Kylix] equivalent winsock avec kylix
    Par Victor dans le forum EDI
    Réponses: 2
    Dernier message: 08/05/2002, 07h43

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