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 :

A quoi sert la propriété StyleName des composants ?


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 A quoi sert la propriété StyleName des composants ?
    Bonjour,

    Tests avec la version 10.4.1

    Je suis intrigué, la plupart des composants ont une propriété StyleName mais je ne vois pas son utilisation.
    ATTENTION, je parle bien de la propriété StyleName pas StyleLookup

    Si j'en crois l'aide pour cette propriété
    Spécifie le nom du style pour ce composant FMX.

    Lisez ou définissez la propriété StyleName pour obtenir ou définir le nom du style pour ce composant FireMonkey. Par exemple, la propriété StyleName de l'objet TRectangle peut être définie sur 'backgroundstyle' ou 'panelstyle'.
    Nom : Capture.PNG
Affichages : 202
Taille : 4,5 Ko
    Pour tester ça j'ai utilisé ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     Button1.Tag:=Button1.Tag+1;
     case Button1.Tag of
       1 : Rectangle1.StyleName:='panelstyle';
       else begin
           Button1.Tag:=0;
           Rectangle1.StyleName:='backgroundstyle';
       end;
     end;
     Label2.Text:=Rectangle1.StyleName;
    end;
    Rien à faire ! Je loupe certainement quelque chose
    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
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 449
    Points : 24 856
    Points
    24 856
    Par défaut
    Question bête dans le style que tu as choisi, 'backgroundstyle' et 'panelstyle' sont-ils différents

    tu dois connaitre cette vieille démo Exploring Delphi XE2 – Tweaking the FireMonkey Styles , tu peux vérifier si dans la feuille de style que les éléments sont bien différents
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  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
    Bonjour,
    Citation Envoyé par ShaiLeTroll Voir le message
    Question bête dans le style que tu as choisi, 'backgroundstyle' et 'panelstyle' sont-ils différents
    Oui, pour preuve sur l'image tu as un panel et un rectangle

    tu peux vérifier si dans la feuille de style que les éléments sont bien différents
    c'est bien le cas.
    Dans l'article que tu cites le StyleName que l'on voit est dans un fichier Style, en gros ce StyleName sera utilisé dans une propriété StyleLookup

    Dans le cas qui me préoccupe il s'agit, à l'inverse de la propriété StyleName du composant déposé sur la fiche. TRectangle n'est pas (comme certains autres composants) un composant stylé (donc pas de stylelookup). Je pense qu'il y a un non dit dans la documentation, il devrait être indiqué que cette propriété ne sert que dans la création/modification de fichier style.

    En fait si je mentionne ce fait c'est que je suis "tombé" sur un truc gênant. J'utilise de plus en plus des TPath monochrome pour mes "icones de boutons". Dépendant du style à appliquer la couleur doit changer (du noir sur un Ubuntu Style, ça ne le fait vraiment pas ), je me proposai donc de récupérer la couleur utilisée dans des dessins tout prêt (comme les diverses images, stylelookup, pour les boutons) et appliquer celles-ci

    Bon, c'est possible sur la base de recherche récursive de composant comme j'ai pu le tester avec ce code

    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
    procedure TForm1.Button1Click(Sender: TObject);
       procedure Recursive(AComponent : TComponent);
       begin
         if (AComponent is TPath) then
          begin
           if Sametext(TPath(AComponent).StyleName,'responsive') then   // ici stylename n'est en fait qu'un TagString
            begin
             TPath(AComponent).Fill.Color:=TAlphaColors.Aquamarine;
             TPath(AComponent).Stroke.Color:=TAlphaColors.Darkblue;
            end;
          end
         else if AComponent.ComponentCount>0 then
           for var i:=0 to ComponentCount-1 do Recursive(AComponent.Components[i]);
       end;
     
    begin
      for var i:=0 to ComponentCount-1 do
       Recursive(Components[i]);
    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

  4. #4
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    si je me souviens bien, tu peux utiliser le StyleName d'un composant dans le StyleLookup d'un autre

    exemple, tu crées un panel avec bouton et edit et tu lui donnes le stylename "toto"
    si tu crées un second panel avec simplement le stylelookup "toto" il affichera un bouton et un edit
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Membre à l'essai
    Profil pro
    Retraité Université de Strasbourg
    Inscrit en
    Janvier 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Retraité Université de Strasbourg

    Informations forums :
    Inscription : Janvier 2007
    Messages : 8
    Points : 14
    Points
    14
    Par défaut
    Je viens de faire des essais et confirme l'information de Paul.
    Attention cependant : le "stylename" est sensible à la casse ('Toto'<>'toto'), de plus, si les dimensions du nouvel objet sont différentes, vérifier et modifier éventuellement l'ancrage des objets contenus dans l'objet de référence (dans l'exemple de Paul bouton et edit).
    D'autre part, il s'agit bien d'un effet de style (= ici l'aspect du Panel), les objets contenus ne sont pas directement accessibles. A la conception, un changement dans l'objet de référence (par ex. propriété Text du bouton) n'est pas répercutée sur le nouvel objet (annuler son "stylelookup" puis le rétablir pour prendre en compte les modifications...), cependant ces modifications sont bien répercutées à l'exécution!

    Citation Envoyé par Paul TOTH Voir le message
    si je me souviens bien, tu peux utiliser le StyleName d'un composant dans le StyleLookup d'un autre

    exemple, tu crées un panel avec bouton et edit et tu lui donnes le stylename "toto"
    si tu crées un second panel avec simplement le stylelookup "toto" il affichera un bouton et un edit
    Encore un grand merci à vous tous, pour vos conseils, vos interventions et vos tutoriels qui me sont d'une grande aide pour progresser.
    Jacques

  6. #6
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    Citation Envoyé par jbrosse Voir le message
    Je viens de faire des essais et confirme l'information de Paul.
    Attention cependant : le "stylename" est sensible à la casse ('Toto'<>'toto'), de plus, si les dimensions du nouvel objet sont différentes, vérifier et modifier éventuellement l'ancrage des objets contenus dans l'objet de référence (dans l'exemple de Paul bouton et edit).
    D'autre part, il s'agit bien d'un effet de style (= ici l'aspect du Panel), les objets contenus ne sont pas directement accessibles. A la conception, un changement dans l'objet de référence (par ex. propriété Text du bouton) n'est pas répercutée sur le nouvel objet (annuler son "stylelookup" puis le rétablir pour prendre en compte les modifications...), cependant ces modifications sont bien répercutées à l'exécution!



    Encore un grand merci à vous tous, pour vos conseils, vos interventions et vos tutoriels qui me sont d'une grande aide pour progresser.
    Jacques
    cette latence est attendue, un Style FMX c'est une sorte de mini DFM, quand on applique le style, les composants sont instanciés comme enfant du composant, donc une fois que c'est fait on a une copie du style qui vit sa propre vie.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

Discussions similaires

  1. Réponses: 7
    Dernier message: 15/08/2009, 10h52
  2. A quoi sert la propriété JTextField.columns ?
    Par Jcpan dans le forum Composants
    Réponses: 1
    Dernier message: 19/01/2009, 10h15
  3. A quoi sert la Propriété BookMark et BookMarkable
    Par r.mehdi dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 13/06/2008, 12h45
  4. Réponses: 2
    Dernier message: 23/04/2008, 19h56
  5. [2.0] A quoi sert la propriété ValuePath des TreeViews ?
    Par stephane.net dans le forum ASP.NET
    Réponses: 5
    Dernier message: 17/03/2007, 21h09

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