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 :

[Tokyo 10.2.3] Récupération d'un objet d'un style


Sujet :

Composants FMX Delphi

  1. #1
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut [Tokyo 10.2.3] Récupération d'un objet d'un style
    Bonjour,

    Actuellement je me remet sur les styles et j'ai un petit soucis avec la fonction qui permet de récupérer les objets d'un style.

    Mon style contient un layout avec un TRectangle, des labels, des boutons, etc ...

    quand je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      vItem := TListBoxItem.Create(ListBox1);
      vItem.Height := 150;
      vItem.StyleLookup := 'lstEDCDossier';
      vItem.StylesData['labDossier.text'] := 'Test dossier';
      ListBox1.AddObject(vItem);
    Pas de soucis le label reçois bien le texte que je lui transmet.

    Voulant récupérer un pointeur sur ce label j'utilise le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      vLab := (vItem.FindStyleResource('labDossier') as TLaBel);
    Malheureusement Vlab est toujours à nil.

    un idée pour que je puisse récupérer ce pointeur ?

    Merci
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    FindStyleResource ne doit-il pas reprendre l'extension '.text' ?
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Normalement non, labDossier est le "nom" du composant TLabel dans le style.

    En XE7 je faisais de cette manière et cela fonctionnait correctement, mais la impossible de récupérer les composants de mon style (ça ne fonctionne avec aucun des compos)
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  4. #4
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 385
    Points : 2 999
    Points
    2 999
    Par défaut
    et sans le "as TLabel" , ça donne quoi ?

    en changeant le type d'objet en TFmxObject bien sûr

  5. #5
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Pas mieux toujours à nil
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  6. #6
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 385
    Points : 2 999
    Points
    2 999
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TForm3.Button1Click(Sender: TObject);
    var
      I: TListBoxItem;
      L: TLabel;
    begin
      I := ListBox1.ListItems[0];
      L := I.FindStyleResource('loco') as TLabel;
      if Assigned(L)  then
      begin
        ShowMessage(L.ClassName);
        L.Text := 'Gagné';
      end;
    end;
    Nouvelle application multi-périphériques
    Dépot TListbox
    Création élément
    ouverture du style
    dépot TLabel
    changement du stylename

    et code ci-dessus

    Sur Berlin, ça fonctionne

    Nom : style.png
Affichages : 458
Taille : 64,2 Ko

    Nom : type.png
Affichages : 467
Taille : 4,1 Ko

    Nom : résultat.png
Affichages : 435
Taille : 4,0 Ko

  7. #7
    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
    Papy214 rien ne vaut une bonne bande dessinée !
    J'allais faire le même effort avec Tokyo
    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
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Mon style

    Nom : Style.jpg
