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 :

Une nouvelle manière d'utiliser les Styles FMX [Windows]


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 Une nouvelle manière d'utiliser les Styles FMX
    Bonjour,

    J'ai découvert que l'on pouvait utiliser TstyleCollection pour "mettre" plusieurs styles dans un même TStyleBook
    Cependant je trouve mon code pas très orthodoxe à vous de juger

    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
    58
    59
    60
    61
    62
    63
    unit Main;
    
    interface
    
    uses
      System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
      FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.ListBox,
      FMX.StdCtrls, FMX.Controls.Presentation, FMX.Edit, FMX.Styles, FMX.Memo.Types,
      FMX.ScrollBox, FMX.Memo;
    
    type
      TForm2 = class(TForm)
        Edit1: TEdit;
        Button1: TButton;
        ProgressBar1: TProgressBar;
        TrackBar1: TTrackBar;
        ComboBox1: TComboBox;
        btnLoadStyles: TButton;
        StyleBook1: TStyleBook;
        Memo1: TMemo;
        procedure ComboBox1ClosePopup(Sender: TObject);
        procedure btnLoadStylesClick(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
    
    var
      Form2: TForm2;
    
    implementation
    
    {$R *.fmx}
    uses System.IOUtils;
    
    // Chargement de styles supplémentaires par code 
    procedure TForm2.btnLoadStylesClick(Sender: TObject);
    const stylepath = 'C:\Users\Public\Documents\Embarcadero\Studio\23.0\Styles';
    begin
    var Style:=StyleBook1.Styles.Add;
    Style.Platform := 'Sombre';
    Style.LoadFromFile(Tpath.Combine(stylepath,'dark.style'));
    Style:=StyleBook1.Styles.Add;
    Style.Platform := 'Clair';
    Style.LoadFromFile(Tpath.Combine(stylepath,'Light.Style'));
    
    for var I := 0 to Stylebook1.Styles.Count -1 do
     begin
       Memo1.lines.Add(stylebook1.Styles[i].Platform);
     end;
    
    end;
    
    procedure TForm2.ComboBox1ClosePopup(Sender: TObject);
    begin
    case Combobox1.ItemIndex of
      1 : StyleBook1.Styles[0]:=Stylebook1.Styles[1];
      2 : StyleBook1.Styles[0]:=StyleBook1.Styles[2];
      else StyleBook1.Styles[0].Clear;
    end;
     UpdateStyleBook;
    end;
    C'est cette partie en bleu qui me chagrine un peu, le fait de toujours passer par Stylebook1.Styles[0]
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 14 177
    Par défaut
    Je ne fais pas de FMX

    Mais deux approches

    Soit tenter le truc avec un espoir total, naïf à la lecture du code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    StyleBook1.CurrentItemIndex := Combobox1.ItemIndex;
    EDIT : Ah ah , c'est même utilisé par l'IDE : dans TStyleDesigner.ChangePlatform et TStyleDesigner.DeletePlatformActionExecute.


    Soit faire ta propre classe TStyleBookEx qui ajoute un SetCurrentItem à la propriété CurrentItem qui modifie en réalité Styles[CurrentItemIndex], avec CurrentItemIndex restant à 0, c'est moche aussi mais ça ne se voit plus

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if Combobox1.ItemIndex > 0 then
      StyleBookEx1.CurrentItem := StyleBookEx1.Styles[Combobox1.ItemIndex]
    else
      StyleBookEx1.Style.Clear;
    Ne pas mélanger les deux approches, car CurrentItem doit rester sur Styles[0]
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

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

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 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 et merci ShaiLeTroll.

    J'avais raté le CurrentItemIndex fixé que j'étais sur CurrentItem. Je savais bien bien que quelque chose clochait d'où ma question

    Désormais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    procedure TForm2.ComboBox1ClosePopup(Sender: TObject);
    begin
     StyleBook1.CurrentItemIndex := Combobox1.ItemIndex;
     UpdateStyleBook;
    end;
    Fait correctement le job.

    Conclusion il est possible de travailler avec un seul TStylebook mais plusieurs styles, un détournement de ce qui était "historiquement" un stylebook plusieurs plateformes.
    Il me reste à tester cela en conditions plus réelles :
    • En utilisant TStyleManager
    • Sous d'autres plateformes, bien que je ne puisse tester qu'Android et Linux


    Ah ah , c'est même utilisé par l'IDE : dans TStyleDesigner.ChangePlatform et TStyleDesigner.DeletePlatformActionExecute.
    Oh, comment as-tu trouvé ça (par quels mots clés) chapeau !

    Pour info, ce qui m'a mis en chasse c'est ce dépôt https://github.com/geheimniswelten/FMXStyleOverview qui m'a conduit aussi sur une page intéressante (pour germanophile) https://geheimniswelten.de/sonstiges/delphi-compiler/

    Bref, si j'avais fouiller un peu mieux dans ce code j'aurais trouvé en surcharge un type TStyleBookAccess = Class(TStyleBook); qui lui permettait certaines choses comme la possibilité, à l'exécution, de charger les styles pour toutes les plateformes en utilisant TStyleBookAccess(StyleBook).SetDesigning(True);. Désormais de dois aussi comprendre comment il fait pour dessinner une prévisualisation en fonction d'un style (bien qu'un peu buggée).

    En tout cas cette partie est Je vais pouvoir peaufiner un tutoriel que j'ai laissé en suspend depuis mai.

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 05/12/2006, 09h33
  2. Réponses: 1
    Dernier message: 30/06/2006, 16h49
  3. une Dll peut elle utiliser les fonctions d'une autre dll?
    Par kantelise dans le forum Windows
    Réponses: 7
    Dernier message: 18/05/2006, 04h45
  4. Comment utiliser les styles XP avec Dev-C++?
    Par abraxas dans le forum Dev-C++
    Réponses: 3
    Dernier message: 05/10/2003, 20h47

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