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 :

Information sur les listbox


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 Information sur les listbox
    bonjour

    je continue à découvrir fmx, et j'avance tout doucement

    un composant que j'utilisais beaucoup avec D7, c'est bien la listbox ! et le moins que l'on puisse dire, c'est qu'il y a de l’innovation !
    pouvez vous me donner quelques conseils sur son utilisation svp ?

    avec D7 je me contentais d'ajouter des items listbox.item.add() puis j'attribuais des couleurs aux items dans l’événement ondrawitem
    avec rio, on peut ajouter des items de la même façon, mais je ne trouve pas comment modifier leur couleur, et de ondrawitem
    j'ai compris que le fonctionnement est différent, on doit / peut ? créer les items un par un TListBoxItem ? ainsi la couleur du texte peut être modifié
    mais je n'arrive pas à saisir le fonctionnement : on peut mélanger des TListBoxItem avec des items que l'on add classiquement ?
    j'ai fait un essaie : dans une listbox, j'ajoute des TListBoxItem et des item depuis l'inspecteur d'object, ils sont visible mais à la compilation, on ne voit que les TListBoxItem ... pourtant dans le code si on ajoute des items classiquement ils sont mélangés aux TListBoxItem du coup comment faire la différence ?
    doit on remplir une listbox uniquement par des Tlistboxitem et abandonner listbox.item.add() ?

    mes besoins sont simples :
    - ajout d'item
    - attribuer des couleurs différentes à la police
    - suppression d'un item bien précis (selon son nom)

    je suis un peu perdu

  2. #2
    Rédacteur/Modérateur

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

    Tout d'abord, oui, la Listbox, c'est le moins que l'on puisse écrire, à beaucoup évoluée et il y a aussi la ListView
    J'avoue plus utilisé cette dernière, car généralement, c'est mon moyen de remplacer les grilles, pour beaucoup de données et un format identique c'est l'idéal.
    Même si je prépare un sujet Listbox contre ListView je suis loin d'en voir le bout !
    Pour répondre en partie aux diverses questions
    - ajout d'item
    - attribuer des couleurs différentes à la police
    de mon point de vue il y a au moins deux solutions :
    1. le code, voir par exemple ce que
      mn 3.36 à 7 environ, grandement ensuite amélioré par sa méthode (Fluent creation)
    2. Les styles, permettant de changer à peu près toute la présentation d'un Item, avant la venue de TListView c'etait la seule possibilité, voir mon tuto sur les styles

    de mon point de vue, sauf à utiliser Fluent Creation, avec le code cela peut devenir rapidement très fastidieux
    utiliser les styles, de son côté, peut rapidement faire frôler la crise de nerf au cours du design, par contre c'est plus "transparent" au niveau programme : renseignement de la propriété stylelookup à l'ajout de l'élément et si besoin, utilisation de procédure comme onApplyLookup pour peaufiner, ou carrément une utilisation de StyleDatas (cf. mon billet)

    La suppression d'un item précis par son nom
    Là je n'ai jamais songé à le faire, après tout il y a la possibilité d'un bouton delete, mais une utilisation d'un TagString et la recherche de l'index dans la liste est une possibilité
    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 émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 496
    Points : 2 762
    Points
    2 762
    Billets dans le blog
    10
    Par défaut
    Bonjour, le sujet est intéressant (tout du moins pour moi)
    Je n'avais jamais eu l'occasion de me pencher sur le problème et j'ai l'habitude d'utiliser Add et AddObject sur les TStringList
    J'ai résolu un problème similaire sous FMX en gérant un TStringList en parallèle.
    Note je travaile avec la version TOKYO
    Ce que je vois en phase de conception est l'exclusion de deux modes dont voici l'évolution (extrait du dfm en mode texte) :
    je charge la propriété "Items"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    object ListBox1: TListBox
      Items.Strings = (
        'Ligne A'
        'Ligne B'
        'Ligne C')
    end
    J'ajoute un TListBoxItem et celui ci détruit les items
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    object ListBox1: TListBox
      object ListBoxItem1: TListBoxItem
        Position.Y = 57.000000000000000000
        TabOrder = 0
        Text = 'ListBoxItem1'
      end
    end
    Je retourne dans ma propriété Items et j'ajoute un ligne et alors c'est le TListBoxItem qui est détruit et son libellé est réintroduit dans les Items
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    object ListBox1: TListBox
      Items.Strings = (
        'ListBoxItem1'
        'AAA')
    end
    Ma première conclusion est donc que Items et TListBoxItem sont exclusif dans un objet TListBox. Je vais essayer de mettre de la couleur et t'envoyer un exemple

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

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 496
    Points : 2 762
    Points
    2 762
    Billets dans le blog
    10
    Par défaut
    En complément de mon précédent post exemple avec deux TListbox sur une fiche FMX
    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
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      i1: integer;
      aLB1: TListBoxItem;
    begin
      ListBox1.Items.Clear;
      ListBox2.Items.Clear;
      For i1 := 10 to 20 do
        ListBox1.Items.Add('Ligne ' + i1.ToString);
      Randomize;
      For i1 := 0 to ListBox1.Count - 1 do
      begin
        aLB1 := TListBoxItem.Create(self);
        aLB1.Text := ListBox1.Items[i1];
        aLB1.Parent := ListBox2;
        aLB1.StyledSettings := [TStyledSetting.Family, TStyledSetting.Size,
          TStyledSetting.Style, TStyledSetting.Other];
        case random(3) of
          0:
            aLB1.TextSettings.FontColor := TAlphaColorRec.Blueviolet;
          1:
            aLB1.TextSettings.FontColor := TAlphaColorRec.Rosybrown;
          2:
            aLB1.TextSettings.FontColor := TAlphaColorRec.Black;
        end;
      end;
     
    end;

  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
    @SergioMaster merci pour les liens, j'irai regarder
    en parlant de Tlistview aussi quelque chose que je voulais aborder, mais j'ai préféré ne pas mélanger
    puisque t'en parles, le 1er jour que j'ai ouvert Rio, j'ai passé en revu les composants, et il me semble avoir approché Tlistbox et Tlistview, et avoir remarqué qu'il était possible d'avoir les items par colonne de 1 - 2 - 3 - 4 même jusqu'à 8
    sauf que je ne retrouve ou ? et si c'était pour la listbox ou la listview
    ça te parle ?


    @ALWEBER merci pour tes détails
    j'ai testé depuis l'edi et non dans le code, je pense que le principe est d'ajouter un TListBoxItem par item que l'on souhaite rentrer, et de modifier les propriétés font / couleur / ect
    et je suis un peu déçu parce que ce que j'ai à faire est relativement simple : j'ai une centaine d'entrée à ajouter dans ma listebox, mettre des couleurs différentes, et supprimer un item de part son nom / caption / texte
    je n'ai pas de recherche ou autre action complexe à réaliser

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 037
    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 037
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    Re,
    Citation Envoyé par Coussati Voir le message
    En parlant de Tlistview aussi quelque chose que je voulais aborder, mais j'ai préféré ne pas mélanger
    Il y a des similitudes entre les deux (possibilités de TSearchBox, de Groupes, de tri ?) mais aussi des différences flagrantes (i.e style de l'item)
    puisque t'en parles, le 1er jour que j'ai ouvert Rio, j'ai passé en revu les composants, et il me semble avoir approché Tlistbox et Tlistview,
    et avoir remarqué qu'il était possible d'avoir les items par colonne de 1 - 2 - 3 - 4 même jusqu'à 8
    sauf que je ne retrouve ou ? et si c'était pour la listbox ou la listview
    ça te parle ?
    Le nombre de colonnes (et son mode de remplissage vertical/horizontal) : oui uniquement pour TListBox (du moins je crois), la limite à 8 par contre je joue mon joker n'ayant jamais eu l'idée de fouiller.
    Je n'ai utilisé que fort récemment cette possibilité dans un source que je vais bientôt mettre à disposition sur le forum
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
       ListeduTirage.BeginUpdate;
       ListeduTirage.Columns:=C;     // nombre de colonnes  
       ListeduTirage.EndUpdate;
    mais C n'est jamais allé au delà de 5 sur mon PC, je n'ai pas pensé vérifier après déploiement sur Android

    Pour infos :
    Le TListBox n'est qu'une sorte de ScrollBox horizontale ou verticale selon le choix du mode de remplissage.
    Je voulais en profiter pour parler des Frames mais le mieux est de mettre le lien de la discussion que j'ai entamée ici
    Regarde le lien que j'ai mis sur le post #5 Jaques Nascimento aborde quelques "trucs" intéressants

    IMPORTANT, encadrer les ajouts par un ListBox.BeginUpdate; ....; ListBox.EndUpdate, optimisera l'affichage
    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
    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
    re bonjour

    ALWEBER je n'avais pas vu ton 2e message, sans doute que j'ai posté sans rafraîchir la page, ton code m'a l'air parfait

    je reviens vers vous, parce que j'ai un petit soucis de tri

    lorsque j'ai que des caractères alphabétique c'est super, sauf que certains items commencent par des caractères non alphabétique, ex :

    sorted := true me range ces items ainsi :

    #a
    *a
    -a
    /a
    _a

    j'aimerais décider moi même de l’ordre des caratères non alphabétique pour avoir cette priorité :

    -a
    _a
    *a
    #a
    /a

    (biens le reste de la chaîne doit être traité normalement, par ex *abc viendra avant *am

    vous en pensez quoi ? je ne cherche pas trop la complication ?

  8. #8
    Rédacteur/Modérateur

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

    Tu peux créer ton propre tri, j'ai écrit une FAQ il y a peu sur ce sujet : https://delphi.developpez.com/faq/?p...er-un-TListBox
    Sorted=true te donnes l'ordre correct selon la table des caractères, il faut faire en sorte de changer ces caractères le temps du tri

    code non vérifié, tapé en direct
    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 TForm1.ListBox1Compare(Item1, Item2: TListBoxItem; 
      var Result: Integer); 
    var s1,s2 : string; 
       // il serait peut-être mieux de mettre des #  en lieu et place du caractère, je n'ai pas essayé
       function ReplaceSpChar(s : String) : String;
       begin
         Result:=StringReplace(s,'-','!',[rfreplaceall]);             
         Result:=StringReplace(result,'_','$',[rfreplaceall]);
         Result:=StringReplace(result,'*','%',[rfreplaceall]);
         Result:=StringReplace(result,'#','&',[rfreplaceall]);
    //     Result:=StringReplace(result,'/','',[rfreplaceall]); pas besoin
       end; 
    begin 
        s1:=ReplaceSpChar(Item1.ItemData.Text); 
        s2:=ReplaceSpChar(Item2.ItemData.Text); 
       result := CompareText(Item1.text,Item2.text) 
      end; 
    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

  9. #9
    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

    j'étais déjà passé sur la faq, j'ai vu ton tuto, mais en fait, je n'ai pas compris comment fonctionne "OnCompare"

    je vois bien qu'il compare 2 Titem et que le résultat est un entier

    mais déjà je ne sais pas comment on déclenche cette événement, et comment on compare 2 Titem alors que l'on veut comparer toute la liste ?

    je trouve que tu devrais être plus explicite dans la faq (à moins que c'est moi qui n'ai rien pigé lol)

    sinon pour ton code, je ne suis pas trop ... j'ai comme compris ce que tu cherches à faire, mais en même temps tu ne devrais pas avoir besoin de passer par un événement ...

  10. #10
    Rédacteur/Modérateur

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

    Oncompare est un peu spécial, ce n'est pas un évènement sur la liste sensu stricto mais une surcharge du comparateur "prédéfini" alphabétique, certainement plus facile à utiliser que de devoir hacker le TListBox pour pouvoir modifier le tri
    En fait, oncompare se produit élément par élément et même plus objet texte de l'élément par objet texte de l'élément (par exemple dans le cas d'une présentation texte + detail).
    Peut-être que l'évènement onCompare aurait du être nommé OnItemCompare ?

    Je vois bien qu'il compare 2 Titem et que le résultat est un entier
    l'entier sert à la mécanique interne pour savoir s'il doit mettre l'élément au dessus -1 ou en dessous +1
    mais déjà je ne sais pas comment on déclenche cette événement
    Liste.Sorted:=true; si ce n'est déjà fait, cela n'a besoin de se faire qu'une fois


    Maintenant, si cette histoire d'évènement te gêne, ou si tu veux ne trier que de temps en temps la liste tu peux utiliser l'autre technique de la faq à savoir l'utilisation de Liste.Sort(fonctioncomparaison).
    En gros tu reprends tout le code de comparaison mais tu le mets dans une méthode "anonyme" (celle que j'ai nommée fonctioncomparaison)

    idem, tapé à la volée donc peut être pas exempt de fautes de syntaxe
    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
    procedure TForm1.btnTrierClick(Sender: TObject); 
    var fonctionComparaison : TFMXObjectSortCompare; 
    begin 
    ListBox1.Sorted:=False;  // important désactiver le tri "par défaut" 
    fonctionComparaison:=function((Item1, Item2: TListBoxItem; 
      var Result: Integer); 
    var s1,s2 : string; 
       // il serait peut-être mieux de mettre des #  en lieu et place du caractère, je n'ai pas essayé
       function ReplaceSpChar(s : String) : String;
       begin
         Result:=StringReplace(s,'-','!',[rfreplaceall]);             
         Result:=StringReplace(result,'_','$',[rfreplaceall]);
         Result:=StringReplace(result,'*','%',[rfreplaceall]);
         Result:=StringReplace(result,'#','&',[rfreplaceall]);
    //     Result:=StringReplace(result,'/','',[rfreplaceall]); pas besoin
       end; 
    begin 
        s1:=ReplaceSpChar(Item1.ItemData.Text); 
        s2:=ReplaceSpChar(Item2.ItemData.Text); 
        result := CompareText(s1,s2) 
      end; 
    end;
    ListBox1.Sort(fonctionComparaison); 
    ListBox1.RealignContent; // redessine la liste 
    end;



    pour ce qui est du code, j'ai simplement imposé l'ordre que tu avais demandé en remplaçant, le temps de la comparaison, les caractères "spéciaux". Cela dit j'ai fait des erreurs grossières (c'est bien pour ça que j'avais mis un )
    s1 et s2 sont des strings, et la partie comparaison était fausse (j'ai corrigé)


    je trouve que tu devrais être plus explicite dans la faq
    je suis à l'écoute de toute suggestion, je peux modifier ou même quelqu'un d'autre peut le faire. Je rappelle que la FAQ est collaborative
    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

    merci pour tes explications, je comprends mieux

    j'avais un peu capté le principe, mais je ne voyais pas comment ça pouvait se mettre en place

    je croyais que oncompare se déclenchait à chaque fois qu'un nouvel item arrivait dans la liste (ce qui n'est pas le cas)

    pour ce qui est de ton code, je pense que je vais faire autremenent parce que mon truc est un peu plus compliqué lol

    non seulement je dois les trier, mais ensuite je dois virer le signe (1er caractère)

    jusque là, ça va, mais après je dois gérer l’insertion de nouvel item (et savoir ou le placer)

    je ne voulais pas en venir là, mais je ne pense que je vais de voir faire ainsi :

    - vider listbox principal
    - utiliser un tstringlist pour ordonner chaque liste puis ajouter à la listbox principal
    - et ce à chaque nouvel item

    j'espère que ça ne va pas laguer, et que l'utilisateur ne verra que du feu ...

  12. #12
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 037
    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 037
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    Ça me parait bien compliqué ton histoire
    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

  13. #13
    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
    oui j'avoue ... j'ai une petite idée, mais d'abord : est il possible d'insérer un item à un indice bien précis ?

    ex : dans ma listbox j'ai 10 items, si je veux insérer un en le plaçant en avant dernier (indice 8) c'est possible ?

  14. #14
    Rédacteur/Modérateur

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dans ma listbox j'ai 10 items, si je veux insérer un en le plaçant en avant dernier (indice 8) c'est possible ?
    j'avoue n'en rien savoir ou du moins ne pas l'avoir testé, mais en théorie OUI puisque les Items sont des TStrings et que les méthodes Add (bien connue) mais aussi Append et Insert existent (il en va de même pour les ItemObjects)

    Ce que je comprends moins c'est, dans ce cas, à quoi sert le tri.

    - vider listbox principal
    - utiliser un tstringlist pour ordonner chaque liste puis ajouter à la listbox principal
    - et ce à chaque nouvel item
    j'espère que ça ne va pas laguer, et que l'utilisateur ne verra que du feu ...
    Tant qu'à faire autant utiliser un FDMemtable qui stockerait tes chaines, tout autre information nécessaire à ce que tu veux faire (tri, ordre, etc..) et de lier (LiveBindings) le TListBox directement.
    Le LiveBinding te permettra facilement d'occulter le 1° caractère (soit par un customformat quoique je doute, soit par la gestion d'évènement onFillingListItem ...)

    Le tri AMHA passerait alors par des index, tu changes d'index la liste suit (en théorie toujours je n'ai pas verifié je passe plus par des TListView)
    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

  15. #15
    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
    j'ai pris un peu de temps, parce que j'ai eu quelques soucis avec android

    d'ailleurs je trouve que souvent la source compile bien, la version windows et nikel, mais quand on passe à android ça déconne

    j'ai remarqué que lorsque je crée un item, puis je l'efface (.delete) il m'est impossible de recréer sans planter l'application sous android alors que sous windows c'est nikel

    après avoir compris le problème, j'ai décidé de créer des noms uniques (.name) avec une fonction maison qui sort une chaîne de caractère d'environ 8 caractères

    pour ce qui est du rangement, j'utilise 2 litsbox :

    - une temporaire, en mode caché, qui utilise sorted := true, je fais des remplacements de premier caractère, ect

    - et l'autre que j'affiche à l'utilisateur qui est rangé en fonction de la temporaire en faisant apparaître bien que texte, sans les signes ou autre

    - quand j'ajoute dans la temporaire, je récupère son indice et j'insère dans l'autre

    - pareil pour effacer


    j'en profite pour poser une encore une question liée à la Tlistbox : les items apparaissent normalement sur windows, mais un peu gros sous android

    est ce que à la création de l'item je dois faire une condition (si android ... sinon) afin de choisir la taille de la police ?

  16. #16
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 037
    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 037
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par Coussati Voir le message
    j'en profite pour poser une encore une question liée à la Tlistbox : les items apparaissent normalement sur windows, mais un peu gros sous android
    est-ce qu’à la création de l'item je dois faire une condition (si android ... sinon) afin de choisir la taille de la police ?
    C'est le style Android qui provoque ça. Oui, même s'il n'y a aucune feuille de visible, il y a un style quand même, Il suffit de voir comment se redessine les boutons etc..
    Utiliser le combobox style permet de facilement s'en rendre compte, utiliser une vue (combo à côté) permet de modifier les positions, taille etc.. en fonction de la cible
    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
    bon, je suis entrain de faire mes premiers pas sur fmx, je ne connais pas les styles, donc je ne vois pas trop comment fonctionne les "combobox style"

    après je ne sais pas si je me suis bien exprimé, donc je reformule :

    j'ai ma Tlistbox, je crée les TlistboxItem (depuis le code)

    je ne spécifie aucune taille, par défaut, c sympa sous windows, mais je trouve un peu gros sur android

    P.S : pour mettre une couleur de fond à un item, on doit obligatoirement passer par un Trectangle ?

  18. #18
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 037
    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 037
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    Bonjour
    Citation Envoyé par Coussati Voir le message
    bon, je suis en train de faire mes premiers pas sur fmx, je ne connais pas les styles, donc je ne vois pas trop comment fonctionne les "combobox style"
    Comment cela fonctionne, je ne sais pas (même su je le devine), mais le résultat est que tu as la présentation en fonction de l'OS visé.
    Le style c'est un peu plus que simplement les styles VCL qui, jusqu'à présent, sont des sortes de skins qui permettent de changer la présentation.

    après je ne sais pas si je me suis bien exprimé
    si, c'était parfaitement clair, le truc que tu ne saisis pas c'est que windows a un style prédéfini et Androïd un autre (ne serait-ce que les fontes)
    C'est ce que la combobox de l'EDI applique.

    je ne spécifie aucune taille, par défaut, c sympa sous windows, mais je trouve un peu gros sur android
    Ils sont aux standards des OS

    pour mettre une couleur de fond à un item, on doit obligatoirement passer par un Trectangle ?
    Il y a une solution à base de Canvas mais cela complique la vie (de mon point de vue).

    Tu as quand même un autre choix que l'utilisation des styles : un Item = un Frame. Bien que perso je trouve cette solution très "vieille école" @Paul Toth elle est parfaitement possible.
    Du coup la taille sera respectée quelque soit l'OS. Mais la couleur de fond restera quand même l'utilisation d'un TRectangle. Pour l'instant, si je compare l'approche style d'item de l'approche frame il y a peu de différence sauf en ce qui concerne la possibilité de mettre des TEdits


    PS. je trouve toujours ta méthode de résolution de tri de ta liste un peu tirée par les cheveux
    - deux listes dont une cachée dans ce cas ta liste cachée pourrait être une TStringList ou mieux une TList<String> ou TList<Object>
    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
    je n'avais pas compris de quoi tu parlais quand tu parlais de combobox style, maintenant je vois

    par contre je ne pige pas, je crée dynamiquement les items, je peux donc spécifier la taille du texte non ?

    un_item.TextSettings.Font.Size := 6;

    rien à faire, la taille de la police ne change pas

    en plus ce dont je trouve bizarre, j'ai essayé de créer un Tlistboxitem depuis l'edi (par défaut la taille est 12) :

    - dans la vue android, c'est gros
    - je modifie dans la vue android en mettant 10, je trouve trop petit
    - toujours dans la vue android, je repasse à 12 (ce qui était la valeur par défaut) et que vois je ? la taille est correcte, ce n'est plus aussi gros qu'à la création ...

    pour ce qui est de ma méthode de tri, j'utilise une listbox temporaire pour contrôler le contenu, une fois que tout sera au point, je peux bien entendu passer par un Tstringlist

  20. #20
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 037
    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 037
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par Coussati Voir le message
    je n'avais pas compris de quoi tu parlais quand tu parlais de combobox style, maintenant je vois
    J'avais bien compris que tu n'avais aps compris
    par contre je ne pige pas, je crée dynamiquement les items, je peux donc spécifier la taille du texte non ?
    ..
    rien à faire, la taille de la police ne change pas
    Car le style s'applique, je n'ai jamais essayé mais si je devais parier je dirais qu'il faut jouer sur les fontes avec l'évènement onApplyStyleLookup (sans conviction) et jouer sur la font du style
    c'est là où l'avantage d'utiliser une source de données et les livebindings car on peut jouer sur des évènements supplémentaires

    toujours dans la vue android, je repasse à 12 (ce qui était la valeur par défaut) et que vois je ? la taille est correcte, ce n'est plus aussi gros qu'à la création ..
    C'est là où cela devient subtil (et ne mâchons pas les mots ch..nt) et encore plus. Le fait de basculer sur une vue (combobox de l'EDI) et non pas tester le style (combobox de l'EDI) créé un dfm différent. Pour reprendre la comparaison style/frame quand tu crées un frame tu as une présentation. Tu "colles" le frame sur une forme tu peux très bien modifier cette présentation qui ne s'appliquera qu'à cette forme. C'est identique pour les vues (encore un peu plus complexe car tu peux avoir plusieurs présentations possibles en fonction des tailles de mobiles etc...)

    pour ce qui est de ma méthode de tri, j'utilise une listbox temporaire pour contrôler le contenu, une fois que tout sera au point, je peux bien entendu passer par un Tstringlist
    je reste sceptique, mais c'est ton appli et je n'ai pas, certainement, toutes les billes en main
    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. Informations sur les langages/outils de ce forum
    Par Idelways dans le forum Autres langages
    Réponses: 3
    Dernier message: 14/02/2018, 12h08
  2. [LG]Informations sur les procédures
    Par noureddine9h dans le forum Langage
    Réponses: 3
    Dernier message: 09/02/2005, 21h23
  3. information sur les ps
    Par devalender dans le forum Débuter
    Réponses: 4
    Dernier message: 20/07/2004, 10h07
  4. Réponses: 6
    Dernier message: 28/04/2004, 10h41
  5. Informations sur les procédures stockées
    Par jfphan dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 13/01/2004, 14h30

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