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 :

Style par défaut, mais où est-il caché ?


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 786
    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 786
    Billets dans le blog
    65
    Par défaut Style par défaut, mais où est-il caché ?
    Bonjour,

    La question est plus ou moins dans le titre mais je vais poser quelques constations
    1- Il est évident que l'on utilise un style par défaut quand on crée une nouvelle fiche
    2- dès que l'on veut modifier un style (personnalisé ou pas) ce style ou partie du style est copié dans un TStyleBook
    3- Il y a des références un peu partout à des png (windows 10 xxx.png, Yosemite ...png) pour dessiner les contrôles
    4- au run-time il est possible d'obtenir/modifier des informations de ce style (cf https://www.developpez.net/forums/d1...ouleur-defaut/)
    Donc ces ressources (?) sont bien quelque part, j'ai même lu, je ne sais plus où hélas, que l'on pouvait les ôter et ainsi diminuer la taille du programme principal

    Quelqu'un aurait-il une idée ?

  2. #2
    Membre émérite
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Par défaut
    Bonjour,

    dans les sources FMX on y trouve un (entre autre) fichier rc "FMX.Controls.Win.rc"
    qui fait référence à des styles:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    win7style   			RCDATA "styles\platform\win\Win7.fsf"
    win8style   			RCDATA "styles\platform\win\Win8.fsf"
    win10style   			RCDATA "styles\platform\win\Win10.fsf"
    mais ces styles là je ne les ai pas trouvés sur mon disque dur !!

    si ça peu t'aider

    Cordialement,
    @+

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 786
    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 786
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    merci, c'est certainement ça : directement dans les ressources mais je ne connaissais que les types .vsf et .style pas le .fsf !
    Fait étrange aussi (peut-être ai-je mal cherché) si l'on considère que ta piste est la bonne je trouve :
    FMX.Controls.Mac.rc
    FMX.Controls.Win.rc
    mais pas Android, IOS (ou Linux)
    J'ai l'impression que cela ne concerne que les desktops

    je vais me pencher de plus près sur les codes dissiminés ici ou là (FMX.Controls.xxx.pas ou xxx est la cible)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    TStyleManager.RegisterPlatformStyleResource(TOSPlatform.Android, 'androidstyle');
      TStyleManager.RegisterPlatformStyleResource(TOSPlatform.iOS, 'iosstyle');
      TStyleManager.RegisterPlatformStyleResource(TOSPlatform.OSX, 'osxstyle');
      TStyleManager.RegisterPlatformStyleResource(TOSPlatform.OSX, 'lionstyle');
      TStyleManager.RegisterPlatformStyleSelection(TOSPlatform.OSX, OSXStyleSelection);
      TStyleManager.RegisterPlatformStyleResource(TOSPlatform.Windows, 'win7style');
      TStyleManager.RegisterPlatformStyleResource(TOSPlatform.Windows, 'win8style');
      TStyleManager.RegisterPlatformStyleResource(TOSPlatform.Windows, 'win10style');

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 786
    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 786
    Billets dans le blog
    65
    Par défaut
    Bon, j'avance, peut être pas dans la bonne direction mais voici un petit code qui résume ce que j'ai

    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
    unit Unit48;
     
    interface
     
    uses
      System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
      FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,FMX.Styles,
      FMX.Controls.Presentation, FMX.StdCtrls, FMX.ScrollBox, FMX.Memo;
     
    type
      TForm48 = class(TForm)
        Button1: TButton;
        Memo1: TMemo;
        procedure Button1Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form48: TForm48;
     
    implementation
     
    {$R *.fmx}
     
    procedure TForm48.Button1Click(Sender: TObject);
    var AStyle : TFMXObject;
        ASd : TStyleDescription;
    begin
      // Obtenir le style en cours
      AStyle:=TStyleManager.ActiveStyle(Self);
      // Obtenir des informations de description
      ASD := TStyleManager.FindStyleDescriptor(AStyle);
      Memo1.Lines.Add(ASD.Author);
      // Lister les ressources ?
      TStyleManager.EnumStyleResources( procedure(const AResourceName: string; const APlatform: TOSPlatform) begin memo1.lines.Add(AResourceName) end);
    end;
    end.
    testé sous les plateformes actuellement à ma disposition (Windows, Android) j'obtiens
    Citation Envoyé par windows
    Embarcadero Technologies Inc.
    win10style
    win8style
    win7style
    Citation Envoyé par Android
    Embarcadero Technologies Inc.
    androidstyle

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 786
    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 786
    Billets dans le blog
    65
    Par défaut
    Retour sur ce post pour indiquer qu'il est résolu (même s'il me reste encore un questionnement)

    En fait ces styles sont en ressources, l'inconvénient que j'y vois c'est que ces ressources, on n'a pas vraiment la main dessus. Comment alors (sauf en bidouillant les sources) n'avoir qu'un seul style windows quand dans le manifeste on n'indique qu'une seule version cible histoire de diminuer la taille de l'application (il ne faut pas oublier que ces styles contiennent des png identiques pour plusieurs dpi)

    Nom : Capture.png
