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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    893
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 893
    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 593
    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 593
    Billets dans le blog
    65
    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é

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

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 539
    Billets dans le blog
    10
    Par défaut
    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 éclairé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    893
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 893
    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

  5. #5
    Rédacteur/Modérateur

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

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    893
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 893
    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 ?

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 593
    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 593
    Billets dans le blog
    65
    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;

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

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 539
    Billets dans le blog
    10
    Par défaut
    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;

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