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

Langage Delphi Discussion :

trouver la couleur de clwindowtext


Sujet :

Langage Delphi

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 341
    Points : 150
    Points
    150
    Par défaut trouver la couleur de clwindowtext
    Bonjour,

    Je m'arrache les cheveux depuis plusieurs jours pour trouver la couleur clwindowtext après avoir changé de thème.
    En fait je voudrais savoir si c'est du blanc ou du noir (ou une autre couleur) pour modifier la couleur d'une brush dans un stringgrid
    En effet, lorsque je teste la couleur de la fonte de mon stinggrid, je trouve -16777208, ce qui ne correspond pas vraiment à une valeur Tcolor, qui devrait être constituée de 4 groupe de 2 octets (si j'ai bien compris).
    J'ai cru comprendre que cette valeur correspondait à la constante clwindowtext, mais je me trompe peut-être aussi.

    J'ai aussi essayé d'utiliser une fonction Vcl.Themes.TCustomStyleServices.getstylefontcolor(sfWindowTextNormal), mais je me heurte à une mauvaise mise en oeuvre de ma part car cela me fait soit une erreur de compilation, soit une exception "erreur abstraite" à l'exécution ...

    En gros, j'essaye comme ça

    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
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, vcl.Themes;
     
    type
      TForm1 = class(TForm)
        ListBox1: TListBox;
        procedure ListBox1DblClick(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
      stylemanager: TStyleManager;
      css:tcustomstyleservices;
     
    implementation
     
    {$R *.dfm}
     
     
    procedure TForm1.FormCreate(Sender: TObject);
     
    begin
    stylemanager:=TStyleManager.create;
    css:=TCustomStyleServices.create;
    end;
     
    procedure TForm1.ListBox1DblClick(Sender: TObject);
    var
       couleurfontetexte: Tcolor;
     
    begin
    styleManager.Trysetstyle(ListBox1.items[ListBox1.itemindex]);
    couleurfontetexte:=css.getstylefontcolor(sfWindowTextNormal);
     
    end;
     
    end.
    et sur la ligne "couleurfontetexte:=css.getstylefontcolor(sfWindowTextNormal);", ça me fait une exception erreur abstraite.

    Je cale là-dessus et je ne m'en sors pas alors qu'il y a peut-être une méthode très simple.

    Merci à ceux qui pourraient m'aider.

    Bien cordialement

  2. #2
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 448
    Points
    28 448
    Par défaut
    il ne faut pas instancier les classes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    uses
      Vcl.Themes;
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      Color: TColor;
    begin
      Color := StyleServices.GetStyleFontColor(sfWindowTextNormal);
      ShowMessage(IntToHex(Color, 4));
    end;

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 341
    Points : 150
    Points
    150
    Par défaut
    Merci Paul !
    Je me doutais bien que je faisais une cagade ....
    J'avais essayé avec CustomStyleServices (d'où le nom css), mais ça me faisait une autre erreur ....
    En fait il faut utiliser StyleServices et pas CustomStyleServices comme indiqué dans la documentation ...
    Merci encore ... il vaut mieux 1 qui sait que 10 qui cherchent ;o)

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 563
    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 563
    Points : 25 165
    Points
    25 165
    Par défaut
    Citation Envoyé par navyg Voir le message
    En fait il faut utiliser StyleServices et pas CustomStyleServices comme indiqué dans la documentation ...
    Ce n'est pas tout à fait ça, il faut bien utiliser les deux
    En fait StyleServices() c'est une fonction, c'est à comprendre comme un Singleton c'est en fait un raccourci pour TStyleManager.ActiveStyle étant un TCustomStyleServices.
    Pour résumer, cela te fourni l'instance TCustomStyleServices à utiliser
    C'est la VCL qui gère les implémentations, les instances de tout ce mécanisme de Style pour une utilisation assez aisée.
    Si tu es plus curieux en fait tu as deux familles de Style, le Style Système basé sur le rendu par défaut des Contrôles Windows et les Styles VCL qui proposent un rendu spécifique en refaisant totalement le dessin par dessus les Contrôles Windows mais l'abstraction fourni par TCustomStyleServices te permet de ne pas t'en préoccuper la plupart du temps.

    Dans les versions récentes, c'est même un Singleton pour le style Global et un Mutliton pour le style spécifique à une classe.

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

Discussions similaires

  1. Trouver la couleur d'un brush ?
    Par olibara dans le forum C#
    Réponses: 2
    Dernier message: 10/03/2009, 15h43
  2. Trouver une couleur dans une cellule
    Par babybell dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 28/10/2008, 14h19
  3. Trouver les couleurs en hexa d'un PDF
    Par chrislcf dans le forum Imagerie
    Réponses: 1
    Dernier message: 06/10/2008, 03h23
  4. [VBA-W]Trouver TOUTES couleur sauf le noir ?
    Par kitcreanet dans le forum VBA Word
    Réponses: 7
    Dernier message: 28/08/2006, 14h10
  5. [image] trouver les couleurs les plus présentes
    Par giminik dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 25/01/2005, 03h35

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