Affichages : 208
Taille : 93,2 Ko
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes), D13 (Florence)
    SGBD : Firebird 2.5, 3, 5 et SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  6. #6
    Membre Expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 573
    Par défaut
    Bonjour Serge,
    ça ne répond pas à ta question, mais avec VCL, je fais ;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Var
      AStyle : TCustomStyleServices ; 
      ... 
     
      AStyle:=TStyleManager.ActiveStyle;  // Au début du Create de la Form
     
    // Pour remettre le style Windows :
       TStyleManager.SetStyle(AStyle);
    Je suis sous Windows11, mais je n'ai pas regardé le nom de ce style

    A+
    Charly

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 786
    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 786
    Billets dans le blog
    65
    Par défaut Obtenir et sauvegarder un style contenu en ressource
    Ce post ne répond pas à ma dernière question mais en m'acharnant et j'ouvre d'autres pistes.

    Je cherchais et j'ai, enfin, trouvé comment obtenir les styles par défaut et les sauvegarder en fichier .style, c'est dire un format texte,mais aussi sous les autres formats Indexed ou Binary quoique pour ces deux derniers j'hésite sur l'extension adéquate, lequel de ces deux est le format fsf ?

    Je reste, pour l'instant sur la partie Windows, le résultat est donc obtenu en utilisant les ressources du programme.
    Nom : Capture.png
