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 :

FMX : gestion des styles


Sujet :

Composants FMX Delphi

  1. #1
    Membre actif

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2021
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2021
    Messages : 138
    Points : 207
    Points
    207
    Par défaut FMX : gestion des styles
    Bonjour,

    j'essaie de transposer cette TForm Lazarus en FMX.
    Nom : Capture d’écran 2022-01-05 151651.png
Affichages : 548
Taille : 23,6 Ko

    J'ai déjà posé ce genre de question. Malheureusement, la réponse de Serge de l'époque n'est absolument pas universelle... et extrêmement compliquée. Par exemple, si je décide de configurer par défaut un Linux en privilégiant un type de bureau qui définit sa propre couleur par exemple pour les éléments sélectionnés, je passe comment ?

    Voici la partie déclaration de ma TForm Lazarus :
    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
    47
    48
    type
     
    { TAssociateComboclass }
      TcbCATGclass = class
        ID: string;
      end;
     
      TcbMARQclass = class
        ID: string;
      end;
     
    { TForm }
      TFCircularlst = class(TForm)
        cbCATG: TTMSFNCComboBox;
        cbMARQ: TComboBox;
        cbSTATE: TTMSFNCComboBox;
        laVERS: TLabel;
        Fimage: TTMSFNCBitmapContainer;
        ZR: TTMSFNCGrid;
        procedure FormCreate(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
        fPRID, fCAID, fMAID: string;
        fSTATE: integer;
      end;
     
    const
      colID: integer = 0;
      colTITLE: integer = 1;
      colNUMINT: integer = 2;
      colPRICE: integer = 3;
      colSTATE: integer = 4;
      colIMAGE: integer = 5;
      colDATE: integer = 6;
     
    var
      FCircularlst: TFCircularlst;
      FData: TDataModulelz;
      fRES: TBDDres;
      FFontSize: integer;
      FRowSelected: integer;
     
      cbCATGclass: TcbCATGclass;
      cbMARQclass: TcbMARQclass;
     
      h, w: integer;
    Et voici une partie du code de création de la TForm :

    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
    procedure TFCircularlst.FormCreate(Sender: TObject);
    begin
      FData := TDataModulelz.Create(nil);
      with FData.uConn do
      begin
        Server := cServer;
        Port := cPort;
        Database := cDataBase;
        Username := cUserName;
        Password := cPassWord;
      end;
     
      FRowSelected := 0;
      //FFontSize := GetDefaultFontSize(TForm(Sender));
      zr.Appearance.ShowFocus := False;
      //h := GetSystemMetrics(SM_CYHSCROLL);
      //w := GetSystemMetrics(SM_CXVSCROLL);
      with zr.Appearance.FixedSelectedLayout.Fill do
      begin
        Color := clHighlight;
        Font.Color := clHighlightText;
      end;
      with zr.Appearance.FocusedLayout.Fill do
      begin
        Color := clHighlight;
        Font.Color := clHighlightText;
      end;
    end;
    Transposé directement en FMX, j'obtiens ceci :

    Nom : Capture d’écran 2022-01-06 121646.png
Affichages : 532
Taille : 21,6 Ko

    Rien de bien anormal. Mais il me faut contourner ce qui m'amène à plusieurs questions :

    Je récupère puisque c'est multi-OS :

    • la police par défaut de la Form pour l'appliquer si besoin à l'ensemble des composants graphiques. Vous allez me dire totalement inutile. Et je rappelle que j'affiche du HTML dans les cellules de la Grid peut avoir été saisi aussi bien sur un Mac OS, un Linux ou un Windows et même sur un portail WebDev. Il faut donc traiter le HTML pour l'intégrer à la taille de la police "naturelle" de la TForm sous l'OS qui le visualise.
    • je ne parle pas des GetSystemMetrics qui me permettent de tenir compte de la largeur de l'épaisseur des scrollbars si j'ai besoin de faire des calculs de largeur correct de colonne par exemple.
    • Mais mon premier souci, c'est le HightLight que je peux récupérer en Lazarus ce qui permet dans les TMSFNCGrid de TMS d'obtenir la bonne couleur de sélection automatiquement. Désolé Serge de reposer la question.

    Concernant le Highligt, voici ce que cela donne sous Windows si j'enlève les codes assoviés à ZR dans le TForm.create :
    Nom : Capture d’écran 2022-01-06 122149.png
Affichages : 524
Taille : 17,1 Ko
    Le bleu pastel conviendrait très bien sous Windows 10 mais pas sous Windows 11. Je vous laisse imaginer sous Ubuntu ou Mint et mac OS évidemment.

    Donc concernant la Grid, je cherche au moins comme point de départ à atteindre au moins :
    • respecter de la police de la Form dans toutes les cellules y compris les cellules HTML
    • respecter des couleurs de base de l'OS [Font et background] aussi bien que la ligne soit sélectionnée ou pas


    Evidemment, il n'est pas question que je crée un style Windows 10, un style Windows 11, un style mac OS 11, mac OS 12 avec un bureau sombre ou pas, Ubuntu xx avec tel bureau, avec tel autre,...

    L'énorme avantage de Lazarus est qu'il "cause" (récupère) directement avec les objets natifs de l'OS. CE qui rend ce travail aisé.

    Je ne cherche pas non plus à faire des concessions. Ce que je fais en Lazarus, j'estime pouvoir attendre de FMX la même capacité.

    Une approche ? Merci. Gilles

  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
    Désolé, je me répète, mais c'est pas une question de Lazarus ou de Delphi / FMX ou VCL, c'est un composant TMS, c'est à lui de fournir ou pas les mêmes choses.

    Quand on travaille avec FireMonkey on doit oublier ses habitudes de développeur Windows VCL (ou Lazarus qui a transposé les fonctionnements LCL à tous les OS).

    On n'a pas accès à la résolution d'écran en direct de base, faut passer par les API si on le veut vraiment.
    On n'a pas accès aux tailles des éléments, c'est dans les styles qu'il faut bidouiller (et donc interroger le style des éléments qui nous intéresse et fouiller dedans.
    Pour les polices de caractères, on peut sortir du style, mais je recommande de ne pas le faire pour ne pas avoir de mauvaise surprises quand à la taille des conteneurs qui s'adapte en fonction du style et donc qui risque de se chevaucher si on bidouille des trucs en dehors.

    De base, FMX est à voir comme un ensemble de composants graphiques, pas comme les composants "systèmes" de la VCL ou LCL. Ca implique un réel changement d'utilisation car le fonctionnement n'a rien à voir. Il n'est pas possible (ni à mon avis souhaitable) de reproduire ce qu'on faisait dans les fiches LCL/VCL en FMX. Il faut se plier au système proposé et jouer avec les styles, même si leur manipulation n'est pas aisée.

    Pour le highlight, il faut voir comment TMS l'a géré et contacter leur support si ce n'est pas disponible dans la version FireMonkey de leur composant TFNCGrid.

    Le bleu pastel conviendrait très bien sous Windows 10 mais pas sous Windows 11. Je vous laisse imaginer sous Ubuntu ou Mint et mac OS évidemment.
    euh... ok, mais pourquoi c'est ok sous W10 et pas les autres ? Ce n'est pas la même couleur qui sort ?

    il n'est pas question que je crée un style
    Là, je suis entièrement d'accord avec toi : ce n'est pas à nous qui utilisons des composants d'adapter leur fonctionnement à l'OS s'ils sont vendus pour fonctionner sur ces plateformes.
    Par contre, si tu arrives à repérer la partie du style du composant qui te dérange, tu peux la personnaliser directement depuis le concepteur de fiches en faisant une version personnalisée et en choisissant "default" comme OS dans la liste des OS proposée par l'éditeur de styles.

  3. #3
    Membre actif

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2021
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2021
    Messages : 138
    Points : 207
    Points
    207
    Par défaut
    Bonjour,

    alors concernant Windows 10 et Windows 11, tu fais un clic droit sur ton bureau et tu obtiens cela :

    Win 10 : Nom : Capture d’écran 2022-01-06 144904.png
Affichages : 498
Taille : 85,7 Ko

    Win 11 : Nom : Capture d’écran 2022-01-06 144316.png
Affichages : 498
Taille : 68,4 Ko

    Tu vois il y a une petite différence de styles et c'est natif des Windows (i.e. du code Microsoft et du bureau utilisé). Je demande à ce que mes programmes respectent globalement les styles natifs, au moins les polices, leur taille, leur couleur, celles des barres de sélection...

    J'ai compilé un simple programme sous Lazarus en Win 11 :

    Nom : image_2022-01-06_145514.png
Affichages : 488
Taille : 19,4 Ko
    Il respecte l'affichage natif.

    Ce même programme je le compile maintenant sur une lubuntu-20.04.2. Je n'aime pas trop le bureau natif mais celui utilisé par un Collègue "encore en exercice" (i.e. pas encore retraité).
    Nom : Capture d’écran 2022-01-06 143948.png
Affichages : 499
Taille : 4,6 Ko

    Oui c'est un peu "spartiate" comparé à mac OS ou Windows 11 mais les goûts et les couleurs... et puis je crois que mon Collègue tient à son vieil appareil et qu'il lui faut du "léger".
    Tout cela pour te montrer que quand on parle Linux, les variantes des styles natifs sont nombreuses [Ici rien à voir avec gnome]. Et tu remarqueras que les polices natives sont évidemment différentes et celles de lubuntu sont beaucoup plus "larges" que celles de windows.

    Bref, je t'ai bien lu. La faute en revient à TMSFNC sauf que les mêmes composants en Lazarus se connectent parfaitement avec clHighLight et que FMX ne sait pas ce qu'est clHigLight. Les TMSFMX utilisent autant que je me souvienne les styles de FMX... et avec les styles de FMX, je n'ai jamais réussi à m'adapter auX styles natifs de toutes mes cibles.

    Alors tu as raison, mais avec quoi dans FMX, puis-je obtenir aussi bien, aussi "naturel" qu'en Lazarus quand je cible un environnement Desktop ? Est-ce que je dois conclure que FMX en est incapable ? je préfèrerais que l'incapacité soit la mienne. Mais quels que soient mes efforts de recherche et les efforts de ceux qui m'ont répondu, je n'ai jamais trouvé une solution. Ce qui serait quand même une curiosité, pour un IDE qui produit du code compilé, donc qui normalement est plus proche (plus direct) de l'OS que le code d'une machine virtuelle ou qu'un Qt par exemple.

    Je n'en ai pas grand chose à faire des styles fournis par FMX. Je ne suis pas vraiment en extase. Et surtout ,e ne construis pas un site Web ! Ni une application mobile. Mais un classique programme Desktop. Quand un client a choisi Mac OS, on lui affiche du "Mac OS compatible visuellement", et pas un truc à la Windows et pas non plus un truc ressemblant visuellement à gnome et encore moins des fenêtre bariolées avec des boutons "flashis". Enfin, telle est mon approche. Elle est certainement discutable mais elle a le droit d'exister et Firemonkey devrait pouvoir me permettre cette approche. Même avec Qt, je me rapproche plus des styles natifs qu'avec FMX. C'est quand même un comble quand on sait que Qt n'utilise pas directement les objets natifs des OS ! Et dans mon antique approche, c'est le développeur qui définit l'ergonomie, l'aspect, les styles de sa production... pas le RAD . Je suis très reconnaissant à FMX de m'en proposer mais j'aimerais qu'il me laisse une solution pour exercer mon libre arbitre sur la question. Donc je veux bien me plier à l'utilisation des styles de FMX à condition que j'obtienne ce que je veux, si possible en souplesse et en simplicité [là je ne rêve plus depuis longtemps]. Mais je ne veux pas de systèmes de styles figés qui consiste à faire un style par cible (en Linux c'est injouable) et je crains qu'il n'y ait pas moyen d'y échapper.

    Bref tout cela je le sais, je l'ai déjà écrit : ma question est toujours la même, celle posée ci-dessus.

    Cordialement. Gilles

  4. #4
    Rédacteur/Modérateur

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

    Bien que j'ai pas mal évolué sur les styles par rapport au message cité (j'arrive maintenant sans problème à transposer le style ['Windows 10 Desktop'] vers [Default] par une simple manipulation)
    la gestion des couleurs "système" je ne l'ai pas encore fait, j'en ai un début mais pas plus car je ne suis pas sûr d'être parti sur la bonne piste


    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
    unit Lug.FMX.Style.SystemColors;
     
    interface
     
    uses System.UITypes,FMX.Types, FMX.Controls, FMX.Objects, FMX.Styles, FMX.Styles.Objects;
     
     
    // couleurs "système" 
    type TStyleColor = (Background,WindowText,ActiveCaption,InactiveCaption);
    //                    Menu,Window,WindowFrame,MenuText,CaptionText,
    //                    ActiveBorder,InactiveBorder,AppWorkSpace,Highlight,
    //                    HighlightText,BtnFace,BtnShadow,GrayText,BtnText,
    //                    InactiveCaptionText,BtnHighlight,S3DDkShadow,S3DLight,
    //                    InfoText,InfoBk,HotLight,GradientActiveCaption,
    //                    GradientInactiveCaption,MenuHighlight,MenuBar,
    //                    None,Default);
     
     
     
    function luggettextcolor(const style : TFMXObject; aStylecolor : TStyleColor ) : TAlphaColor;  overload;
     
    const
      stName : TArray<String> = ['background','labelstyle','valuelabelstyle','Third'];
     
    implementation
     
    function luggettextcolor(const style : TFMXObject; aStylecolor : TStyleColor ) : TAlphaColor;
     var
      AStyle, aFMxObj: TFMXObject;
    begin
     aFMXObj := TStyleContainer(Style).FindStyleResource(stname[ord(aStyleColor)]);
     if Assigned(aFMXObj) then
          aFMXObj := TText(aFMXObj).FindStyleResource('Text');
     if Assigned(aFMXObj) then
          result:=TText(aFMXObj).TextSettings.FontColor;
    end;
    Utilisation exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm2.Button1Click(Sender: TObject);
    var s : TFMXObject;
    begin
    Memo2.Lines.Clear;
    if Assigned(StyleBook)
       then S := StyleBook.CurrentItem.Style
       else S := TStyleManager.ActiveStyle(Self);
    memo2.Lines.Add(AlphaColorToString(luggettextcolor(S,TStyleColor.WindowText)));

    C'est le gros défaut des styles FMX : on n'a pas accès (elles ne sont pas stockées) à ces valeurs alors que un style FMX est créé à partir d'un style VCL qui lui, contient ces couleurs "système".
    Il faut donc retrouvé où elles sont utilisées et faire une relation (stName) et ce qui est le pire c'est que les styles ne sont pas standard (par exemple 'valuelabelstyle' n'existe pas dans tous les styles)

    Si tu utilises le concepteur de styles de bitmaps en ouvrant un fichier .vsf tu verras toutes les couleurs et fontes mais une sauvegarde en .style applique aux élements et fait disparaitre ces rubriques
    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
    Membre actif

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2021
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2021
    Messages : 138
    Points : 207
    Points
    207
    Par défaut
    Merci Serge,

    au point où j'en suis [où je erre ], j'étudie tout. Mais je cherche un point de départ. Pour l'instant, j'ai bien compris qu'on pouvait récupérer des styles. A la rigueur cela ne gêne pas. Si on peut le transférer en fonction de l'OS cible dans le style par défaut... C'est encore mieux. Mais ensuite peut-on interagir par programmation sur le style par défaut, par exemple au moment du chargement de l'application... dans l'hypothèse où je pourrais récupérer des données de l'OS ?

    Cordialement. Gilles

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    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 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Mais, ensuite, peut-on interagir par programmation sur le style par défaut
    Là, j'ai peut-être un début de solution : Tout composant stylé peu accéder à scene (unité FMX.Controls) donc, en théorie il est possible d'effectuer certains changements. (post #13)
    Cependant cela se corse lorsque la partie à modifier se trouve être un StyleObject (partie d'une image)
    C'est ce que j'ai tenté ici toujours en buttant sur ces StyleObject

    Je dirais, en théorie, qu'il faudrait : soit établir une liste des composants de la forme (par cela j'entend une liste des types de FMXObjects utilisés pas de tous les composants) soit balayer le style en cours et modifier ce qui est possible/voulu selon la technique de ce second post.

    Si on peut le transférer en fonction de l'OS cible dans le style par défaut... C'est encore mieux.
    c'est pas vraiment comme cela que je vois la chose (encore trouble cette vue) Tu as deux types de styles : les "multi-os/version" avec une collection ('default','windows 10','windows 7','android' etc ...) qui s'adapte à l'OS cible soit des "mono-styles" (à charger, plusieurs solutions : ressource, fichier, datamodule , en fonction de l'OS)

    dans l'hypothèse où je pourrais récupérer des données de l'OS
    Là, par contre, aucune idée
    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

  7. #7
    Membre actif

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2021
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2021
    Messages : 138
    Points : 207
    Points
    207
    Par défaut
    Il y a peut-être une petite ouverture avec TStyledSetting.

    Mais (évidemment) Label1.StyledSettings:=Label1.StyledSettings -[TStyledSetting.ssFamily,TStyledSetting.ssSize] est déclarée deprecated dans la doc. C'est déjà compliqué et j'avais oublié les vieux démons de Firemonkey et sa difficile mise au point.

    Je vais insister un peu.

    Cela ressemble à Lazarus :
    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
    47
    48
    unit Unit1;
     
    interface
     
    uses
      System.SysUtils, System.Types, System.UITypes, System.UIConsts, System.Rtti,
      System.Classes,
      System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.Objects,
      FMX.Layouts,
      FMX.Controls.Presentation, FMX.StdCtrls, FMX.Graphics;
     
    type
      TForm1 = class(TForm)
        Label1: TLabel;
        procedure FormCreate(Sender: TObject);
      private
        { Déclarations privées }
        fColorRed: Cardinal;
        fHighLight: Cardinal;
     
      public
        { Déclarations publiques }
     
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.fmx}
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      // https://docwiki.embarcadero.com/Libraries/Sydney/en/FMX.Types.TStyledSetting
      fColorRed := claRed;
      fHighLight := claGray;
     
      with Label1 do
      begin
        StyledSettings := StyledSettings - [TStyledSetting.ssFamily,
          TStyledSetting.ssSize, TStyledSetting.ssFontColor];
        Font.Size := 20;
        FontColor := fColorRed;
      end;
    end;
     
    end.
    Je gère presque les TcomboBox (fond du highlight ?). Ce serait quasiment OK toujours en code pour les TMSFNCGrid mais couleur d'origine de l'OS ? ... par hasard dans un forum ou quelqu'un semble avoir la même demande :
    FireMonkey does not have or use any system-defined colors, colors are explicit RGBA values. FireMonkey has color constants, but they are fixed RGBA values, not resolved by the OS at runtime. In short, system-defined colors are a Windows-specific feature of VCL only, not available in FireMonkey.
    Ce concept FMX est totalement coupé de son OS d'accueil à ce niveau ! C'est aberrant !

  8. #8
    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
    Citation Envoyé par HTML-Dev Voir le message
    Ce concept FMX est totalement coupé de son OS d'accueil à ce niveau ! C'est aberrant !
    Il faut que tu arrêtes de penser comme la VCL ou Lazarus, FMX est un truc qui se base sur des style pour dessiner, aberrant ou pas, c'est comme ça, faut faire avec.

    J'aimerais bien voir une capture d'écran provenant d'un programme Delphi sur le Linux que tu utilises, pour voir la gueule qu'il a. Tant qu'à critiquer, autant qu'on voit ce que tu vois.

  9. #9
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    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 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par HTML-Dev Voir le message
    Il y a peut-être une petite ouverture avec TStyledSetting.
    Pour moi cela n'a pas grand chose à voir enfin pas vraiment. Les StyleSettings, je les utilise quand je veux par exemple que le style ne s'applique pas complètement (ie. changement de fonte)
    Si une propriété se rapproche le plus de ce que tu cherches ce serait plutôt controltype=platform (styled par défaut). Je n'ai fait aucun test à ce sujet et ne suis pas sûr que tout les contrôles visuels ont cette propriété.

    Pour en revenir aux couleurs de fontes. Elles sont donc définies dans les styles mais pas seulement aussi simplement que le petit bout de code que j'ai pu pondre. En effet quelques fois celles-ci sont modifiées par des effets (soit sur l'opacité soit sur la couleur) en fonction de triggers (ismouseover etc...)

    Du coup en fin de soirée je me suis penché sur une autre option : l'ajout, dans le style utilisé ou dans un autre style de TStyleTextObject
    Nom : Capture.PNG
Affichages : 473
Taille : 53,7 Ko
    Si cela fonctionne pour des TLabel malheureusement cela ne fonctionne pas pour les TText qui sont des composants non stylé. Et comme, hélas, les 'text' des styles sont des TText ç'est encore une idée qui foire


    Citation Envoyé par pprem
    Il faut que tu arrêtes de penser comme la VCL ou Lazarus, FMX est un truc qui se base sur des style pour dessiner,
    C'est totalement vrai. Je me demande quand même comment ont été créés les premiers styles, forcément en fonction des couleurs "systeme" qu'un type à du galéré pour trouver au sein des documentations des OS ! Le pire c'est que ça change au fil du temps (histoire d'emmerder le monde et pas que les non vaccinés)
    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

  10. #10
    Membre actif

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2021
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2021
    Messages : 138
    Points : 207
    Points
    207
    Par défaut
    Bonjour à tous 2,

    oui je crois que vous avez raison. Quand je vois que l'évènement onDrawItem n'existe pas en FMX, c'est significatif :

    Nom : Capture d’écran 2022-01-07 084215.png
Affichages : 463
Taille : 20,3 Ko

    Il semble qu'il n'y ait malheureusement pas d'autre solution que de passer par les styles, des styles mal documentés, des styles dont je me demande toujours s'il est possible de changer la couleur d'une barre de sélection de tous les objets d'un même projet contenant des barres de sélection (TcomboBox, TList, TGrid, ou une séltecion de mots dans un TMemo....) par exemple "blanc sur fond orange " ?

    Donc, le challenge avec FMX est qu'il me faut m'investir de manière pointue dans les styles alors que je ne sais pas si au bout j'obtiendrais ce que je veux ! Et comme, les approches explicitées sont rares dans le développement purement Desktop et visiblement les demandes d'explication aussi rares (cf le dernier lien de ma dernière réponse), je doute malgré mes efforts réitérés régulièrement.

    Merci encore pour vos éléments de réflexion. Il m'est difficile d'admettre que 2 jours complets de recherche de documentation, de tests, ne m'ont pas permis d'avoir le début d'une piste autre que celle imposée par les concepteurs de Firemonkey qui visiblement ne m'est pas accessible.

    D'autant que ce n'est pas que je m'entête à ne pas utiliser les styles, c'est qu'à priori avec, je ne peux pas obtenir ce que j'obtiens avec d'autres framework. J'ai bien fait l'effort d'apprendre Qt quand j'ai décidé d'abonner XE 7, d'ailleurs avec les mêmes remarques, les mêmes incapacités -je parle des miennes- et la même lassitude face aux difficultés d'adapter les codes d'une version à l'autre d'un FMX mal stabilisé. Il m' a fallu plus de 3 ans pour commencer à approcher ce que je faisais en Lazarus. Je ne regrette pas l'effort. Mais pour un Delphiste de la première heure qui ne développait à l'époque que sous Windows, il m'est difficile d'admettre que Delphi ne convienne probablement pas à mes développements actuels (muti-OS) car malgré les "encouragements", comparé à d'autres solutions, je le pense "trop limité dans un temps de développement raisonnable" pour du développement multi-OS Desktop , voire même trop limité quelque soit le temps de développement accordé. Pour rester positif, pour le développement mobile, FMX est assez impressionnant... mais loin des exigences d'un programme Desktop.

    Je termine avec ma question initiale qui restera sans réponse encore cette fois :

    comment peut-on avec FMX, afficher des champs HTML dans une TGrid avec la même ergonomie, les mêmes capacités d'adaptation à l'OS cible, la même facilité [le nombre de lignes de code est dérisoire] qu'avec Lazarus voire Qt [où pour ce dernier, j'ai simplement codé un composant de base intégré dans le framework pour le rendre compatible HTML] ?

    Cordialement. Gilles

  11. #11
    Rédacteur/Modérateur

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

    Je pense que tu mélanges plusieurs choses et que ta vision trop VCL sont le noeud du problème

    Tout d'abord TCombobox oui, il n'y a pas de drawitem c'est clair mais si tu y ajoutes multios, je te ferai remarqué que sous android le TCombbobox fait apparaître une boite de dialogue, une sorte de Radiogroupbox, donc c'est plus complexe que ce qu'il y parait. A mon avis ce n'est pas dans le style du combobox qu'il faut chercher mais tout d'abord dans le source du composant.
    Un TCombobox FMX est loin d'arriver à la cheville d'un TDBLookupComboBox VCL, cela ne veut pas dire que tu n'as pas d'alternatives non plus j'aime bien remplacer ces Tcombobox par des Tlistview (voir mon blog sujet combobox aux petits oignons)

    Pour ce qui est d'un texte traitant les balises HTML. A ma connaissance, de base, même la VCL ne propose pas de composant traitant le HTML, il faut passer par des composants tiers.

    Dans une grille, même si cela semble compliqué, c'est possible pour peu de savoir interprété le HTML (comme le propose TMS et son mini HTML) avec pas mal de lignes de codes, en utilisant OndrawdataCell et en utilisant un TTextLayout (j'en parle dans mon tuto sur les grilles FMX)
    Je pense que ce WE j'aurais la curiosité de voir s'il n'est pas possible de faire la même chose avec un simple TLabel

    Citation Envoyé par HTML-Dev Voir le message
    Il semble qu'il n'y ait malheureusement pas d'autre solution que de passer par les styles,
    non pas toujours, tu fais une fixette
    des styles mal documentés
    ça, je concède sans aucune retenue

    des styles dont je me demande toujours s'il est possible de changer la couleur d'une barre de sélection de tous les objets d'un même projet contenant des barres de sélection (TcomboBox, TList, TGrid, ou une séltecion de mots dans un TMemo....) par exemple "blanc sur fond orange " ?
    réponse courte : tu changes le style entier au design en effet rien ne t'empêche de l'éditer, c'est juste compliqué. Une autre solution étant de passer par un bête notepad
    par programmation, c'est plus du cas par cas, mais pour Tlist ou Tlistview c'est assez simple, pour les TGrid onDrawDataCell, pour le TMemo hum, encore un devoir de WE


    Je termine avec ma question initiale
    comment peut-on avec FMX, afficher des champs HTML dans une TGrid avec la même ergonomie, les mêmes capacités d'adaptation à l'OS cible, la même facilité [le nombre de lignes de code est dérisoire] qu'avec Lazarus voire Qt [où pour ce dernier, j'ai simplement codé un composant de base intégré dans le framework pour le rendre compatible HTML] ?
    réponse courte on ne peut pas (et cela n'a rien à voir avec les styles) avec les critères que tu imposes.
    réponse nuancée on peut si on créé comme tu l'a fait pour QT un composant qui interprètra le HTML (comme a pu le faire TMS), une fois ce composant créé, l'utiliser dans un style doit être possible


    EDIT : tu peux toujours regarder https://github.com/digao-dalpiaz/DzHTMLText cela répondra au moins à ta question sur TMemo
    et ceci que j'ai retrouvé
    pour un Tlabel
    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
    Membre actif

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2021
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2021
    Messages : 138
    Points : 207
    Points
    207
    Par défaut
    Bonjour Serge,

    fixette ? effectivement je n'ai vraiment pas progressé . Tout était déjà là, et le problème déjà présent et toujours sans solution. Je ne parlerais pas de fixette (sauf si tu y tiens ) mais d'un manque de lucidité, d'un mauvais choix tactique corrigé après XE 7... ponctué régulièrement d'un retour affectif... des fois que... Cela commence à faire longtemps que je fais du développement multi-OS. Enfin je ne parle pas des mobiles évidemment. Dans mon ancien environnement professionnel, Windows n'est pas le roi, en tout cas, pas le seul. Porter des projets Delphi que je développais avec Delphi Borland vers Mac (XE 2 ?) puis plus tard vers Linux (XE7 ?) me semblait alléchant après la désillusion Kylix. A l'époque Lazarus balbutiait, avait du mal à quitter le giron Delphi 7. Naturellement pour un développeur Delphi, XE était la solution.

    Donc OK, j'assimile bien ton discours et celui de Patrick. Vous êtes parfaitement convaincus du bien fondé et de la suffisance de l'approche FMX. Cela me questionne. On doit avoir des besoins très différents.

    Mais je me moque totalement de la philosophie de l'approche de FMX et même des outils utilisés LiveBindings, Styles, .... Je veux que les outils, les concepts de FMX me permettent de réaliser ce que d'autres plateformes équivalentes, généralistes et multi-OS me permettent. La fixette, parce que j'en ai l'habitude, est que je traite intégralement les textes enrichis en respectant quand même au minimum les choix esthétiques de l'os cible. "Sortir" des sélections en bleu Windows sur une Ubuntu cela ne le fait pas ! Utiliser proprement les polices utilisées nativement par l'OS, notamment respecter la taille nécessaire à l'affichage - y compris avec du texte enrichi -, c'est un minimum ! Mais pour afficher du texte enrichi dans un composant desktop en multi-OS de manière harmonieuse -c'est à dire en n'utilisant pas la police des appareils de saisie qui peuvent être très différentes-, il faut pouvoir détecter la police retenue par défaut par l'OS (enfin par le bureau utilisé, sous rien que sous Ubuntu les possibilités sont nombreuses*), sa taille et éventuellement sa couleur. On en revient au même : on ne va pas créer un style différent (enfin plusieurs) pour chaque distribution de l'OS !

    J'en resterai donc là concernant ma question sur les Grids HTML sous FMX
    Citation Envoyé par SergioMaster Voir le message
    réponse courte on ne peut pas (et cela n'a rien à voir avec les styles) avec les critères que tu imposes
    ... sachant que les critères que j'impose n'ont rien d'extraordinaires enfin pour un développeur VCL/LCL et Qt.

    Conclusion FMX + mes exigences = incompatibilité.

    Encore merci pour le temps que vous m'avez consacré.
    Cordialement. Gilles

  13. #13
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    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 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Bonjour, résultats du WE sur les possibilités de modification style (pas de html)

    Alors j'ai plusieurs infos qui valent la peine d'être indiquées
    Windows - Il y a toujours la possibilité d'utiliser l'API GetSyscolor pour obternir les couleurs "système" cependant cela ne concerne pas forcément le théme en cours (je n'ai pas vérifié).
    Linux - Les thèmes de linux sont contenu dans des CSS, pour gnome, il est possible de retrouver le theme en cours "gsettings get org.gnome.desktop.interface gtk-theme" , généralement dans un de ces répertoires : /usr/share/themes ou ~/.themes, il s'agit ensuite de récupérer les données nécessaire dans le fichier
    Apple - ?

    Savoir s'il s'agit d'un theme foncé ou clair ? il faut utiliser IFMXSystemAppearanceService (à partir de 10.4)

    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
    var App : IFMXSystemAppearanceService; // uses FMX.PlatForm 
    begin
    if TPlatformServices.Current.SupportsPlatformService(IFMXSystemAppearanceService, app) then
       begin 
          case app.ThemeKind of
            TSystemThemeKind.Dark : label1.Text:='Dark Themes';
            TSystemThemeKind.Light : label1.Text:='Light Themes';
            else Label1.Text := 'unknown theme'
          end;
          //  app.GetSystemColor(TsystemColorType.Accent); je ne sais pas à quoi cela correspond
        end
        else label1.Text:='non supporté';  // Windows ne supporte pas cet interface: Il faudra fouiller dans le registre 
                                                     // clé 'Software\Microsoft\Windows\CurrentVersion\Themes\Personalize\AppsUseLightTheme'
                                                     // voir https://github.com/checkdigits/delphidarkmode
      end
    je n'ai pas encore testé ce qu'il en était pour LINUX

    Pour ce qui est de modifier un style au runtime. Pas facile mais en théorie possible. J'ai déjà écrit quelque chose à ce sujet, TStyleManager.UpdateScene
    néanmoins cela demande un connaissance approfondie du processus de création d'un fichier style comme le fait le programme "concepteur de styles de bitmaps". Hélas je ne pense que les sources de ce programme soient disponibles.
    Dans le même ordre d'idée il serait (en théorie) possible de modifier les 3 images png utilisées par les TStyleObjects (c'est déjà réalisable avec des outils externes voir par exemple ce billet)

    La critique serait donc pourquoi le concepteur (je ne me souviens plus de qui ? à retrouver dans les premières discussions sur les styles) des styles a t-il choisi un format particulier plutôt que d'utiliser des CSS (cela dit je ne connais pas suffisamment CSS) ? Trop approche Windows peut-être

    Bref, il y aurait la matière à développer des unités et programmes, du boulot pour un retraité (je décompte toujours) ou un stagiaire ?
    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
    Membre actif

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2021
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2021
    Messages : 138
    Points : 207
    Points
    207
    Par défaut
    Bonjour Serge,

    tu es vraiment pugnace .

    Je regarde tout cela. Je n'avais pas encore désinstallé mon Delphi 10.4CE .

    Pour mac OS, je règle déjà le problème avec Lazarus, donc je ne vois pourquoi cela ne serait pas possible avec Delphi. Mais tu avoueras quand même que cela ne va pas être pratique du tout : en Lazarus, tu es sous l'OS cible. Donc accéder par exemple à des fonctions du système par un TProcess est relativement simple [le problème étant en général la gestion des droits d'accès, donc souvent leur contournement, Linux est senseible mais que dire de mac OS ]. Avec Delphi, vu que le seul IDE dispo est Windows, c'est nettement plus compliqué... . Heureusement, les 2 frameworks se ressemblant, on peut probablement utiliser au départ Lazarus et porter le code ensuite sous Delphi. Mais il faut regarder si les méthodes existent dans les 2 mondes ou disposent d'un équivalent.

    Sinon, j'avais pensé à autre chose. CEla fait bien longtemps que je ne produis plus de librairie. En réalité les dernières étaient des librairies Lazarus que j'appelais avec Windev mais j'avais également des librairies lazarus appelées par lazarus (j'ai préféré tout porter sous forme de composants), ou C appelées par Lazarus. Je suppose que FMX peut appeler des librairies Lazarus dans les 3 OS et dans ce cas, au pire, cela serait jouable, vu qu'en Lazarus j'ai une solution pour les 3 OS. J'écris au pire parce que je n'aime pas utiliser de librairies tierces (d'où par exemple uniDAC) qui posent souvent problème à l'installation si l'OS n'est pas Windows.

    Bonne journée et encore merci. Gilles

  15. #15
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    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 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Bonjour Gilles,
    Citation Envoyé par HTML-Dev Voir le message
    tu es vraiment pugnace .
    Oui et j'ai même légèrement avancé côté affichage texte
    et j'ai encore plusieurs pistes/idées de code :
    - l'ajout d'un interface IFMXSystemAppearanceService pour windows
    - etc...

    Pour mac OS, je règle déjà le problème avec Lazarus, donc je ne vois pourquoi cela ne serait pas possible avec Delphi.
    pourquoi le concepteur (je ne me souviens plus de qui ? à retrouver dans les premières discussions sur les styles) des styles a t-il choisi un format particulier
    La réponse est en partie dans cette video (Customizing Controls with FMX Styles, with Ray Konopka sur Youtube) au début de la présentation (à environ 5:0 FMX History), Ray Konopka (qui n'est pas l'auteur) explique le pourquoi de FMX 2 et des styles. La minute 7:00 (environ) explicite le problème de rendu et du choix "assumé" des styles

    Je suppose que FMX peut appeler des librairies Lazarus dans les 3 OS et dans ce cas, au pire, cela serait jouable, vu qu'en Lazarus j'ai une solution pour les 3 OS. J'écris au pire parce que je n'aime pas utiliser de librairies tierces (d'où par exemple uniDAC) qui posent souvent problème à l'installation si l'OS n'est pas Windows.


    En fait, pour ce que tu veux faire, il ne faudrait surtout pas utiliser de styles (tout mettre en ControlType=platform : je ne crois pas que cela soit possible hélas)
    Je n'arrive toujours pas à bien appréhender ce style "par défaut" quand il n'y a pas de stylebook. Pour moi c'est un style "caché" proche de l'apparence par défaut de windows mais, dans la littérature que j'ai pu trouver, l est écrit que cela utiliserait les directives natives de dessin (gros doute)
    On peut bien sûr appeler des bibliothèques "tierces", alors pourquoi pas des librairies Lazarus pour peu qu'elles soient bien déclarées et les {$IFDEF <OS>}{$ENDIF} sont là pour ça non ?
    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. Gestion des styles de titres dans un tableau
    Par Prodidac dans le forum Word
    Réponses: 2
    Dernier message: 26/04/2013, 11h59
  2. [WBxx] Gestion des styles chaotiques?
    Par lazariel dans le forum WebDev
    Réponses: 0
    Dernier message: 02/03/2012, 11h40
  3. Gestion des styles
    Par marcusien dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 16/09/2011, 09h59
  4. asp:menu gestion des styles
    Par gregfriends dans le forum ASP.NET
    Réponses: 1
    Dernier message: 18/04/2008, 11h54
  5. Gestion des styles dans un menu
    Par debie1108 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 30/05/2007, 08h03

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