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 :

[info] Publication d'un billet sur la "colorisation" d'un navigateur (TBindNavigator)


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 365
    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 365
    Points : 41 921
    Points
    41 921
    Billets dans le blog
    65
    Par défaut [info] Publication d'un billet sur la "colorisation" d'un navigateur (TBindNavigator)
    Bonjour,
    Aujourd'hui, ayant bien avancé sur le sujet, je vous propose cette lecture
    https://www.developpez.net/forums/bl...gator-couleur/
    Signalez moi les fautes (orthographe, grammaire) ici plutôt qu'en commentaire sur le billet.
    Suggerez moi des améliorations soit en commentaires du billet soit ici selon vos possibilités.
    Comme indiqué, je vais maintenant me pencher sur la compatibilité du code proposé avec l'utilisation d'un TStyleBook qui pose ce problème : dans l'évènement OnCreate l'application des couleurs n'est pas fait !

    Nom : Capture.PNG
Affichages : 96
Taille : 9,8 Ko
    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

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 365
    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 365
    Points : 41 921
    Points
    41 921
    Billets dans le blog
    65
    Par défaut Corrections
    Une nouvelle mouture du helper
    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
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    unit ColoredBindNavigator;
     
    interface
     
     uses System.Classes, System.UIConsts,System.UITypes,System.Types,System.SysUtils,
          FMX.Bind.Navigator, FMX.Graphics, FMX.Forms, FMX.Types,
          Data.Bind.Controls;
     
    /// range TNavigateButton in three groups
    const   NavigatorScrollings = [nbFirst, nbPrior, nbNext, nbLast,nbRefresh];
            NavigatorValidations = [nbInsert, nbDelete, nbEdit, nbPost, nbCancel,
                                    nbApplyUpdates];
            NavigatorCancelations = [nbDelete,nbCancel,nbCancelUpdates];
     
    type
     
      TNavigatorColors = record
        scroll : TAlphacolor;
        update : TAlphacolor;
        cancel : TAlphacolor;
        class operator initialize (out Dest: TNavigatorColors);
        class operator finalize (var Dest: TNavigatorColors);
      end;
     
      TColorNavButton = class helper for TBindNavButton
        /// set the color of the Tpath.fill.color property
        procedure setcolor(c : TAlphaColor);
        /// apply the custom colors corresponding to the TNavigateButton type
        /// Three groups NavigatorScrollings,NavigatorValidations,NavigatorCancelations
        /// see const part
        procedure ApplyColorStyle(customcolors : TNavigatorColors);
      end;
     
      TColorBindNavigator = class helper for TCustomBindNavigator
        /// initialize and apply custom colors
        function customcolors(scrollcolor, Updatecolor, cancelcolor : TAlphaColor) : TNavigatorColors; overload;
        function customcolors(colors : TNavigatorColors) : TNavigatorColors; overload;
      end;
     
    implementation
     
     
    { TColorNavButton }
    procedure TColorNavButton.ApplyColorStyle(customcolors : TNavigatorColors);
    var defaultstylecolor : TAlphaColor;
    begin
    inherited;
    with Self do
      DefaultStylecolor:=FPath.Fill.Color;
    if (TNavigateButton(Self.index) in NavigatorScrollings)
        AND (customcolors.scroll<>TAlphacolors.Alpha)
    //    AND (customcolors.scroll<>DefaultStyleColor)   // todo test
     then Setcolor(customcolors.scroll);
    if (TNavigateButton(Self.index) in NavigatorValidations)
        AND (customcolors.update<>TAlphacolors.Alpha)
     then Setcolor(customcolors.update);
    if (TNavigateButton(Self.index) in NavigatorCancelations)
        AND (customcolors.cancel<>TAlphacolors.Alpha)
     then Setcolor(customcolors.cancel);
    end;
     
    procedure TColorNavButton.setcolor(c: TAlphaColor);
    begin
    with Self do
       FPath.Fill.Color:=c;
    end;
     
    { TNavigatorColors }
    class operator TNavigatorColors.finalize(var Dest: TNavigatorColors);
    begin
    // nothing to do
    end;
     
    class operator TNavigatorColors.initialize(out Dest: TNavigatorColors);
    begin
    Dest.scroll:=TAlphaColors.Alpha;
    Dest.update:=TAlphaColors.Alpha;
    Dest.cancel:=TAlphaColors.Alpha;
    end;
     
     
    { TColorBindNavigator }
    function TColorBindNavigator.customcolors(scrollcolor, Updatecolor,
      cancelcolor: TAlphaColor) : TNavigatorColors;
    var colors : TNavigatorColors;
    begin
    Colors.scroll:=scrollcolor;
    Colors.update:=updatecolor;
    Colors.cancel:=cancelcolor;
    customcolors(Colors);
    Result:=Colors;
    end;
     
    function TColorBindNavigator.customcolors(
      colors: TNavigatorColors): TNavigatorColors;
    begin
    for var i := 0 to  self.ControlsCount-1 do
          TBindNavButton(Self.Controls[i]).ApplyColorStyle(colors);
    end;
    end.
    permet de corriger le problème,

    [edit] mais il me reste un cas particulier :
    un stylebook est utilisé sur la forme, sa propriété usestylemanager = true mais le Stylebook de la forme n'est pas renseigné.
    NOTE : si le composant est contenu dans un TLayout cela fonctionne même pour ce cas particulier


    en mode design
    Nom : Capture.PNG
Affichages : 51
Taille : 4,9 Ko

    ici, au runtime avec utilisation d'un stylebook (dark.style) au sein d'un datamodule
    Nom : Capture.PNG
Affichages : 49
Taille : 19,6 Ko
    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

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

Discussions similaires

  1. Publication d'un billet sur SQLite et l'ajout de fonction
    Par SergioMaster dans le forum Delphi
    Réponses: 0
    Dernier message: 24/01/2021, 13h10
  2. Prog de citation sur forum [QUOTE]
    Par oxyde356 dans le forum Langage
    Réponses: 2
    Dernier message: 22/07/2006, 13h03
  3. [PUBLICATION] Cliquer une fois sur l'animation.
    Par arti2004 dans le forum Intégration
    Réponses: 9
    Dernier message: 19/07/2006, 09h58
  4. [Info]Comment mettre une servlet sur le web?
    Par fred9510 dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 15/08/2004, 17h40

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