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 :

Problème de customisation d'une Listbox


Sujet :

Composants FMX Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 140
    Billets dans le blog
    5
    Par défaut Problème de customisation d'une Listbox
    Bonjour à tous et bonne année

    Je suis en train de customiser un TListBox et si le rendu final est bien celui que je veux par contre pour l'accès aux éléments ce n'est pas ça.

    Donc voici ce que j'ai fait:

    Le code ci dessous est appelé quand je met à jour ma TListbox

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    lbUniteActives.Clear;
              for i := 0 to TEtatMajor(lePion).getNbSubordonne - 1 do
              begin
                sub := TTroupe(TEtatMajor(lePion).getSubordonne(i));
                ilst := TListBoxItem.Create(lbUniteActives);
                ilst.stylelookup := 'CheckListBoxItemStyle';
                ilst.stylesdata['texte'] := sub.getNom;
                ilst.stylesdata['chkActiveBox'] := sub.Active;
                if ilst.FindStyleResource<TCheckBox>('chkActiveBox', chkactive) then
                  chkactive.OnChange := lbUniteActivesChangeCheck;
                lbUniteActives.AddObject(ilst);
              end;
    Et j'ai bien le résultat que j'attends
    Nom : lbstyle1.PNG
Affichages : 222
Taille : 55,3 Ko
    Voici le style que j'ai défini:
    Nom : lbstyle2.PNG
Affichages : 217
Taille : 2,6 Ko

    Le problème semble se situer à cette ligne car le résultat du FindStyleResource renvoi false
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if ilst.FindStyleResource<TCheckBox>('chkActiveBox', chkactive) then
                  chkactive.OnChange := lbUniteActivesChangeCheck;
    Il ne trouve pas l'élément chkActiveBox et je ne comprends pas pourquoi.

    Une idée?

  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,

    Cela ne manquerait pas d'un ApplyStyleLookup la ligne 7 ?
    Bon, je dis ça, on est le 1°Janvier et je n'ai pas trop envie de faire un test
    Meilleurs vœux quand même

  3. #3
    Membre émérite
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 140
    Billets dans le blog
    5
    Par défaut
    Je viens de tester le ApplyStyleLookUp mais ça ne fonctionne pas mieux

    Par contre j'ai trouvé ça qui a l'air de fonctionner.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ilst.stylesdata['chkActiveBox.OnClick'] := TValue.From<TNotifyEvent>(lbUniteActivesChangeCheck);
    Un grand merci quand même pour t'être penché sur la question un 1er janvier

  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
    J'ai toujours pensé que FindStyleRessource était pour les TListview, StylesData pour les TListbox mais de là à en faire une règle ?
    Il faudra qu'un jour, je me penche à fond sur le sujet ListBox/ListView même si j'ai déjà pas mal fouillé ce thème, il y a encore des choses qui m'échappent

  5. #5
    Membre émérite
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 140
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    J'ai toujours pensé que FindStyleRessource était pour les TListview, StylesData pour les TListbox mais de là à en faire une règle ?
    Il faudra qu'un jour, je me penche à fond sur le sujet ListBox/ListView même si j'ai déjà pas mal fouillé ce thème, il y a encore des choses qui m'échappent
    Je n'en suis pas persuadé car j'ai retrouvé ce vieux post (https://www.developpez.net/forums/d2...yle-d-tlisbox/) et ça fonctionnait bien.

  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
    Effectivement, j'ai fait un essai avec FindStyleRessource plutôt que StylesData et cela fonctionne, au temps pour moi donc.

    du coup je me pose la question du code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ilst.FindStyleResource<TCheckBox>('chkActiveBox', chkactive) then
    chkActiveBox est-il bien un TCheckBox ?

    voilà ce que j'ai testé
    Nom : Capture.PNG
Affichages : 166
Taille : 52,5 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
    28
    29
    30
    31
    procedure TForm4.Button1Click(Sender: TObject);
    var
      I: Integer;
      anItem : TlistBoxItem;
      aLabel : Tlabel;
      achkBox : TcheckBox;
    begin
    for I := 1 to 10 do
    begin
      anItem:=TlistBoxItem.Create(ListBox1);
      anItem.parent:=Listbox1;
      anItem.height:=40;
      anItem.stylelookup:='monstyle';
      anItem.ApplyStyleLookup;
      anItem.text:='un texte '+i.ToString;
      anItem.Tag:=i;
      anItem.FindStyleResource<Tlabel>('detail',aLabel);
      if assigned(alabel) then alabel.Text:='detail '+i.ToString; // plutôt qu'un if anItem.findStyleResource.. then 
      if anItem.FindStyleResource<TcheckBox>('CheckBox1',achkbox) then  // second check box 
       begin
        achkbox.Tag:=anItem.tag;
        achkbox.IsChecked:=odd(anItem.tag);
        achkbox.OnChange:=itemCheckBoxChange;
       end;
    end;
    end;
     
    procedure TForm4.itemCheckBoxChange(Sender: TObject);
    begin
    memo1.Lines.Add('Checkbox '+TCheckBox(Sender).Tag.ToString);
    end;
    Toutefois si cela fonctionne sur les éléments 2-10 le premier élément déconne de temps en temps :
    que ce soit le checkbox "classique" ou le checkbox "ajouté" un scroll en bas puis un retour au début de liste et les checkboxs du premier élément sont décochés et l'évènement ne se déclenche pas !

    [edit] une vidéo du problème (Delphi 11.2)
    https://serge-girard.developpez.com/..._listboxt.webm

Discussions similaires

  1. [AC-2007] Problème de source d'une listbox
    Par mc.schmer dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 15/02/2012, 17h26
  2. MVVM - Problème pour Autoscroll sur une ListBox avec du databinding
    Par caramel dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 18/11/2011, 14h29
  3. [Débutant] problème d'ajout dans une listBox
    Par theangel2011 dans le forum C#
    Réponses: 5
    Dernier message: 17/08/2011, 16h35
  4. Problème d'affichage dans une listbox
    Par swap_nibble dans le forum Interfaces Graphiques
    Réponses: 3
    Dernier message: 25/01/2008, 17h29
  5. Problème de sélection dans une listbox
    Par cacahuèèète dans le forum Access
    Réponses: 3
    Dernier message: 29/06/2006, 15h03

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