Affichages : 432
Taille : 296,3 Ko

    Le code dans le oncreate de la form (pour mes tests)

    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
     
    var
      vItem, vItemLst : TlistBoxItem;
      vLstBoxTmp : TListBox;
      vLab : TLabel;
      vFmx : TFmxObject;
    begin
     
      vItem := TListBoxItem.Create(ListBox1);
      vItem.Height := 150;
      vItem.StyleLookup := 'lstEDCDossier';
      vItem.StylesData['labDossier.text'] := 'Test dossier';
      vItem.StylesData['btnDel.onclick'] := TValue.From<TnotifyEvent>(btnClickDel);
      vItem.StylesData['btnEdit.onclick'] := TValue.From<TnotifyEvent>(btnClickEdit);
      vItem.StylesData['btnSize.onclick'] := TValue.From<TnotifyEvent>(btnClickSize);
     
      vLab := (vItem.FindStyleResource('labDossier') as TLabel);
      vLstBoxTmp := (vItem.FindStyleResource('lstBoxMag') as TListBox);
      if Assigned(vLstBoxTmp) then
      begin
        vItemLst := TListBoxItem.Create(vLstBoxTmp);
        vItemLst.Height := 20;
        vItem.Text := 'test';
     
        vLstBoxTmp.AddObject(vItem);
      end;
     
      ListBox1.AddObject(vItem);
    Que ce soit vLab ou vLstBoxTmp, ils sont toujours à nil (j'ai fait plusieurs test en changeant la casse des stylename mais rien à faire)
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  9. #9
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 385
    Points : 2 999
    Points
    2 999
    Par défaut
    est-ce que Stylename (et non le name) est bien renseigné et utilisé pour retrouver le style ?

  10. #10
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Dans tous les composants du style les name sont vide et j'ai renseigné les StyleName (on voit les noms dans la structure des styles)

    Ce qui est étrange c'est que StyleData fonctionne et utilise FindStyleResource dans son code mais que si je l'utilise directement cela ne fonctionne pas
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  11. #11
    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,

    je dois avouer que sur les styles personnalisés je suis un peu rouillé, pire je ne comprends pas le problème !
    Pour me rassurer j'ai donc fait mon propre petit programme (Tokyo 10.2.3) pour tester

    Nom : Capture.PNG
Affichages : 428
Taille : 32,5 Ko

    j'ai été un peu plus loin en mettant un TRectangle, un TText et un TLabel
    le TRectangle ne nous intéresse pas
    le TText est nommé name=Libelle et StyleName=Libelle
    le TLabel n'a pas de nom, juste posé le StyleName=Label1

    voilà mes différents essais de récupération qui tous fonctionnent
    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
     
    procedure TForm16.Button1Click(Sender: TObject);
    var AnItem : TListBoxItem;
    begin
      AnItem := TListBoxItem.Create(ListBox1);
      AnItem.Height := 50;
      AnItem.StyleLookup := 'MyItemStyle';
      AnItem.StylesData['Libelle.text'] := 'Test dossier';
      AnItem.StylesData['Label1.text'] := 'mon test';
      ListBox1.AddObject(AnItem);
    end;
     
     
    procedure TForm16.Button2Click(Sender: TObject);
    var AnItem : TListBoxItem;
        AFMXObj : TFMXObject;
        AText : TText;
        ALabel : TLabel;
    begin
    AnItem:=ListBox1.ListItems[0];
    AFMXObj:=AnItem.FindStyleResource('Libelle');
    if assigned(AFMXObj) then  showmessage(TText(AFMXObj).Text) else showmessage('TText(AFMXObj) raté') ;
    Atext:=TText(AnItem.FindStyleResource('Libelle')); 
    if assigned(Atext) then showmessage(Atext.Text) else showmessage('TText raté') ;
    Showmessage(TLabel(AnItem.FindStyleResource('Label1')).Text);
    end;
    [Edit] je me suis ensuite rafraichi la mémoire en relisant mon tutoriel
    je me souvenais vaguement de quelques astuces
    j'ai nommé (StyleName) le TLabel ‘Text', une petite astuce qui va permettre d'accéder à cette propriété directement.
    et effectivement cela fonctionne, je ne remet pas tout le code mais juste ce qu'il faut changer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    AnItem.Text:= 'mon test'; //   AnItem.StylesData['Label1.text'] := 'mon test';
     
     Showmessage(AnItem.Text); //  Showmessage(TLabel(AnItem.FindStyleResource('Label1')).Text); 
     ou 
     Showmessage(TLabel(AnItem.FindStyleResource('Text')).Text);
    Quant il n'y a qu'un seul élément cette petite astuce simplifie le code

    Finalement, replonger là dedans m'a fait voir que le tutoriel était devenu (déjà) un peu obsolète (pour faire la même liste je passerai maintenant par un TListView et un style dynamique)


    [ReEdit] jusqu'à ce que je vois que le layout contenait un TListBox du coup cela s’éclaircit ! Ce n'était pas un Style pour ajouter des Items à une liste mais un Style contenant un TListBox simple. Nouveau test mais en rajoutant à mon style un TListBox (stylename=Liste) et essai de remplissage

    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
    procedure TForm16.Button3Click(Sender: TObject);
    var AnItem,AdItem : TListBoxItem;
        AFMXObj : TFMXObject;
        AListBox : TListBox;
    begin
    AnItem:=ListBox1.ListItems[0];
    // juste par précaution, pour tester que le type soit bien un TListBox
    AFmxObj:=AnItem.FindStyleResource('Liste');
    AdItem:=TlistBoxItem.Create(AnItem);
    AdItem.Text:='Hello';
    TListBox(AFMXObj).AddObject(adItem);
    AdItem:=TlistBoxItem.Create(AnItem);
    AdItem.Text:='World';
    TListBox(AFMXObj).AddObject(adItem);
    end;
    Nom : Capture.PNG
Affichages : 407
Taille : 2,9 Ko

    La seule différence avec ton code le parent de création de l'item mais cela fonctionne aussi avec AdItem:=TlistBoxItem.Create(AFMXObj);

    restait en suspend la question : "comment je récupère l'élément sélectionné ?" (dans mon cas soit rien, 'Hello', 'World') en cliquant sur un bouton (btnEdit ajouté à mon style)

    lors de la création de mon élément stylé j'ai rajouté AnItem.StylesData['btnEdit.onclick'] := TValue.From<TnotifyEvent>(btnClickEdit);puis dans mes déclarations privées
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     private
        { Déclarations privées }
        procedure btnClickEdit(Sender : TObject);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    procedure TForm16.btnClickEdit(Sender: TObject);
    var AnItem,AdItem : TListBoxItem;
        AFMXObj : TFMXObject;
        AListBox : TListBox;
    begin
    AnItem:=ListBox1.ListItems[0];
    AFmxObj:=AnItem.FindStyleResource('Liste');
    if Assigned(TListBox(AFMXObj).Selected) then
      showmessage(TListBox(AFMXObj).Selected.Text);
    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

  12. #12
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Bon, j'ai du mettre en standby ces tests et je suis enfin de retour dessus.

    Alors, j'ai fait les manipulations suivantes :

    1- j'ai créé une nouvelle application multi-périphérique Delphi
    2- J'ai double-cliqué sur le Stylebook1 de la form puis j'ai créé un nouveau style (Un layout, un rectangle, un label et une listbox)

    Nom : stylev2.jpg
Affichages : 405
Taille : 185,1 Ko

    3- J'ai posé sur la forme principale une listbox.
    4- Dans le OnCreate de la form j'ai le code suivant :

    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
     
    var
      vItemMainList, vItemSubList : TListBoxItem;
      vLstSubBox : TListbox;
      vFMXObj : TFmxObject;
    begin
     
      vItemMainList := TListBoxItem.Create(listBox1);
      vItemMainList.StyleLookup := 'lstComplexe';
      vItemMainList.Height := 100;
      listBox1.AddObject(vItemMainList);
     
      vItemMainList := listBox1.ListItems[ListBox1.Count -1];
     
      vFMXObj := vItemMainList.FindStyleResource('labtest');
     
      if Assigned(vFMXObj) then
        TLabel(vFMXObj).Text := 'Test';
     
      vFMXObj := vItemMainList.FindStyleResource('lsttest');
     
      if Assigned(vFMXObj) then
      begin
        vLstSubBox := TListBox(vFMXObj);
        vItemSubList := TListBoxItem.Create(vLstSubBox);
        vItemSubList.Text := 'test';
      end;
    Dans les deux cas le vFMXObj est à nil.
    Je comprend pas pourquoi cela fonctionne chez vous et pas chez moi
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  13. #13
    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,

    Il faudrait me/nous fournir le zip du programme (.pas, .fmx) si ça se trouve c'est tout bête mais invisible dans le code du programme
    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
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    En pièce jointe

    Test3.zip
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  15. #15
    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,

    après la plage et une bonne nuit de sommeil (vacances obligent) voici comment je vois les choses
    Ce qui pose problème c'est le fait que ton code se passe dans le onCreate (il faudrait trouver comment ça fonctionne hiérarchiquement avec les styles)
    c'est vrai que dans toutes mes interventions précédentes, je le faisait via boutons donc après affichage de la forme.

    Comment j'en suis arrivé à cette conclusion ? j'ai tout simplement utiliser un bouton pour remplir la liste principale pour ensuite utilisé ton style
    comme cela fonctionnait j'ai pu trouver la "parade"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    procedure TForm1.FormCreate(Sender: TObject);
    var
      vItemMainList, vItemSubList : TListBoxItem;
      vFMXObj : TFmxObject;
      vString : String;
    begin
     
      vItemMainList := TListBoxItem.Create(listBox1);
      vItemMainList.StyleLookup := 'lstComplexe';
      vItemMainList.Height := 100;
      VItemMainList.StylesData['labtest.text'] := 'Test dossier onCreate';
      listBox1.AddObject(vItemMainList);
      vItemMainList := listBox1.ListItems[0];
     
     {$IFDEF DEBUG}
      vFMXObj := vItemMainList.FindStyleResource('lsttest');
      if Assigned(vFMXObj) then vString:=vFmxObj.ClassName
                           else vstring:='nil';
      ShowMessage('avant Apply '+vstring );
      {$ENDIF}
     
      VItemMainList.ApplyStyleLookup;
      vFMXObj := vItemMainList.FindStyleResource('lsttest');
     
      {$IFDEF DEBUG}
      if Assigned(vFMXObj) then vString:=vFmxObj.ClassName
                           else vstring:='nil';
      ShowMessage('après Apply '+vstring );
     {$ENDIF}  
     
      vFMXObj := vItemMainList.FindStyleResource('lsttest');
     
      if Assigned(vFMXObj) then
      begin
        vItemSubList:=TlistBoxItem.Create(vFmxObj);
        vItemSubList.Text := 'Test onCreate';
        TListBox(vFMXObj).AddObject(vItemSubList);
      end;
     
    end;
    deux "astuces" :
    - la première pour le "titre" j'ai utilisé VItemMainList.StylesData['labtest.text']:=, j'ai voulu bien sûr ensuite essayé la même chose pour les items de la liste lsttest mais non, ça coinçait.
    - la seconde, me disant qu'il fallait certainement "rafraichir" l'élément j'ai utilisé [CODELINE] VItemMainList.ApplyStyleLookup;[/CODELINE] et là FindStyleResource renvoi bien quelque chose (j'ai laissé pour preuve les tests showmessage).

    Seul essai que je n'ai pas fait, c'est, pour éviter l'utilisation de la première astuce, "monter" le ApplyStyleLookup afin d'accéder au "titre" par un FindStyleResource mais je pense que ce serait ok (à vérifier)
    [Edit]
    je viens de faire ce test et c'est bien ce que je subodorai
    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.FormCreate(Sender: TObject);
    var
      vItemMainList, vItemSubList : TListBoxItem;
      vFMXObj : TFmxObject;
      vString : String;
    begin
    
      vItemMainList := TListBoxItem.Create(listBox1);
      vItemMainList.StyleLookup := 'lstComplexe';
      vItemMainList.Height := 100;
      listBox1.AddObject(vItemMainList);
      vItemMainList.ApplyStyleLookup;
      vFMXObj := vItemMainList.FindStyleResource('labtest');
      if Assigned(vFMXObj) then TLabel(vFMXObj).Text:='Test dossier onCreate';
    
      vItemMainList := listBox1.ListItems[0];
      vFMXObj := vItemMainList.FindStyleResource('lsttest');
      if Assigned(vFMXObj) then
      begin
        vItemSubList:=TlistBoxItem.Create(vFmxObj);
        vItemSubList.Text := 'Test onCreate';
        TListBox(vFMXObj).AddObject(vItemSubList);
      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

  16. #16
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 385
    Points : 2 999
    Points
    2 999
    Par défaut
    bizarre, j'avais aussi testé avec ApplyStyleLookup mais ça n'a rien donné.
    Précision, j'ai testé sur Berlin.

  17. #17
    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 Papy214 Voir le message
    bizarre, j'avais aussi testé avec ApplyStyleLookup mais ça n'a rien donné.
    Précision, j'ai testé sur Berlin.
    Je ne pense pas que Berlin change quoique ce soit. Mon premier essai avec ApplyStyleLookup n'avait pas fonctionné non plus, j'avais utilisé ListBox1.ApplyStyleLookup au lieu de vItemMainList.ApplyStyleLookup;
    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

  18. #18
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Merci beaucoup pour l'aide, cela fonctionne très bien avec le ApplyStyleLookUp
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  19. #19
    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
    Juste un petit complément dans l'exemple que tu nous a envoyé tu n'as pas référencé la propriété StyleBook de l'objet form1 comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    object Form1: TForm1
      Left = 0
      Top = 0
      Caption = 'Form1'
      ClientHeight = 480
      ClientWidth = 640
      StyleBook = StyleBook1

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

Discussions similaires

  1. récupération d'un objet à partir d'un Dataset
    Par midotoon dans le forum C#
    Réponses: 0
    Dernier message: 29/10/2008, 13h13
  2. erreur récupération d'un objet ResultSet
    Par shada dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 22/08/2008, 10h07
  3. Réponses: 4
    Dernier message: 29/06/2007, 11h17
  4. Récupération d'un objet d'une hashtable
    Par yazman dans le forum C#
    Réponses: 2
    Dernier message: 03/05/2007, 16h13
  5. JTable récupération d'un objet
    Par qwiskas dans le forum Composants
    Réponses: 7
    Dernier message: 31/10/2006, 16h35

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