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 :

TColor avec un entier signé


Sujet :

Langage Delphi

  1. #1
    Membre régulier Avatar de KRis
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    232
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 232
    Points : 105
    Points
    105
    Par défaut TColor avec un entier signé
    Bonjour à tous,
    Mon programme récupère des couleurs de type integer.
    en faisant un TColor(Valeur), je récupère correctement la couleur.

    Depuis peu, les couleurs dans la table sont toujours stockées sous le type integer, mais sont enregistrées avec une valeur négative.
    il s'agit probablement de la valeur hexadécimale ?
    je ne suis pas expert dans ces manipulations, mais je souhaiterais simplement convertir cette valeur dans l'ancien type non signé ?
    pour que je puisse continuer à attribuer mes couleurs en faisant un TColor(Valeur)...

    quelqu'un connaitrait-il une fonction ou l'algorithme me permettant de réaliser ceci ?

    Merci par avance,
    Christophe

  2. #2
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut,

    C'est un peu étrange ça non ?
    Je suis curieux de voir le bout de code qui enregistre les données dans la table et également le bout de code qui récupère ces valeurs ...
    Logiquement, lorsqu'on enregistre les valeurs, si c'est positif, ça reste positif ...
    Tu as un exemple à nous fournir stp ?
    Merci

  3. #3
    Membre régulier Avatar de KRis
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    232
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 232
    Points : 105
    Points
    105
    Par défaut
    En fait ce n'est pas moi qui enregistre les données dans la table, donc je n'ai pas le code qui insère.

    au niveau de la récupération, c'est juste une valeur entière.

    par exemple : -16737793 (celle-ci correspond à du bleu)
    pour obtenir la bonne valeur non signée pour faire ma conversion TColor(valeur), il faut ajouter 2 147 483 648 à la précédente valeur négative.

    petit rappel :
    Integer = Int32 = 4 octets = -2 147 483 648 à 2 147 483 647 (signé)

    Je n'ai pas l'explication, mais ça marche... peut être quelqu'un peut il m'éclairer ?

    Christophe

  4. #4
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Je ne peux t'aider ...
    C'est étrange ...
    Si les données sont correctement récupérées ;les données correspondent à celles de la table, donc négative, alors c'est au niveau de l'insertion que ça cafouille ... Je ne vois que cela! Peut être il y a une autre explication, mais je n'ai pas assez de recul sur la chose
    Cordialement

  5. #5
    Membre régulier Avatar de KRis
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    232
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 232
    Points : 105
    Points
    105
    Par défaut
    Merci quand même, je vais exposer mon problème différemment.

    prenons la couleur rouge, celle-ci est stockée dans ma base sous l'entier signé suivant : -65536.
    sa valeur héxadécimale est la suivante : FFFFFFFFFFFF0000
    Sous photoshop, la valeur hexadécimale du rouge est : ff0000

    j'arrive à obtenir cette valeur hexadécimale, mais quand je l'affecte au TColor de mon composant, j'obtiens du bleu !?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Panel1.Color:=TColor($FF0000);
    quelqu'un pourrait il m'aider ???

    merci d'avance,
    Christophe

  6. #6
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Re,

    Sous Delphi, les composantes sont inversées... (c'est BGR et non RGB)
    Il faut écrire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Panel1.Color:=TColor($0000FF);
    Citation Envoyé par Aide Delphi
    Le type TColor est utilisépour spécifier la couleur d'un contrôle multiplate-forme.Il est utilisépar la propriétéColor de nombreux composants et par bien d'autres propriétés qui spécifient des valeurs de couleurs.

    L'unitéGraphics contient la définition de constantes TColor utiles.Ces constantes renvoient soit directement àla couleur la plus approchante dans la palette système (par exemple,clBlue renvoie au bleu),soit àla couleur de l'élément écran du système correspondante (par exemple,clNormalButton renvoie àla couleur système des faces de boutons).En outre,il existe un ensemble de constantes de compatibilitéqui renvoient àdes constantes système mais dont les noms correspondent àdes constantes système des couleurs Windows.

    Si vous spécifiez une valeur TColor en tant que valeur hexadécimale de 4 octets au lieu d'utiliser les constantes définies dans l'unitéGraphics,les trois premiers octets représentent respectivement l'intensitéRGB des couleurs bleu,vert et rouge.La valeur $00FF0000 (Delphi)ou 0x00FF0000 (C++)représente un bleu pur de pleine intensité,$0000FF00 (Delphi)ou 0x0000FF00 (C++),un vert pur et $000000FF (Delphi)ou 0x000000FF (C++),un rouge pur.$00000000 (Delphi)ou 0x00000000 (C++)représente le noir et $00FFFFFF (Delphi)ou 0x00FFFFFF (C++),le blanc.

    Si l'octet de poids fort vaut zéro,la couleur obtenue est celle la plus approchante dans la palette système.Si l'octet de poids fort vaut un ($01 ou 0x01),la couleur obtenue est celle la plus approchante dans la palette actuellement active.Si l'octet de poids fort vaut deux ($02 ou 0x02),la couleur obtenue est celle la plus approchante dans la palette logique du contexte de périphérique en cours.

    Les tableaux suivants énumèrent les constantes de couleur de l'unitéGraphics.Les deux premières colonnes sont les couleurs correspondant aux couleurs les plus proches dans la palette système suivies des constantes de compatibilité,alors que les deux dernières sont les constantes de couleurs système.Elles sont définies d'après la propriétéBaseColorde la palette en cours.

  7. #7
    Membre régulier Avatar de KRis
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    232
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 232
    Points : 105
    Points
    105
    Par défaut
    Merci beaucoup, je commence à comprendre !

    dernière question :
    je convertis ma valeur rouge d'entier signé -65536 en héxadécimale par la fonction suivante :
    j'obtiens FFFF0000, ceci est donc du RGB. pourquoi sur 8 caractères ?
    puis je utiliser seulement les 6 derniers caractères ?
    c'est à dire insérer '$0000FF' dans mon TColor...

  8. #8
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    En fait, j'avoue ne pas trop comprendre comment se manipule le premier octet ... toujours est-il que si tu le laisse à 00, tu as un intensité maximale.

    Donc oui, tu peux utiliser 6 octets (je te conseille de laisser les 8 octets... c'est ce qu'il y a de préconisé car 24 n'est pas un multiple de 16)!

    Si tu veux en savoir plus, fait des recherches sur RGBQUAD...
    A+

Discussions similaires

  1. JSlider avec incrementation entiere
    Par jayjay.f dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 29/04/2007, 05h55
  2. Comment mettre dans un 'CHARACTER' un entier signé
    Par Kaeguri dans le forum Fortran
    Réponses: 2
    Dernier message: 16/04/2007, 17h11
  3. [C#] Conversion chaîne vers entier signé 8 bits
    Par SesechXP dans le forum Windows Forms
    Réponses: 2
    Dernier message: 25/09/2006, 14h29
  4. Réponses: 18
    Dernier message: 28/08/2006, 23h07
  5. fstream >> probleme avec les entiers
    Par Acropole dans le forum SL & STL
    Réponses: 6
    Dernier message: 01/12/2005, 10h36

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