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 VCL Delphi Discussion :

une couleur de txt lisible à partir de la couleur de fond


Sujet :

Composants VCL Delphi

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 39
    Points : 29
    Points
    29
    Par défaut une couleur de txt lisible à partir de la couleur de fond
    Salut à tous
    J'ai une form dont la couleur peut être changée par l'utilisateur à partir d'une autre.
    Sur cette form pouvant changer de couleur se trouve un TJvSpeedButton avec la propriété Transparent à True (càd que le bouton va prendre la couleur de la form). Ce bouton contenant un texte, et pour que celui reste lisible quelle que soit la couleur de la form (et donc du bouton), je dois utiliser l'évenement OnParentColorChange du bouton pour modifier la couleur du texte.

    Pour l'instant j'utilise le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TViewForm.LaunchBtnParentColorChange(Sender: TObject);
    begin
      if (Color > (clWhite / 2))
        then LaunchBtn.Font.Color := clBlack
        else LaunchBtn.Font.Color := clWhite;
    end;
    Mais pour certaines couleurs le résultat n'est pas vraiment lisible (dans le cas du jaune par exemple où le texte reste blanc, donc difficilement lisible).
    J'ai aussi essayé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      LaunchBtn.Font.Color := clWhite - Color;
    Qui dans le cas de la couleur (clWhite / 2) retourne la même, ce qui est, vous le devinez, assez peu lisible ^^

    Donc si quelqu'un a une idée pour obtenir à tous les coup une couleur qui se détachera bien de la couleur de fond et qui sera agréable à lire...
    Sinon je rajouterais la possibilité à l'utilisateur de changer directement la couleur du texte, mais pour certaines raisons je préfèrerais éviter.

    Merci d'avance.

  2. #2
    Membre éclairé
    Avatar de MD Software
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 613
    Points : 680
    Points
    680
    Par défaut
    Essaye ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LaunchBtn.Font.Color := clWhite xor Color;

  3. #3
    Membre habitué

    Profil pro
    Inscrit en
    Février 2005
    Messages
    317
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 317
    Points : 183
    Points
    183
    Par défaut
    essaie ça peut être:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    LaunchBtn.Font.Color := Color + (clWhite/2);
    Sinon, remplace ClWhite par une constante...

    j'ai pas testé mais tu veras bien

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 39
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par MD Software
    Essaye ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LaunchBtn.Font.Color := clWhite xor Color;
    Même pbm qu'avec
    LaunchBtn.Font.Color := clWhite - Color;
    mais merci

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 39
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par nek_kro_kvlt
    essaie ça peut être:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    LaunchBtn.Font.Color := Color + Round(clWhite/2);
    Sinon, remplace ClWhite par une constante...

    j'ai pas testé mais tu veras bien
    (j'ai pris la liberté de rajouter la fonction Round nécessaire à la compilation du code à la citation de ton code pour ceux qui tenteraient le coup, j'espère que tu ne m'en voudras pas)
    Le résultat n'est pas bon avec clWhite/2, mais ton idée d'ajouter une constante est pour l'intant celle qui marche le mieux.

  6. #6
    Membre habitué

    Profil pro
    Inscrit en
    Février 2005
    Messages
    317
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 317
    Points : 183
    Points
    183
    Par défaut
    Non pas de problème, je n'ai pas encore copyrighter ma ligne de code :p
    Bonne chance pour ton appli!

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 39
    Points : 29
    Points
    29
    Par défaut
    lol, merci
    C'est une appli de création d'autorun pour disques de médias vidéos (en fait une généralisation d'un autorun que j'avais fait pour usage personnel, pour mes DVD de releases de fansub, de façon à ce qu'il puisse être modifié sans avoir à en éditer le code comme je le faisais)

  8. #8
    Membre éclairé
    Avatar de MD Software
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 613
    Points : 680
    Points
    680
    Par défaut
    Tu as essayé le xor ?

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 68
    Points : 32
    Points
    32
    Par défaut
    J'avais fais un algo assez efficace : en fait je calculais la luminance de la couleur de fond, si elle était < 50% alors fonte en blanc sinon en noir.

    Voici le 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
     
    function GetLuminance(C: TColor): double;
    begin
       // indice lum composante bleu
       result:= ((C shr 16) and $FF) * 0.1145;
       // indice lum composante verte
       result:= result + ((C shr 8) and $FF) * 0.5866;
       // indice lum composante rouge
       result:= result + ((C shr 0) and $FF) * 0.2989;
    end;
     
    ...
       if (GetLuminance(BGColor) > 128) then Pen.Color:= clDkGray
       else Pen.Color:= clLtGray;
    ...

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 39
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par MD Software
    Tu as essayé le xor ?
    Oui, répondu plus haut

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 39
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par Stef_D
    J'avais fais un algo assez efficace : en fait je calculais la luminance de la couleur de fond, si elle était < 50% alors fonte en blanc sinon en noir.
    Je peux te donner le code si besoin est.
    Oui, ça m'interresse grandement, car après avoir essayé de calculer la couleur en fonction de celle de fond je m'apperçois que même si le résultat est lisible, coté esthetique c'est beaucoup moins probant, lol, et j'étais en train de chercher sur cette piste sans rien trouver (moi et le graphisme, ça fait à peu près Pi). Merci d'avance !

    => Oki, merci beaucoup pour le code !

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 68
    Points : 32
    Points
    32
    Par défaut
    J'ai édité mon message car je me suis dis que le code serait surement interessant

Discussions similaires

  1. Créer une clé plus lisible à partir d'une autre.
    Par Napjea dans le forum Oracle
    Réponses: 2
    Dernier message: 07/10/2011, 11h27
  2. Changer la couleur d'un JPanel à partir d'un bouton d'une autre classe
    Par ROUGE87 dans le forum Interfaces Graphiques en Java
    Réponses: 6
    Dernier message: 19/05/2011, 18h31
  3. [XL-2007] colorier une forme à partir de la couleur d'une cellule
    Par taz2328 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 01/11/2010, 18h24
  4. Réponses: 3
    Dernier message: 31/10/2006, 12h20
  5. Réponses: 18
    Dernier message: 08/08/2005, 20h52

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