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 :

Propagation des styles [Windows]


Sujet :

Composants FMX Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Propagation des styles
    Bonjour,

    En Qt, si je définis une police pour un widget (conteneur), tous les objets qui lui sont rattachés (QComboBox, QLineEdit...) en bénéficient :
    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    fLogin::fLogin(QWidget *parent) :
        QDialog(parent),
        ui(new Ui::fLogin)
    {
        ui->setupUi(this);
        QString style = "font-family: \"Comic Sans MS\"; font-size:13px; border-bottom: 1px solid grey;";
        ui->aWidget->setStyleSheet(style);
        [...]
    }
    J'essaie de reproduire un comportement identique en FMX.
    C'est possible ? Merci.
    Dernière modification par tourlourou ; 25/09/2014 à 08h59.

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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    comme expliqué ici, les Styles Firemonkey n'ont rien à voir avec les feuilles de style CSS ou QT.

    ce sont des objets instanciés pour créer un visuel et non des attributs propagés sur un composant et ses enfants.

    ce que tu voudrais c'est la propriété ParentFont de la VCL, mais à ma connaissance elle n'existe pas en FMX.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour Paul,

    Je persiste simplement parce que FMX, c'est bien de la POO ? Cela gère les styles et cela gère les héritages mais pas l'héritage de styles ? Il n'y a pas un problème conceptuel là ? Ce que tu essaies de me faire comprendre, c'est que mes imposants et difficiles fichiers.style ne me permettent "rien" en échange pour régler ce problème ? J'ai tourné le problème dans tous les sens. Impasse sauf en effet, à définir le style de chacun des objets... dans la "feuille" de style qui n'en est pas une j'ai bien compris. Ce qui ne me donne pas une solution réellement exploitable. Comme je l'ai écrit, j'ai porté le même projet (un QCM) de Lazarus à Qt puis à Delphi FMX. Fonctionnellement même si la méthode n'est pas idéale en Lazarus et Delphi (ouverture séquentielle de Form avec fermeture de l'appelant par l'appelé) et que le problème par contre résolu parfaitement en Qt a été "coton", Lazarus et Delphi ont été plus rapides pour la réalisation de la couche métier. Maintenant, je voudrais le même niveau de finition au niveau GUI qu'en Qt... Et là, je peine c'est le moins qu'on puisse dire.
    Dernière modification par Invité ; 25/09/2014 à 11h30.

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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Citation Envoyé par selzig Voir le message
    Bonjour Paul,

    Je persiste simplement parce que FMX, c'est bien de la POO ? Cela gère les styles et cela gère les héritages mais pas l'héritage de styles ? Il n'y a pas un problème conceptuel là ? Ce que tu essaies de me faire comprendre, c'est que mes imposants et difficiles fichiers.style ne me proposent "rien" en échange pour régler ce problème ?
    alors à mes yeux les styles FMX ne sont pas de la POO, puisque cela se résume à un fichier texte. Ce fichier fait effectivement référence à des objets qui seront instanciés et qui peuvent avoir une logique de programmation, mais la feuille de style n'est pas un lange de programmation.

    Je pense que

    1) le nom "Style" est mal choisi car il a une trop grande connotation CSS
    2) que les Styles Firemonkey répondent au besoin de pouvoir relooker l'application pour coller à la plateforme, un peu comme Windows relooke ses composants à chaque nouvelle version, mais ce n'est pas une logique de design d'application.

    Je me trompe peut-être mais je ne pense pas que le Style soit là pour réagir aux données de l'application, les propriétés de l'objet sont là pour ça. Comme expliqué dans le lien donné dans mon précédent message, ce n'est pas au style de décider de changer la couleur du texte quand un nombre est négatif, c'est au composant de le faire, éventuellement en s'appuyant sur un style dédié à cet effet.

    Quand à l'absence de ParentFont, je trouve cela dommage en effet, mais ça n'a rien à voir avec les Styles.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    Je me trompe peut-être mais je ne pense pas que le Style soit là pour réagir aux données de l'application, les propriétés de l'objet sont là pour ça. Comme expliqué dans le lien donné dans mon précédent message, ce n'est pas au style de décider de changer la couleur du texte quand un nombre est négatif, c'est au composant de le faire, éventuellement en s'appuyant sur un style dédié à cet effet.
    Oui, je peux comprendre cette conception des choses sauf que si vous commencez à définir les styles (à les utiliser) cela impacte directement toute la Form et ce qu'elle contient. Alors d'un côté, tout est modifié et de l'autre rien n'est modifiable sauf à utiliser votre méthode composant par composant... Je conteste fortement cette approche en Desktop. En tablette, c'est acceptable, peut-être souhaitable... Je n'en suis pas persuadé : cela me fait penser à Webdev et ses feuilles de style. Un système propriétaire vraiment très différent, assez compliqué à appréhender, facile à utiliser immédiatement, moins simple d'accès dès que l'on veut personnaliser et qui devient difficilement maîtrisable (pour moi) au fur et à mesure que le projet prend de l'envergure... pour une efficacité correcte je l'admets. Mais à côté, le CSS et son approche, c'est simple et puissant, brillant. J'ai pensé un temps combiner le meilleur des 2 mondes mais là, je suis perplexe... et à bout d'imagination et de ressources. Vraiment. Cela mérite (nouvelle) réflexion.
    Dernière modification par Invité ; 25/09/2014 à 14h32.

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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Citation Envoyé par selzig Voir le message
    Oui, je peux comprendre cette conception des choses sauf que si vous commencez à définir les styles (à les utiliser) cela impacte directement toute la Form et ce qu'elle contient. Alors d'un côté, tout est modifié et de l'autre rien n'est modifiable sauf à utiliser votre méthode composant par composant... Je conteste fortement cette approche en Desktop. En tablette, c'est acceptable sinon souhaitable... Cela me fait penser à Webdev et ses feuilles de style. Un système propriétaire vraiment très différent, assez compliqué qui devient difficilement maîtrisable (pour moi) au fur et à mesure que le projet prend de l'envergure... pour une efficacité correcte je l'admets. Mais à côté, le CSS et son approche, c'est simple et puissant, brillant. J'ai pensé un temps combiner le meilleur des 2 mondes mais là, je suis perplexe... et à bout d'imagination et de ressources. Vraiment. Cela mérite (nouvelle) réflexion.
    non, les CSS ce n'est pas simple, il suffit d'intégrer le feuilles de style de Bootstrap pour péter toutes la présentation d'une page web. Ou alors il faut utiliser Bootstrap dès le départ, et ne pas sortir des modèles prévus sinon ça devient très vite très pénible à gérer.

    En fait, ils auraient du appeler les Styles Firemonkey des "Skins", ça aurait évité de porter à confusion. D'ailleurs dans une page web on peut fixer des attributs en fonction de la résolution écran, sous Firemonkey c'est le rôle de FireUI (en parti) et non celui des Styles.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  7. #7
    Membre Expert
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 543
    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 543
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Est ce que l'utilisation du composant TStyleBook dans FMX peut répondre à ton besoin ?
    Je pense que ma réponse peut te paraitre simpliste je te prépare donc un exemple pour faire une modification dynamique du style

  8. #8
    Membre Expert
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 543
    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 543
    Billets dans le blog
    10
    Par défaut
    Voici un début d'exemple en XE3
    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
    42
    43
    44
    45
    46
     
    uses
      System.SysUtils, System.Types, System.UITypes, System.Rtti, System.Classes,
      System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.Layouts,
      FMX.ListBox, FMX.Objects ;
     
    type
      TForm1 = class(TForm)
        StyleBook1: TStyleBook;
        Button1: TButton;
        ListBox1: TListBox;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
     
    ....
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      O1 : TLayOut ;
      MS1, MS2: TMemoryStream;
      i1,i2, iMax : integer ;
      Text1 : TText ;
    begin
      StyleBook1.Resource.LoadFromFile('x.txt');
      MS1 := TMemoryStream.Create ;
      MS2 := TMemoryStream.Create;
      StyleBook1.Resource.SaveToStream (MS2);
      MS2.Seek(0, soFromBeginning);
      ObjectTextToBinary(MS2, MS1);
      MS1.Seek(0, soFromBeginning);
      O1 := TLayOut.create(nil) ;
      MS1.ReadComponent(O1);
      MS2.Free;
      MS1.Free;
      i2 := 0 ;
      ListBox1.Items.Clear ;
      for i1 := 0 to O1.ComponentCount-1 do
      begin
        if O1.Components[i1] is TText then
        begin
          Text1 := O1.Components[i1] as TText ;
          ListBox1.Items.Add(Text1.Font.Family) ;
        end;
      end;
      O1.Destroy;
    end;
    Le fichier x.txt à été généré à partir de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    StyleBook1.Resource.SaveToFile('x.txt');
    J'ai retiré les TabOrder dans les TSpeedButton (ce style provient d'un exemple en XE2)
    Sachant qu'il faut rendre cette procédure récursive et recharger StyleBook1.Resource après modification de la fonte

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Merci pour votre code. Malheureusement il m'est difficile de me faire une idée dans la mesure où je ne dispose pas du fichier style 'x.txt'. S'agit-il d'un fichier complet de style dans le genre de celui fourni par Embarcadero, ou plus simplement d'une surcharge concernant les composants utilisés dans votre code ?
    Le fichier x.txt à été généré à partir de
    StyleBook1.Resource.SaveToFile('x.txt');
    En lisant la fin de votre message, j'ai un doute au niveau de sa création et je suppose que mon extrapolation est erronée. Ce que je comprends est que vous proposez de créer le "style" de manière dynamique dans le code -comme le propose Paul en "mode VCL"- pour l'enregistrer dans un fichier de type style même si son extension est 'txt', toujours de manière dynamique (donc toujours en mode run du projet). Puis vous commentez cette partie de votre code générant le fichier style avant de recompiler le projet qui exploitera le style du fichier par l'autre partie de votre code (le LoadFromFile). Est-ce cela ?



    En ce qui concerne l'utilisation de la ressource proprement dite, d'après ce que je peux lire, cela pourrait être en effet être une instanciation dynamique à partir des "skins". L'appellation de Paul me convient tout à fait. Et cela pourrait amener, sans doute (je ne m'avance plus de trop) la souplesse nécessaire.

    Reste cependant la gymnastique "évoquée" ci-dessus par exemple dans la TStringGid pour changer l'apparence de certaines cellules : bien que FireMonkey se veuille une plate-forme graphique d'avenir (HD, 3D), les seules méthodes que j'ai réussi à mettre en oeuvre sont peu convaincantes... notamment si on compare la mise en oeuvre VCL/FMX. Les "seules" parce qu'il y a un gros point d'incertitude. Y en a-t-il d'autres ? Sont-ce les "bonnes" ?

    Par contre, certitude, je n'accepte pas bien qu'on invoque le multi-OS pour expliquer une éventuelle difficulté ou une "potentielle" incapacité de mise en oeuvre avec FMX. Mon Mac et mon PC ont les mêmes capacités graphiques et les objets sont aussi élaborés dans un OS que dans l'autre. Donc si on prétend développer en Win et en Mac, il n'y a pas à présenter de régression de mise en oeuvre (et encore moins de capacités) au niveau des objets. FMX doit au moins être au niveau de VCL sous Windows. Et sous Mac, l'exigence est la même que celle attendue pour Windows. Voila où en sont ma réflexion actuellement et l'objet de mon approche FMX. Et je cogite toujours : les exigences sont peut être respectées et présentes dans FireMonkey... Mais j'ai beaucoup de mal à les atteindre.
    Dernière modification par Invité ; 26/09/2014 à 05h49.

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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Citation Envoyé par selzig Voir le message
    Par contre, certitude, je n'accepte pas bien qu'on invoque le multi-OS pour expliquer une éventuelle difficulté ou une "potentielle" incapacité de mise en oeuvre avec FMX. Mon Mac et mon PC ont les mêmes capacités graphiques et les objets sont aussi élaborés dans un OS que dans l'autre. Donc si on prétend développer en Win et en Mac, il n'y a pas à présenter de régression de mise en oeuvre (et encore moins de capacités) au niveau des objets. FMX doit au moins être au niveau de VCL sous Windows. Et sous Mac, l'exigence est la même que celle attendue pour Windows. Voila où en sont ma réflexion actuellement et l'objet de mon approche FMX. Et je cogite toujours : les exigences sont peut être respectées et présentes dans FireMonkey... Mais j'ai beaucoup de mal à les atteindre.
    le problème du multi-os c'est que Windows et MacOS ne proposent pas les mêmes composants natifs, ils n'ont pas le même look ni tout à fait le même fonctionnement...d'où le choix d'Embarcadero de laisser la VCL sous Windows uniquement et de proposer autre chose pour le multiplateforme.

    il aurait été possible de proposer une VCL pour OSX incompatible avec la VCL Windows mais ça aurait nécessité de doubler les développements. Avec Delphi 6/7 et Kylix il y avait QT mais ça n'a pas été un succès remarquable : qui connait une application développée avec QT sous Delphi ? Donc avec Firemonkey le même source compile sous Windows, MacOX et - depuis XE7 qui réunit les environnement Desktop et Mobile - pour iOS et Android.

    Mais le défi était d'avoir quelque chose de multiplateforme qui garde un look natif, d'où les Skins Styles Firemonkey et la période d'adaptation nécessaire aux développeurs habitués depuis 20 ans à la VCL
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  11. #11
    Membre Expert
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 543
    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 543
    Billets dans le blog
    10
    Par défaut
    Merci pour votre code. Malheureusement il m'est difficile de me faire une idée dans la mesure où je ne dispose pas du fichier style 'x.txt'.
    Le fichier de style est chargé avec l'éditeur de style de la propriété Resource de TStyleBook en phase de conception.
    Voir http://docwiki.embarcadero.com/RADSt...les_FireMonkey
    Ce fichier de ressource étant en binaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    StyleBook1.Resource.SaveToFile('x.txt')
    en phase d'éxécution permet de le sauvegarder en format texte ANSI pour le retravailler par un éditeur de texte

  12. #12
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    ALWEBER
    Merci pour votre aide. Je n'en étais pas au stade du placement du style dans le fichier de ressources, vu qu'il est possible de lire et d'exploiter directement les fichiers styles. Je ne sais plus comment on fait en Delphi pour intégrer des fichiers en ressources mais en Lazarus on passe par un utilitaire externe et une directive de compilation. C'est simple et efficace.

    Pour le reste, c'est bon. Cela valait le coup de se lever de bonne heure. Donc c'est fonctionnel avec mon approche un peu "particulière"... Il faut évidemment faire des concessions au niveau de l'ergonomie du code et des contraintes, hum... je vais rester gentil. Disons que c'est un autre monde. J'essaye maintenant de voir si le produit est vraiment multi-plateformes... Mon QCM est-il portable sur ma tablette Galaxy Tab 3 et avec quelle modification ? Bon déjà, il faut que j'arrive à piloter la tablette. Serge. Help !

    Déjà une blague (style par défaut : i.e. sans style) : je passe de l'onglet Windows 32 bits à Androïd, ma forme se transforme pour s'adapter à la cible de développement. Je repasse d'Androïd à Windows, les champs ne retrouvent pas leur taille d'origine (par défaut) ?! On sauvegarde comment ? Autrement dit, ma présentation Windows initiale a disparu. J'ai déjà loupé quelque chose. Il faut copier le projet d'origine et travailler sur la copie ?

    Encore merci pour votre aide.
    Dernière modification par Invité ; 26/09/2014 à 14h43.

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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    attention, dans FireUI il y a deux combo, la première permet de choisir le mode d'affichage, la seconde permet de déclarer une nouvelle vue. Pour personnaliser le FMX en fonction de la plateforme il faut créer des vues, sinon c'est toujours la vue maître qui est utilisée dans tous les cas et les modifications s'appliquent donc partout.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

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

Discussions similaires

  1. Propagation des styles
    Par Niak74 dans le forum Android
    Réponses: 2
    Dernier message: 07/01/2015, 23h05
  2. Récupérer le nom des styles de police
    Par boublee dans le forum Windows
    Réponses: 1
    Dernier message: 10/08/2005, 17h02
  3. [CSS2] Souci d'héritage et de priorité des styles.
    Par ARRG dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 12/07/2005, 09h03
  4. Des styles pour le texte et les liens dans la meme div?
    Par Donkey' Shot dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 26/01/2005, 20h03
  5. Etude des "styles" de programmation
    Par RiRi51 dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 12/03/2003, 19h50

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