Affichages : 162
Taille : 48,0 Ko

    je ne mets pas les sources de ce programme, les IA interrogées ne savaient pas le faire , mais je suis prêt à partager mon ébauche à titre privé

    Sur la base de ce dernier je vais désormais m'atteler à l'obtention de ceux des autres OS tout simplement en les récupérant dans les fichiers .res fournis dans les répertoires lib
    plus exactement dans (<>\lib\<os><bit>\[debug|release]\FMX.controls.<os>.res

    Je recherche maintenant des idées "originales" pour traiter l'objet obtenu (un TStyleBook), pour l'instant j'écarte les expressions régulières et me pose des questions sur l'utilisation des RTTI.

    Pour poser un problème précis : comment "éplucher" buttonstyle pour obtenir diverses informations (en particulier les couleurs utilisées, bien que pour les couleurs le problème de ces styles, à bases de zones d'une image png, soit assez complexe j'en ai parfaitement conscience).
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes), D13 (Florence)
    SGBD : Firebird 2.5, 3, 5 et SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  8. #8
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 786
    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 786
    Billets dans le blog
    65
    Par défaut
    Mon projet galère.
    Si j'arrive à extraire les styles des fichiers res ou en utilisant les unités FMX.Controls.Mac, FMX.Controls.Android ,FMX.Controls.iOS (je n'ai pas trouvé l'équivalent pour Linux) je n'arrive pas ensuite à les traiter.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    type
      TStyleBookAccess = class(TStyleBook);  // surcharge de la classe pour accéder à la procedure SetDesigning
    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
        if TStyleStreaming.CanLoadFromResource(LHINst,Styletoget.ToUpper,RT_RCDATA) then
          begin // pour tout ce qui est windows c'est ok
            aFmxObj := TstyleStreaming.LoadFromResource(LHinst, Pchar(styletoget),
            RT_RCDATA);
          end
          else begin // autres que windows 
             ResourceStream:=TResourceStream.Create(LHinst,StyleToGet.ToUpper, RT_RCDATA); // j'obtiens bien quelque chose, j'arrive même à obtenir l'OS 
             ResourceStream.Position:=0;
             try
             {directement   cela ne fonctionne pas message 'Impossible de charger le style depuis le flux'.
            //  aFmxObj := TstyleStreaming.LoadFromStream(resourcestream);
             {n'y arrivant pas, je sauvegarde dans un fichier supposément en .fsf 
             resourceStream.SaveToFile(Styletoget+'test.fsf');  
             TStyleBookAccess(aStyleBook).SetDesigning(True);  // pour qu'un style non windows puisse être lu (cf. https://github.com/geheimniswelten/FMXStyleOverview)
             Stylebook1.LoadFromFile(Styletoget+'test.fsf');
             if stylebook1.UnsupportedPlatform then memo1.Lines.add('non supportée');
     
             // Stylebook1 reste vide !!
     
             except
                resourceStream.free;
             end;
    contenu obtenu pour LIONSTYLE LIONSTYLEtest.zip
    cela ressemble à un fsf mais impossible à charger. Conclusion possible, je me fourvoie en tentant de ne traiter que la partie obtenue ?

    et pourtant si j'utilise FMXStyleOverview.exe j'ai les bons résultats (enfin ceux souhaités)
    Nom : Capture.png
Affichages : 109
Taille : 71,0 Ko
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes), D13 (Florence)
    SGBD : Firebird 2.5, 3, 5 et SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  9. #9
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 786
    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 786
    Billets dans le blog
    65
    Par défaut Avancement significatif
    Nom : Capture.png
Affichages : 99
Taille : 51,2 Ko

    comme vous le constaterez j'ai désormais l'obtention des divers styles "par défaut" (du moins pour ce qui est OSX et MACOS

    le seul hic restant, même la sauvegarde en format texte (cf. image) me fourni un ressourcesbin (non lisible) et non la liste des objets tel que je m'y attendais
    Pourtant ce style obtenu, si je le charge dans un tstylebook fonctionne quelquefois (hélas pas toujours ) ce que je cherche donc désormais à obtenir c'est ce qu'il est possible de faire avec le designer quand cela fonctionne)
    sauvegarder le fichier sous un format style "lisible"

    je n'ai donc pas encore dit mon dernier mot.

    étape 1 : découvrir quand j'obtiens un ResourcesBin (donc un seul item)
    étape 2 : découvrir comment traiter ce type (moins évident car beaucoup de fonctions semblent privées)
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes), D13 (Florence)
    SGBD : Firebird 2.5, 3, 5 et SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  10. #10
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 786
    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 786
    Billets dans le blog
    65
    Par défaut
    Après beaucoup d'élagage, un programme final se dégage.

    Reste une question de chemin. Pour obtenir les divers styles j'utilise les unités FMX.controls.<os>.style toutefois si quelqu'un n'ayant pas téléchargé toutes les plateformes tente de compiler mes sources il va se retrouver en erreur.

    Est-il possible de détecter et de conditionner les uses en fonction de ce qui est installé ?
    L'exemple qui me vient surtout en tête c'est pour l'unité FMX.Controls.Linux.pas qui se trouve dans un emplacement bien particulier puisque dépendant de la version (ici Florence Entreprise)
    C:\Users\Public\Documents\Embarcadero\Studio\37.0\CatalogRepository\FmxLinux\1.80\source
    la partie en gras = BDSCatalogRepository ?

    donc comment conditionner cette partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    {}  ,FMX.Controls.Mac {}
    {}  ,FMX.Controls.Android {}
    {}  ,FMX.Controls.iOS {}
    {}  ,FMX.Controls.Linux {}
    La question subsidiaire sera ensuite de faire une liste des styles disponibles pour alimenter, ce qui est pour l'instant en dur, la boite de choix
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes), D13 (Florence)
    SGBD : Firebird 2.5, 3, 5 et SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  11. #11
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 786
    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 786
    Billets dans le blog
    65
    Par défaut
    J'ai découvert comment résoudre la question subsidiaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     {Remplir la boite de choix}
      aStringlist:=Tstringlist.Create(TDuplicates.dupIgnore,true,false);
      try
      TStyleManager.EnumStyleResources(procedure (const AResourceName: string; const APlatform: TOSPlatform)
        begin
          StyleName:=LeftStr(AResourceName,Length(AResourceName)-5).ToUpper+'style'; // un peu de "cosmétique"
          AStringlist.add(StyleName);
        end);
       combobox1.Items:=astringlist;
       {$IFDEF DEBUG}Memo1.lines:=aStringlist;{$ENDIF}
      finally
        aStringlist.clear;
      end;
    ce qui me donne la liste suivante
    ANDROIDstyle
    GNOMEstyle
    IOS15DARKstyle
    IOSstyle
    LIONstyle
    OSXstyle
    UBUNTUstyle
    WIN10style
    WIN11style
    WIN7style
    WIN8style
    et cela m'a permis de découvrir un style supplémentaire (ios15darkstyle)


    pour ce qui est de mon dilemme de conditionnement j'ai utilisé un fichier .inc dont voici le contenu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    {$DEFINE ALL}
    {.$DEFINE MAC}
    {.$DEFINE IOS}
    {.$DEFINE ANDROID}
    {.$DEFINE LINUX}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    {$I OSInstalled.inc}
     
    uses
    ..
    {$IF Defined(MAC) or Defined(ALL)}  ,FMX.Controls.Mac {$ENDIF}
    {$IF Defined(ANDROID) or Defined(ALL)}  ,FMX.Controls.Android {$ENDIF}
    {$IF Defined(IOS) or Defined(ALL)},FMX.Controls.iOS {$ENDIF}
    {$IF Defined(LINUX) or Defined(ALL)}  ,FMX.Controls.Linux {$ENDIF}
     ;
    toutefois reste qu'une compilation en D12 devra en préalable nécessiter un changement de chemin de recherche. C'est devenu le seul point "noir" de ce projet
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes), D13 (Florence)
    SGBD : Firebird 2.5, 3, 5 et SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 25/05/2007, 18h29
  2. [CKEditor] changer le style par défaut
    Par dedel53 dans le forum Bibliothèques & Frameworks
    Réponses: 1
    Dernier message: 27/03/2007, 10h21
  3. [CSS] copie des styles par défaut html...possible?
    Par luta dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 27/10/2005, 09h50
  4. Réponses: 9
    Dernier message: 12/01/2005, 18h00
  5. read committed, serializable... et par défaut k'en est-il?
    Par superdada dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 01/12/2003, 19h58

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