Comment faire ressortir un texte sur un fond uni ? [Résolu]

Messages postés
2684
Date d'inscription
jeudi 15 janvier 2004
Dernière intervention
26 juillet 2018
- - Dernière réponse : Caribensila
Messages postés
2684
Date d'inscription
jeudi 15 janvier 2004
Dernière intervention
26 juillet 2018
- 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
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Messages postés
1270
Date d'inscription
samedi 14 août 2004
Dernière intervention
5 avril 2012
3
Merci
Bonsoir

Va voir ici.

Cordialement.[hr]"L'imagination est plus importante que le savoir." Albert Einstein

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de WhiteHippo
0
Merci
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 ?
Commenter la réponse de Utilisateur anonyme
Messages postés
2684
Date d'inscription
jeudi 15 janvier 2004
Dernière intervention
26 juillet 2018
0
Merci
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
Commenter la réponse de Caribensila
0
Merci
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
Commenter la réponse de Utilisateur anonyme
0
Merci
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
Commenter la réponse de Utilisateur anonyme
Messages postés
2684
Date d'inscription
jeudi 15 janvier 2004
Dernière intervention
26 juillet 2018
0
Merci
@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.
Commenter la réponse de Caribensila

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.