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 :

Etude d'un fichier .style, extraction de valeurs


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 550
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 550
    Billets dans le blog
    65
    Par défaut Etude d'un fichier .style, extraction de valeurs
    Bonjour, cette discussion est plus ou moins parallèle à celle-ci

    mon objectif, à moyen terme :
    Extraire les couleurs "systeme"
    Extraire les png d'un style s'ils existent (totalement optionnel si l'on a les vsf) mais ...
    Très long terme
    Modifier un style FMX (sans passer par le concepteur de bitmap), la partie sauvegarde étant déjà réglé par ShaiLeTroll et son helper dans la discussion sus-citée.

    j'en suis là
    Nom : Capture.PNG
Affichages : 106
Taille : 28,7 Ko
    dans la partie gauche (un Tmemo avec les informations obtenues en "vrac")
    Dans la partie droite, un treeview avec les propriétés qui m'intéressent (ou du moins une partie des)

    Je voudrais la valeur des propriétés couleur, pour obtenir les propriétés j'utilise ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    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
    49
    procedure TMain.oi(afmxobj: TFMXObject; aNode : TTreeViewItem=nil);
    var crtti : TRttiContext;
        trtti : TRttiType;
        prtti : TRttiProperty;
        sprop  : String;
        sl : TstringList;
        color : TAlphaColor;
        aChildnode : TTreeViewItem;
    begin
    crtti:=TRttiContext.Create;
    try
       sl:=TStringList.Create(TDuplicates.dupIgnore,true,true);
       try
       trtti:= crtti.GetType(afmxObj.ClassType);
       for prtti in trtti.GetProperties do
        begin
     
         sProp:=prtti.Name;
         If prtti.PropertyType.TypeKind In
                    [tkInteger, tkChar
                     , tkFloat
                     , tkString
                     , tkWChar, tkLString, tkWString
                     , tkEnumeration
                     ]
         then begin
            if Prtti.Name.ToLower.Contains('color')
               then  Sl.Add(Sprop); // ici pb de transformation de prtti.GetValue(afmxobj) en couleur
     //       if sametext(Prtti.Name,'stylelookup') then
     //           sl.add(sprop+'='+prtti.GetValue(afmxobj).tostring);  // ici revoir présentation ?
         end;
     
        end;
        for var s in sl do begin
          memo1.lines.add(#9#9+s);
          if Anode<>nil then
            begin
              aChildNode:=TTreeViewItem.Create(aNode);
              aChildnode.Text:=S;
              aNode.AddObject(achildnode);
            end;
        end;
       finally
         sl.Free;
       end;
    finally
      crtti.free;
    end;
    end;
    J'ai tenté un truc genre color:=TalphaColor(prtti.GetValue(afmxobj).asVariant) mais j'ai une "Erreur de vérification d'étendue at address ..."
    Ce sera donc ma question du jour.

    [Edit] je pense que je ne suis pas aller explicitement sur le comment j'obtiens les données
    Même s'il y a beaucoup de reproche à faire sur ce "truc" et qu'il faudra très certainement passer par un thread
    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
    49
    50
    51
    52
    53
    procedure TMain.BtnAnalyseClick(Sender: TObject);
    var
        ms : TMemoryStream;
        MyFunc: TFunc<TFmxObject, TEnumProcResult>;
        TVItem,ANode : TTreeViewItem;
        S : String;
    begin
      
      // chargement fichier style déporté niveau menu
    
      MyFunc := function(AObject: TFmxObject): TEnumProcResult
        begin
          memo1.BeginUpdate;
          s:=AObject.StyleName;
    
          if not s.IsEmpty then
          begin
             if  (AObject.Parent=Stylebook1.Style) then
             begin
             TVItem:=TTreeViewItem.Create(TreeView1);
             TVItem.Text:=S;
             TreeView1.AddObject(TVItem);
             ANode:=TVItem;
             Oi(Aobject,TVItem);
            end
            else begin
               TVItem:=TTreeViewItem.Create(TreeView1);
               TVItem.Text:=S;
               Anode.AddObject(TVItem);
               if AObject is TStyledControl then
                 S:=#9+ S +#9+TStyledControl(Aobject).StyleLookup
               else s:= #9 + S;
               Oi(Aobject,TVItem);
             end;
            memo1.lines.add(s);
          end;
    
          Oi(Aobject);
      
          Result := TEnumProcResult.Continue;
          memo1.EndUpdate;
        end;
    
      Memo1.Lines.Clear;
      StyleBook1.style.EnumObjects(MyFunc);
    
      // sauvegarde ShaiLeTroll 
      // MS:=TmemoryStream.Create;
      // Stylebook1.Styles.Items[0].SaveToStream(MS, FMX.Styles.TStyleFormat.text);
      // Ms.Position:=0;
      // Ms.SaveToFile('testtext.style');
      // ms.free;
    end;

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 905
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 905
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    J'ai tenté un truc genre color:=TalphaColor(prtti.GetValue(afmxobj).asVariant) mais j'ai une "Erreur de vérification d'étendue at address ..."
    Il faut croire que c'est un TColor et non un TAlphaColor.

    Ce simple exemple soulève l'exception :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var
      C :TColor;
      AC :TAlphaColor;
    begin
      C := $FF000000;
      AC := TAlphaColor(C);
    end;

  3. #3
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 966
    Par défaut
    Les propriétés dont le nom est Color dans TButtonStyleTextObject sont bien des TAlphaColor (c'est en reprenant le même style que l'autre sujet peut-être plus simple que celui de ce sujet)

    Code dfm : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
          HotColor = xFF14253F
          FocusedColor = xFF14253F
          NormalColor = claYellow
          PressedColor = xFF14253F

    Par contre, attention si tu as un code ultra recursif, par exemple Fill.Color ou Stroke.Color de TRectangle ou TPath présent dans AquaGraphite.style sont des TAlphaColor mais commence toute par x00


    C'est currieux d'ailleurs, ce x !
    Ce n'est pas très Delphi, dans une DFM VCL, le TColor Hexa n'a pas de préfixe c'est direct par exemple 808080 et affiché $00808080
    Il n'y aurait une conversion cachée quelque part en FMX pour gérer les TAlphaColor ?
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

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

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 550
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 550
    Billets dans le blog
    65
    Par défaut
    Comme dirait le commissaire Chabrol (5 dernières minutes) "Mais, Bon Dieu ! Oui, bien sûr" c'était un TColor
    à ma décharge on voyait tout le temps la couche transparente de certaines couleurs, et, avec FMX j'ai plus l'habitude des TAlphaColor que des TColor
    Nom : Capture.PNG
Affichages : 92
Taille : 28,1 Ko

    Bon, j'ai encore pas mal de boulot mais, ce point est résolu.

    Point suivant, retrouver et si possible mettre en exergue (dans le Treeview) le stylelookup quand le composant enfant en a un !
    mettre en ordre le memo ne serait pas mal non plus cela dit, mais tel qu'obtenu c'est

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 550
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 550
    Billets dans le blog
    65
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Par contre, attention si tu as un code ultra recursif, par exemple Fill.Color ou Stroke.Color de TRectangle ou TPath
    Je n'en étais pas encore à ce stade mais effectivement c'est mon objectif bien que je veuille aussi faire en sorte que les couleurs des objets accessibles via FindStyleResource (donc avec un nom de style) soient bien mises en évidence

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    mon objectif, à moyen terme :
    Extraire les couleurs "systeme"
    Bonjour,

    j'ai du mal à suivre. C'est certainement un problème de terminologie. Je croyais que la plateforme graphique utilisée par FMX l'isolait totalement à ce niveau. Or si j'interprète bien ce que tu écris, il y aurait des fonctions FMX qui permettent de récupérer les couleurs utilisées par le choix de l'utilisateur lorsqu'il a paramétré son OS ou qu'il a choisi son OS. Mais n'est-ce pas justement une conception que ne permettent pas les Styles et même, que les Styles empêchent ? Si je comprends bien, tu essaies de te libérer des Styles pour retrouver un degré de liberté que permet nativement Lazarus ou wxWidgets qui utilisent autant que possible le SDK natif de l'OS ?

    Par exemple avec Mint, la barre de sélection en vert (dans les Grids, Memo,...) ou sur Ubuntu (en Orange) ou sur mac OS (les couleurs par défaut de la version utilisée) ? C'est facile à faire en Lazarus. Mais en FMX, nativement, il y a moyen ?

    Merci. Cordialement. GG

  7. #7
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 966
    Par défaut
    En delphi, les couleurs "systèmes" historiquement ça serait clWindow, clBtnFace c'est leur nom officiel : Couleurs de la VCL - Couleurs système que l'on retrouve dans les styles VLC via des fonctions StyleServices.GetSystemColor cas dans un thème, ces couleurs correspond à une autre couleur que la couleur lié au style OS

    En FMX, peut-être que cette dénomination est ambiguë, je fais pas de FMX, je ne sais même pas changer la couleur d'un TButton
    On voit dans l'exemple clScrollBar c'est une couleur système au sens Delphi du terme mais car il y a un mais !

    Sinon il y a du clBlack dans l'exemple en image, mais cela ne devrait-il pas plutôt du claBlack
    clScrollBar c'est FF000000 soit en réalité sur claBlack ?
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

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

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    En delphi, les couleurs "systèmes" historiquement ça serait clWindow, clBtnFace c'est leur nom officiel
    Bonjour,
    en VCL (Delphi 7), c'est probablement comme Lazarus : je suppose que le pilotage graphique est réalisé avec des "wrappers" sur les objets graphiques natifs de l'OS. Donc, comme il n'y a pas de couche intermédiaire, la notion de Style est lourde et surtout inutile.

    Fmx c'est comme Qt. Pour prendre une image, il y a une couche graphique intermédiaire qui isole... et donc le "truc" est aveugle. On aime, on n'aime pas. Autrement dit, tu charges un Style prédéterminé (un fichier) qui est supposé rendre la même apparence que les objets graphiques natifs de l'OS mais qui n'en sait rien en réalité. Mais si l'utilisateur personnalise son OS (s'il le permet), c'est râpé ! Tu te retrouves avec des barres de sélection vertes (du Style) alors que tu les as choisies mauves (ton paramètre OS), toujours pour prendre une image. Et si le style de l'OS que tu as choisi n'existe pas, c'est tout aussi râpé.

    Mais je suis surtout curieux de savoir comment SergioMaster de manière dynamique depuis Fmx va récupérer les couleurs de l'OS ou mieux (pire ), les paramétrages de l'OS choisis par l'utilisateur comme par exemple, les polices de l'OS et leur taille de base.
    Cordialement. GG
    Dernière modification par Invité ; 07/11/2024 à 17h33.

  9. #9
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 966
    Par défaut
    A mon avis, c'est pas du tout le but, d'où la formule "En delphi, les couleurs "systèmes" historiquement".

    Auriez vous des idées pour faire avancer la création d'un Editeur de Style alternatif ?
    C'est ce qui semble être le but de ce sujet sans rapport avec l'OS sous jacents avec les éléments qui sont exposés, je ne vois pas à quel moment vous avez pu penser à autre chose qu'un Editeur de Style.
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

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

  10. #10
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 550
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 550
    Billets dans le blog
    65
    Par défaut
    Alors pour vous répondre à tous les deux, si j'ai utilisé des guillements c'est intentionnel.

    En FMX les couleurs systèmes tel que celles de VCL cela n'existe pas.
    En fait, si vous utilisez le concepteurs de bitmaps vous vous appercevrez que les "couleurs système" ou la palette de couleur (color et syscolors) pour ne pas avoir de notion OS est définie.
    Nom : Capture.PNG
Affichages : 82
Taille : 11,1 Ko
    C'est lors du passage d'un .VSF -> un .style que les couleurs sont "triturées" et réparties dans les composants du style.

    Mais mettons les choses au clair, il ne s'agit pas de récupérer les thémes choisis de l'OS.
    Vous noterez mon choix de terme "pointilleux". Pour moi théme c'est pour l'OS, apparence c'est pour ce que certains nomment les styles windows et enfin les styles FMX (fichier .style) qui sont à FMX ce que apparence est à VCL encore que s'il y a des similitudes . On a bien le même outil : "le concepteur de style bitmaps" mais les contenus lui sont différents, ne serait-ce que pour les couleurs en VCL et les effets en FMX) de même que l'utilisation "basique"


    Mon premier but est de récupérer les couleurs utilisées dans FMX.
    Au départ donc, mon idée était d'avoir simplement un helper pour obtenir la plupart des couleurs utilisées dans un style FMX, et c'est certainement suffisant.
    Pourquoi ? C'est parce qu'à force de triturer les styles, de tenter d'écrire des composants FMX etc.. je ne suis trouvé confronté à ces problèmes d'obtention de couleurs.
    Je me suis souvent confronté à ce problème lors de mes premières approches des styles, par exemple : pour un dessin d'un triangle dans une colonne de grille, ou dernièrement pour la coloration d'un SVG.

    Ce qui me pousse aussi, c'est qu'un composant comme le DBNavigator (ou bindNavigator) ne soit pas un composant avec un style mais un composant monocolor (dépendant du style en cours toutefois), il y en a d'autres mais c'est le plus flagrant.(ce qui me vaudra l'écriture d'un helper ou plutôt d'un composaant plus "coloré")

    Toutefois, cette "étude", pousse effectivement à aller voir plus loin, prendre un style, changer les bitmaps utilisés et au besoin les couleurs (dissiminées dans tant d'endroit) oui, c'est l'idée qui en germination, que ce soit une alternative (seulement partielle) au concepteur au concepteur de style est effectivement l'idée qui s'en dégage.
    Sans vouloir tout changer (entre autre la définition des zones de découpage du png utilisé par TStyleObjects) je voudrais finir par avoir un outil capable, à partir d'un style existant, de modifier l'apparence générale et d'avoir ainsi un nouveau style. Cela étant, il faudra que je fasse gaffe avec les licences souvent incompréhensibles.

    En tout cas, cela me permet d'avancer sur les deux fronts, le helper et cette idée d'outil qui ne demande qu'à pousser.

  11. #11
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    A mon avis, c'est pas du tout le but, d'où la formule "En delphi, les couleurs "systèmes" historiquement".

    Auriez vous des idées pour faire avancer la création d'un Editeur de Style alternatif ?
    C'est ce qui semble être le but de ce sujet sans rapport avec l'OS sous jacents avec les éléments qui sont exposés, je ne vois pas à quel moment vous avez pu penser à autre chose qu'un Editeur de Style.
    Ok. J'ai demandé la suppression de mon compte. Vos remarques sont inutilement désobligeantes au point que vous me rendez ce forum désagréable.

    Utilisant Fmx entre autres langages, j'ai rapidement été confronté à ces limites notamment avec l'utilisation des composants TMS FNC qui gèrent très mal les Styles Fmx. J'ai réussi effectivement à récupérer les couleurs, fontes et tailles du système (de l'OS tel qu'il est au moment où vous lancez votre application) et de ses divers objets graphiques. Les OS concernés sont Windows, Linux, macOS... Mais cela je l'ai fait seulement avec une librairie produite en Lazarus. Les intégrer ensuite dans les objets TMS FNC est assez facile car ils se pilotent comme des objets de Lazarus... car ils sont compatibles avec les 2 IDE. Donc les propriétés sont exploitables par les 2 IDE. Au final, l'intégration se réduit en général à un problème de conversions. Mais ce n'est pas transposable aux objets graphiques Fmx Donc le travail de SergioMaster m'intéresse. Si effectivement, on pouvait piloter les Styles dynamiquement à partir des valeurs fournies par une librairie Lazarus qui elle récupère les valeurs natives de l'OS, ce serait absolument génial.

    Rassurez-vous, je ne dérangerai plus vos certitudes, pas plus en terme de RGPD que de Styles. Et cela vous évitera d'être désobligeant. Tout le monde y gagne. Peut-être pas la fonction de ce forum.

    Salutations. GG
    Dernière modification par Invité ; 07/11/2024 à 22h12.

  12. #12
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 550
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 550
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    je ne vois pas où j'ai pu être désobligeant, mais ce n'est pas grave.

    j'ai rapidement été confronté à ces limites notamment avec l'utilisation des composants TMS FNC qui gèrent très mal les Styles Fmx.
    je suis totalement d'accord avec cette remarque, même si AMHA ce n'est pas tant la gestion des styles FMX que d'un accès presque impossible aux modifications de ceux inclus (?) dans les composants TMS. C'est, entre autres, un des points qui m'a fait petit à petit abandonner les composants TMS autant que possible.

    J'ai réussi effectivement à récupérer les couleurs, fontes et tailles du système (de l'OS tel qu'il est au moment où vous lancez votre application) et de ses divers objets graphiques. Les OS concernés sont Windows, Linux, macOS...
    J'eusse aimé avoir a minima les indications du comment, y a-t-il des chances que vous partagiez vos informations sur la méthode? .

    Donc le travail de SergioMaster m'intéresse. Si effectivement, on pouvait piloter les Styles dynamiquement à partir des valeurs fournies par une librairie Lazarus qui elle récupère les valeurs natives de l'OS, ce serait absolument génial.
    je tique sur : "une librairie Lazarus", pourquoi Lazarus le ferait mais pas Delphi ? Mais, pour le reste, si pour l'instant ce n'est pas vraiment la direction prise, ce serait là aussi, un challenge interessant.
    Je n'ai jamais fait de recherche, si ce n'est en dilettante, sur les thémes appliqués aux OS (sauf si l'on considére la détection du mode clair/sombre).

    Note : Après une nouvelle recherche, en VCL il existe (et ce depuis a minima la version 10.4) une unité VCL.Themes, j'avais raté cette "nouveauté" étant focalisé FMX ces dernières années.

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

    je profite que mon compte est encore actif. Je ne veux pas donner mon code opérationnel mais je peux donner la première approche (celle de faisabilité) :
    Le programme de test en 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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    unit Unit1;
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
      Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls,
      dynlibs;
     
    type
        TGetDefaultValuesFunc =
        function(): PChar; cdecl;
      { TForm1 }
     
      TForm1 = class(TForm)
        Button1: TButton;
        procedure FormCreate(Sender: TObject);
      private
     
      public
     
      end;
     
    var
      libname: string;
      Form1: TForm1;
      lib: TLibHandle;
      GetDefaultValues : TGetDefaultValuesFunc;
    implementation
     
    {$R *.lfm}
     
    { TForm1 }
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      libname := 'subs.';
     
    {$ifdef windows}
     LibName := libname+ 'dll';
    {$else}
    {$ifdef macos}
      LibName := getDylibName(libname);
    {$else}
      LibName := IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0))) +
        'lib' + libname + 'so';
    {$endif}
    {$endif}
      ShowMessage(libname);
      lib := LoadLibrary(libname);
      Pointer(GetDefaultValues) := GetProcAddress(lib, 'getDefaultValues');
      ShowMessage(GetDefaultValues());
      unloadLibrary(lib);
    end;
     
    end.
    La première librairie de faisabilité en Lazarus réalisée d'abord sous Windows :
    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
    49
    50
    51
    library subs;
     
    {$mode objfpc}{$H+}
     
    uses
      Classes,
      SysUtils,
      Graphics {TColor},
      Interfaces, {this includes the LCL widgetset}
      Forms;
     
    type
      TFormA = class(TForm)
      private
      public
      end;
     
    var
      aForm: TFormA;
     
      function GetDefaultFontSize: integer;
      var
        aFD: TFontData;
      begin
        aFD := GetFontData(aForm.Font.Handle);
        Result := -round((aFD.Height * 72 / aForm.Font.PixelsPerInch) * (-1));
      end;
     
     
      function getFormFontSize(): integer; cdecl;
      begin
        aForm := TFormA.Create(nil);
        Result := GetDefaultFontSize;
        FreeAndNil(aForm);
      end;
     
      function getDefaultValues(): Pchar; cdecl;
      begin
        aForm := TFormA.Create(nil);
        with aForm do
    begin
      Font.SetDefault;
      Result := Pchar('Default font name : ' + GetFontData(Font.Handle).Name+'-'+ 'Default size : ' + IntToStr(GetDefaultFontSize)+' | '+'System font name : ' + Screen.SystemFont.Name +'-'+ 'System size : '  + IntToStr(Screen.SystemFont.Size));
      end;
      FreeAndNil(aForm);
      end;
     
    exports
      getFormFontSize,
      getDefaultValues;
    end.
    Evidemment, cette bibliothèque est très perfectible. Puis il faut la porter sur les autres OS. Je viens de vérifier le fonctionnement des extraits fournis sous lazarus 3.6-Win64. J'ai pu implanter ultérieurement le résultat final dans les composants TMS FNC avec Fmx... et même dans Windev.

    Pour le reste, je n'ai pas d'opinion. Je fais surtout des applicatifs extrêmement sobres et "natifs" au niveau de l'IHM aussi discrets que possible. L'idée est de se fondre dans le système utilisé par l'utilisateur et de conserver au maximum ses habitudes et ses codes notamment visuels.
    ----
    Avant de partir, je donne mon retour d'expérience "final" sur la discussion RGPD sans aucune publication puisque malheureusement le site est mal adapté (Billets limités). Contrairement à mon désobligeant ami qui qualifie ainsi le comportement des petites équipes de développeurs en matière de RGPD :
    Ils ont une formation annuelle et s'en contrefoutent les 364 autres jours de l'année.
    Cela me parait désobligeant une nouvelle fois, même condescendant, et probablement très loin de la réalité, en tout cas de celle des petites équipes que je connais. Voila ce qu'il est possible de faire assez simplement :
    On conçoit d'abord une base de données dès le départ compatible avec la pseudonymisation et les directives de 2018. Cela exclut MariaDB gratuit mais peut-être pas MariaDB MaxScale mais qui est une version payante. Or je veux utiliser une solution gratuite. J'en ai testé 2 répondant aux exigences de la CNIL :
    • PostgreSQL et son Anonymizer
    • HFSQL de PC SOFT (Il faut cependant attendre la version 2025 qui intègre les coffre-forts pour être parfaitement dans les clous... Elle arrive dans quelques jours mais déjà la version 2024 est totalement opérationnelle)


    Il faut d'autre part que le WebService installé chez moi sur Apache fonctionne en TLS. Pour PostgresSQL, cela m'a demandé un peu plus de temps. Comme l'anonymizer de PostgreSQL est très simple à installer sur Ubuntu/Debian, j'ai conçu mon Webservice avec Lazarus, Delphi Linux n'étant pas à ma portée.
    Pour le second SGDBR c'est beaucoup plus simple car intégrer "nativement"

    Evidemment pour le Webservice, on n'est pas absolument obligé d'utiliser un langage comme Lazarus ou Delphi. De nombreuses autres approches sont possibles. C'est ce que je demandais en réalité quand je me suis questionné sur l'attitude des petites équipes : Quels langages ?

    Une dernière information : concernant la pseudonymisation, il semble exister une solution gratuite compatible MariaDB : Percona qui fonctionne si l'en on croit, la page d'accueil du site, avec MysQL, PostgreSQL, MongoDB. Par contre, je n'ai pas encore réussi à déterminer ce qui était faisable en terme de pseudonymisation pure et dure si je peux m'exprimer ainsi. Ils mettent également en avant, un système de sauvegarde "GDPR compliant"

    Merci de l'aide que vous m'avez apporté pendant mon bref passage dans votre forum. Cordialement. GG
    Dernière modification par Invité ; 08/11/2024 à 10h32.

  14. #14
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 550
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 550
    Billets dans le blog
    65
    Par défaut
    Lazarus reste "VCL" donc en Delphi, cette unité https://docwiki.embarcadero.com/Libr...TThemeServices est utilisable pour, je pense, obtenir les informations nécessaires.
    Il faudra quand même que je fasse un essai (un jour ... )

    Mais dans le cadre FMX pour l'instant je n'ai trouvé aucun équivalent.

    Aujourd'hui j'ai mis de côté la recherche des couleurs pour ébaucher une solution pour le bindnavigator avec couleur
    Nom : Capture.PNG
Affichages : 69
Taille : 3,7 Ko
    ceci prouve la faisabilité.
    Inconvénient : cela ne se verra pas au designtime
    problème : pour l'instant c'est un bouton qui fait le job de colorisation, il faut que je trouve un moyen pour stocker les couleurs choisies et en faire un truc plus abouti (un composant non visuel par exemple )
    Pour l'instant je ne publie donc rien, mon code étant "affreux"

  15. #15
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 966
    Par défaut
    En XE2, le Style VCL avait pas mal de défaut, j'ai pas mal utilisé TThemeServices.GetElementDetails pour trouver les couleurs de fond pour pouvoir ajouter un dessin personnalisé

    Depuis 5 ans, en D10, je ne fais plus d'IHM, du Dev Serveur uniquement, j'ai pas trop suivi les évolutions et rien du tout en FMX mais du peu que j'ai regardé, la gestion des styles de FMX semblent bien plus ambitieuse que la VCL, on peut avoir plusieurs styles à la fois appliqué sur des controles différents, ce qui ne sait pas en VCL, c'est tout ou rien.
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

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

  16. #16
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 905
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 905
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    on peut avoir plusieurs styles à la fois appliqué sur des controles différents, ce qui ne sait pas en VCL, c'est tout ou rien.
    Si, chaque contrôle a sa propriété StyleName depuis la 10.4.

  17. #17
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 966
    Par défaut
    StyleName Interessant !
    Cela rend encore plus délicat la custom, comme dans FMX qui est très très riche en terme de Style mais très différent de la VCL.
    Je suis encore en Seattle D10.0, j'ai une 11 mais seul une licence pour mon chef, on n'est pas pressé d'y passer vu que c'est du 99% serveur.

    J'ai du patché le Hint stylé de D10 trop petit dans la seule IHM Delphi en 3 ans qui est distribuée aux utilisateurs (admin) ... j'aurais bien aimé faire du FMX sur Mobile pour me confronter à cette évolution majeure et je passe un peu à côté, c'est pour cela que je participe au sujet pour découvrir en lisant le code, à défaut d'une doc



    Du coup, comment tu peux faire la différence entre une TColor et TAlphaColor, il semble que tout soit AlphaColor dans FMX, si tu as des Styles VCL migrés en Style FMX ça doit être un peu le bordel ?
    Comment il fait la transition ?
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

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

  18. #18
    Membre Expert
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 517
    Billets dans le blog
    10
    Par défaut exemple fmx
    Ci joint un exemple Je ne sais pas si cela correspond au besoin; Le style est dans le zip

    SerialStyle1.zip
    Nom : Capture d'écran 2024-11-09 103642.png
Affichages : 60
Taille : 23,1 Ko

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    object TStyleContainer
      object TSwitchObject
        StyleName = 'switchstyle'
        TabOrder = 0
        TrackingThumbScale = 1.000000000000000000
        ThumbPadding.Left = 1.000000000000000000
        ThumbPadding.Top = 1.000000000000000000
        ThumbPadding.Right = 1.000000000000000000
        ThumbPadding.Bottom = 1.000000000000000000
        Visible = False
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      i1: integer;
      Obj: TFmxObject;
    begin
      Memo1.Lines.Clear;
      for i1 := 0 to StyleBook1.Style.ChildrenCount - 1 do
      begin
        Obj := StyleBook1.Style.Children[i1];
        Memo1.Lines.add(i1.ToString + ' ' + obj.ClassName+' '+obj.StyleName) ;
      end;

  19. #19
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 550
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 550
    Billets dans le blog
    65
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    j'ai mis de côté la recherche des couleurs pour ébaucher une solution pour le bindnavigator avec couleur
    Voilà déjà une première publication
    une discussion spécifique étant ouverte ici

Discussions similaires

  1. [VB 2005]fenêtre recherche de fichier style windows
    Par Yanos dans le forum Windows Forms
    Réponses: 10
    Dernier message: 28/07/2009, 11h34
  2. Extraction de valeurs - matrice des distances
    Par progfou dans le forum Algorithmes et structures de données
    Réponses: 21
    Dernier message: 06/04/2007, 17h14
  3. Réponses: 16
    Dernier message: 18/01/2007, 17h46
  4. Extraction des valeurs hexa d'un champ char
    Par Krispi dans le forum Fortran
    Réponses: 3
    Dernier message: 21/11/2005, 11h10
  5. [Tableaux] Extraction de valeur dans un tableau
    Par pirouette_07 dans le forum Langage
    Réponses: 6
    Dernier message: 21/10/2005, 17h54

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