Comment faire ressortir un texte sur un fond uni ?

Résolu
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 - 15 avril 2011 à 16:31
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 - 16 avril 2011 à 00:31
Bonjour tertous !

Je dois dessiner un texte sur un TCanvas de couleur unie, mais que l'utilisateur peut changer à sa guise.
J'utilise la procédure Canvas.TextRect.
Pour que le texte soit toujours bien visible, je choisis une couleur de fonte inverse de celle du fond :

Font.Color  := $00FFFFFF and (not BackgroundCol);


Dans la plupart des cas, cela fonctionne très bien.
Cependant quand le fond est de couleur clGray (ou approchante), la couleur inverse de clGray est clGray (ou quasi la même), et ce n'est plus lisible.

Je ne dois pas être le premier à être confronté à ce problème, et je vous demande quel est votre truc pour y remédier ?

Merci de votre attention.


_______________________________________
Soutenez Wikimédia France aujourd'hui : http://dons.wikimedia.fr

6 réponses

WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
15 avril 2011 à 19:07
Bonsoir

Va voir ici.

Cordialement.[hr]"L'imagination est plus importante que le savoir." Albert Einstein
3
Utilisateur anonyme
15 avril 2011 à 18:24
Ben moi perso, je fais

If Font.Color  := clGray Then
  Begin
    Showmessage('P"tain tu fais chier, tu pouvais pas choisir une autre couleur. #13#10 Bon pour la peine allez va faire à bouffer j'ai faim');
    Close;
  End;


T'en penses quoi ?
0
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
15 avril 2011 à 18:38
J'en pense que tu n'as même pas testé ton code pourri et que Cirec va te virer à grands coups de lattes dans le fion et que tu ne l'auras pas volé !


_______________________________________
Soutenez Wikimédia France aujourd'hui : http://dons.wikimedia.fr
0
Utilisateur anonyme
15 avril 2011 à 19:25
Ouppssss la boulette que j'ai fais

If Font.Color = clGray Then
  Begin
    Showmessage('Cirec va te virer à grands coups de lattes dans le fion et que tu ne l'auras pas volé !');
    Close;
  End;


Bon je me casse il y a Cirec qui arrive

Ps: Cirec si tu pouvais dire à Cari d'arreter de me piquer mon compte pour raconter des conneries sur le forum, ca serait tres gentil de ta part
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
15 avril 2011 à 19:33
J'en pense que tu n'as même pas testé ton code pourri et que Cirec va te virer à grands coups de lattes dans le fion et que tu ne l'auras pas volé !

Traduction en latin via google

Puto etiam non probatur putrida tua CIREC code ictus vicissim tabellulis venenatis in asino non accipias furto!

Retraduction en français par google

Je pense que c'est pas non plus autorisés à CIREC vos bras pour gonfler le code dans tabellulis tour souffle venimeux sur son cul ne prendra pas un vol!

J'aime beaucoup la fin de la traduction
0
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
16 avril 2011 à 00:31
@WhiteHippo
Merci beaucoup ! C'est exactement ce que je cherchais. De plus, le noir ou blanc est beaucoup plus élégant que mes textes bigarrés.

J'ai optimisé la fonction en la passant en Integer ( la constante, dans la fonction originale, était trop rigolote je trouve ;)

function Contrast(BackGroundColor: TColor): TColor;
begin
 with TRGBQuad(BackGroundColor) do
   if ((rgbRed shl 1 + rgbGreen*5 + rgbBlue) shr 3 > 127)//(R*2 + G*5 + B) div 8
     then Result := clblack
     else Result := clwhite;
end;


@Francky
Ce n'est pas la peine d'essayer de noyer le poisson avec du latin :

TOUT LE MONDE A VU COMMENT FRANCKY FAISAIT POUR BOGUER SON CODE !


Proverbe Troll :
Verba volant, scripta manent.

Autre proverbe Troll :
In cauda venenum.
0
Rejoignez-nous