begin process at 2008 05 12 07:40:27
1 170 153 membres
57 nouveaux aujourd'hui
13 956 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

COULEUR HEXADECIMAL


Information sur la source

Catégorie :Divers Classé sous : couleur, hexadecimal, hexa, hexadécimal Niveau : Débutant Date de création : 01/03/2006 Date de mise à jour : 02/03/2006 12:07:11 Vu : 8 148

Note :
Aucune note

Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note

Description

J'avais besoin pour des besoins tiré web d'avoir un système permettant d'encoder et de visualiser dans mon code la couleur "web", elle est représentez sous la forme Hexadécimal ce qui complique un peu plus la chose.
J'ai parcourue le web et c'est sur MSDN que j'ai trouvé la solution, il me semble bon de la présenter ici.

J'ai un champs (C_color) dans une table renseignant la couleur sous la forme 'ff00ff'  qui correspondrait à rose --> rgb(255,0,255)
Pour faire ma conversation j'utilise 3 variables temporaires pour mes 3 couleurs primaire (Rouge Vert Bleu)

Source

  • && Exemple pour transformer l'hexa en decimal
  • lc_colorR = '0x' +SUBSTR(C_Color,1,2)
  • lc_colorG = '0x' +SUBSTR(C_Color,3,2)
  • lc_colorB = '0x' +SUBSTR(C_Color,5,2)
  • monobjet.Backcolor = RGB(&lc_colorR, &lc_colorG, &lc_colorB)
  • myvar = Int2Hex(monobjet.Backcolor) && myvar contient le code hexadécimal sur 6 caractères
  • && fonction pour transformer le décimal en hexa
  • && EXTRAIT DE http://www.news2news.com/vfp/?example=260
  • FUNCTION Int2Hex (num)
  • DECLARE INTEGER wnsprintf IN Shlwapi;
  • STRING @lpOut, INTEGER cchLimitIn,;
  • STRING pszFmt, INTEGER
  • LOCAL lnResult, lcResult
  • lcResult = SPACE(20)
  • lnResult = wnsprintf(@lcResult, 20, "%x", num)
  • RETURN Left(lcResult, lnResult)
  • ENDFUNC
&& Exemple pour transformer l'hexa en decimal
lc_colorR = '0x' +SUBSTR(C_Color,1,2)
lc_colorG = '0x' +SUBSTR(C_Color,3,2)
lc_colorB = '0x' +SUBSTR(C_Color,5,2)

monobjet.Backcolor = RGB(&lc_colorR, &lc_colorG, &lc_colorB)

myvar = Int2Hex(monobjet.Backcolor)     && myvar contient le code hexadécimal sur 6 caractères

&& fonction pour transformer le décimal en hexa
&& EXTRAIT DE http://www.news2news.com/vfp/?example=260
FUNCTION  Int2Hex (num)
    DECLARE INTEGER wnsprintf IN Shlwapi;
        STRING @lpOut, INTEGER cchLimitIn,;
        STRING pszFmt, INTEGER

    LOCAL lnResult, lcResult
    lcResult = SPACE(20)
    lnResult = wnsprintf(@lcResult, 20, "%x", num)
    RETURN Left(lcResult, lnResult)
ENDFUNC
01 mars 2006 16:50:40 :
correction
02 mars 2006 12:07:13 :
Ajout de l'integer to hexa
  • signaler à un administrateur
    Commentaire de FrancisFaure le 10/05/2006 15:23:46

    Puis je te proposer une version sans l'appel api :

    * Code hexa en décimal
    C_color = "FF00FF"
    r = evaluate("0x"+substr(c_Color,1,2))
    v = evaluate("0x"+substr(c_Color,3,2))
    b = evaluate("0x"+substr(c_Color,5,2))
    ? r,v,b

    * code décimal en hexa :
    ? right(TRANSFORM(r*256^2 + v*256 + b, "@0"),6)

    Cordialement
    Francis

  • signaler à un administrateur
    Commentaire de tmcuh le 18/05/2006 16:02:35

    Merci pour cette proposition mais en testant celà pose un problème :

    c_color = "D1010E"
    r = evaluate("0x"+substr(c_Color,1,2))
    g = evaluate("0x"+substr(c_Color,3,2))
    b = evaluate("0x"+substr(c_Color,5,2))
    _screen.backcolor = RGB(r,g,b) && le fond est rouge comme la valeur de départ le désigne
    ? right(TRANSFORM(_screen.BackColor, "@0"),6)  && la couleur renvoyé correspond à du bleu

    Il affiche 0E01D1 ... Une propostion?

  • signaler à un administrateur
    Commentaire de FrancisFaure le 18/05/2006 19:18:24

    Bonjour,
    Ton erreur repose sur le fait que tu considére que le nombre retourné par la fonction RGB() est un nombre qui correspondrait, une fois converti en hexa, a 3 octets dans l'ordre RGB,
    or c'est l'inverse le poids fort c'est le B, donc BGR...
    si tu veux transformer la valeur de RGB() en hexa RGB il te faut inverser les poids avant.

    essayer avec cette fonction (surement optimisable :)


    FUNCTION RBG_to_Hexa(licolor as Integer) as Integer
    LOCAL lbR as Byte
    LOCAL lbG as Byte
    LOCAL lbB as Byte
      lbB = INT(licolor/256^2)
      licolor = licolor-lbB*256^2
      lbV = INT(licolor/256)
      licolor = licolor-lbV*256
      lbR = licolor
    RETURN RIGHT(TRANSFORM(lbR*256^2+lbV*256+lbB, "@0"),6)

  • signaler à un administrateur
    Commentaire de FrancisFaure le 18/05/2006 19:19:33

    Rectification dans la déclaration :
    FUNCTION RBG_to_Hexa(licolor as Integer) as string

  • signaler à un administrateur
    Commentaire de FrancisFaure le 18/05/2006 19:26:58

    autre solution :p

    FUNCTION RGB_to_Hexa(licolor as Integer) as string
    LOCAL lcHexa
      lcHexa = RIGHT(TRANSFORM(licolor , "@0"),6)
    RETURN SUBSTR(lcHexa,5,2) + SUBSTR(lcHexa,3,2) + SUBSTR(lcHexa,1,2)

Ajouter un commentaire

Discussions en rapport avec ce code source

Appels d'offres

Pub



CalendriCode

Mai 2008
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS