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 :

Styles. Utilisation de FindStyleResource


Sujet :

Composants FMX Delphi

  1. #1
    Rédacteur/Modérateur

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

    FindStyleResource a deux syntaxes.

    Pour la première function FindStyleResource(const AStyleLookup: string; const Clone: Boolean = False): TFmxObject; overload; je n'éprouve pas de difficultés majeures à abtenir ce que je veux récupérer sauf qu'il n'est pas très pratique d'avoir à : déclarer une variable, transtyper la fonction et tester si la variable est assignée.

    La seconde function FindStyleResource<T: TFmxObject>(const AStyleLookup: string; var AResource: T): Boolean; me pose plus de soucis.
    ceci fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Header.Items[0].FindStyleResource<TText>('text',Texte); // Header:= THeader(StringGrid1.FindStyleResource('header'));
    Mais, la plupart du temps, je me fais rejeter par une syntaxe incorrecte que j'arrive à contourner en trans-typant (encore ) avec TStyledControl(composant)


    Me penchant sur ce sujet, connaissez-vous d'autres méthodes ?
    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

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

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

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 611
    Points
    3 611
    Par défaut
    En fait la seconde syntaxe (type générique) permet de récupérer la resource qui doit être de la classe ou descendante de la classe spécifiée, si le StyleName recherché n'existe pas ou n'est pas du bon type, ça ne renvoie rien.

    Avec la première syntaxe tu récupères l'objet lié au StyleName du composant si ce stylename existe, qu'il qu'en soit le type. Ca permet plus de flexibilité dans la personnalisation des composants (mais ça implique de tester le type ou les interfaces et de transtyper pour se servir du résultat).

    Dans la seconde version on sait déjà ce qu'on veut traiter, donc on le dit (de préférence en utilisant les interfaces ou la classe ancêtre TCustomXXX quand c'est possible). En revanche si on est trop précis, la personnalisation des composants ne sera plus traitée par ton code.

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 036
    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 036
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    Je suis d'accord avec cette analyse.

    Maintenant, je me pose d'autres questions sur les styles et les moyens d'accès.
    Prenons le cas d'un TExpander
    Nom : Capture.PNG
Affichages : 219
Taille : 2,7 Ko

    Sur les 5 éléments constitutifs, seuls les éléments ayant un nom de style (StyleName) sont accessibles avec FindStyleResource comment alors, au runtime, modifier la couleur de Rectangle, qui lui n'en a pas ?
    Idem, je viens de comprendre que pour accéder aux éléments "nommés" il faut utiliser ceux-ci et non la "hierarchie" visible sur l'image. Ainsi "text" est accessible par
    Expander1.FindStyleResource<TText>('text',aTTextvar)et non Expander1.FindStyleResource<TText>('Rectangle.header.text',aTTextvar)donc, une lecture "à plat". Je comprends mieux mes soucis

    Maintenant, je vais m'attacher à ce Rectangle. Oui bien sûr, il aurait été "nommé" background comme pour la plupart des autres éléments de style, ç'eut été plus facile ! Mais d'un autre côté, il y a très certainement d'autres "composantes" du même genre dissimulées çà et là. Peut-être qu'un simple recensement des enfants peut le faire, je vais m'atteler à cette question de matin
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 036
    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 036
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Peut-être qu'un simple recensement des enfants peut le faire, je vais m'atteler à cette question de matin
    résultat de mes essais : c'est possible
    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
     
        sb: TFmxObject;
    begin
    if not Assigned(expander1.Scene.StyleBook) then
        sb := TStyleManager.ActiveStyleForScene(Expander1.Scene)
      else
        sb := expander1.Scene.StyleBook.Style;
     
    // ci dessus c'est remplaçable par 
    // if Assigned(Stylebook) then sb:=Stylebook.Style  else sb:=TStyleManager.ActiveStyle(Self);
     
     var st:= sb.FindStyleResource('expanderstyle');
     if assigned(st) then
      begin
    //   showmessage('Components '+st.ComponentCount.ToString+' Childrens '+st.ChildrenCount.ToString);   // donne "Components 5 Childrens 1"
       if st.Children[0] is Trectangle then
        begin
         aRectangle := st.children[0] as TRectangle;
         aRectangle.Fill.Color:=Talphacolors.black;
         TstyleManager.UpdateScenes; // important, c'est ce qui fait le "repaint" mais, hélas, de toute la forme  
        end;
      end;
    résultat
    Nom : Capture.PNG
Affichages : 219
Taille : 27,3 Ko
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 036
    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 036
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    Vous vous demandez peut-être pourquoi je fais ces recherches et ces digressions ?
    La réponse est dans cette image, où j'avais besoin d'obtenir : la fonte et la couleur utilisée par l'entête de colonne

    Nom : Capture.PNG
Affichages : 213
Taille : 43,5 Ko

    encore imparfaite à cause du style utilisé :
    • le background est un styleobject en liaison avec une image (ce que je déteste)
    • le texte utilise des marges pour ne pas "déborder" sur le background << conclusion, je vais devoir récupérer les marges et les appliquer à mon GridPanelLayout


    ce qui ramène aux liens

    et m'ouvre des pistes non encore débroussaillées sur l'inclusion d'éléments dans les styles avec pour objectif final, répondre à un de mes questionnements : comment ajouter un style pour un nouveau composant ?
    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. Réponses: 12
    Dernier message: 26/02/2015, 13h20
  2. [CSS] ré utiliser des styles
    Par javaSudOuest dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 16/09/2005, 12h47
  3. les "manifest" pour utiliser le style XP
    Par Mr bizzz dans le forum MFC
    Réponses: 3
    Dernier message: 01/08/2005, 16h28
  4. [CR 10] Utiliser des feuilles de style
    Par Giovanny Temgoua dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 04/04/2005, 10h36
  5. Comment utiliser les styles XP avec Dev-C++?
    Par abraxas dans le forum Dev-C++
    Réponses: 3
    Dernier message: 05/10/2003, 19h47

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