Problème de capacité bizarre

Résolu
vxn772 Messages postés 29 Date d'inscription jeudi 8 février 2007 Statut Membre Dernière intervention 3 mars 2009 - 22 mai 2008 à 17:36
vxn772 Messages postés 29 Date d'inscription jeudi 8 février 2007 Statut Membre Dernière intervention 3 mars 2009 - 23 mai 2008 à 16:46
Bonjour tout le monde !

J'ai un problème très bizarre, que je ne comprend absolument pas.
Je suis en train de travailler sur un OCX, déssiné avec du GDI.
À un moment, j'ai besoin de convertir des couleurs type RGB en type Long.
C'est pas de problème pour la formule, mais quand j'essaye d'executer l'appli, il m'affiche "Dépassement de capacité", alors que
le résultat est inférieur à 10.000.000 et qu'il est donné dans une variable de type double !

Je comprend pas le problème, mais je suis sur que vous pourrez m'aider !

Merci d'avance !
VB6 C'est++ mieux !

P.S.: Dans ce cas précis, le calcul à faire est :  var = 255 * 255 * 151 + 255 * 151 + 151 (= 9857431)

8 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
22 mai 2008 à 19:38
Ton problème vient de Col.B * 255 * 255 et de Col.G * 255

Prennons Col.G, c'est une variable de type Byte, donc pouvant varier de -128 à +128

Avant toute conversion ultérieure, le résultat de cette sous opération sera du même type que le premier opérande donc ici de Col.G soit Byte.
Imaginons que Col.G soit égal à 1, le résultat sera égal à 255. Ca ne rentre pas dans un byte.

L'astuce consiste à fixer dès le départ le type à Long en convertissant ta variable en Long.

Donc avec une formule comme ceci, ça devrait je pense mieux marcher :

RGBToLong = CLong(Col.B) * 255 * 255 + CLong(Col.G) * 255 + CLong(Col.R)

---- Sevyc64  (alias Casy) ---- <hr size ="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
3
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
22 mai 2008 à 19:14
Avec ton code ça serait mieux pour comprendre.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0
vxn772 Messages postés 29 Date d'inscription jeudi 8 février 2007 Statut Membre Dernière intervention 3 mars 2009
22 mai 2008 à 19:30
Déjà merci pour avoir répondu aussi vite !
Je te passe le code :

Ma fonction :
Private Function RGBToLong(Col As RGB_COLOR_INT) As Long
RGBToLong = Col.B * 255 * 255 + Col.G * 255 + Col.R
End Function

La déclaration de type :
Private type RGB_COLOR_INT
    B as byte
    G as byte
    R as byte
End type

L'appel de la fonction :
Dim Col1 as RGB_COLOR_INT
Dim ColLng as double
Col1.B = 151 (enfin c'est plus compliqué ici, mais en gros, c'est la valeure que je veux pour l'instant)
Col1.G = 151
Col1.R = 151
ColLng = CDbl(RGBToLong(Col1))

VB6 C'est++ mieux !
0
vxn772 Messages postés 29 Date d'inscription jeudi 8 février 2007 Statut Membre Dernière intervention 3 mars 2009
22 mai 2008 à 20:38
Ça marche ! Merci beaucoup ! C'était effectivement le bug.
J'avais trouvé une manière de contourner en utilisant LSet, mais elle est plus compliquée.
VB6 C'est++ mieux !
0

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

Posez votre question
Profil bloqué
22 mai 2008 à 21:23
[javascript:alink_4.Click() variables de type Byte] sont stockées sous
la forme d'un nombre de 8 bits (1 octet unique), non signé, compris entre 0 et
255.

Le
<object id="alink_5" type="application/x-oleobject" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11"></object>[javascript:alink_5.Click() type de données]Byte est utile pour
le stockage de données binaires.

A+ et bonne soirée

GRENIER Alain
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
22 mai 2008 à 21:35
Personne n'est parfait

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
23 mai 2008 à 09:44
Bonjour

En VB6, il n'y a pas la fonction RGB ?
RGB (QteRed, QteGreen, QteBlue)

Le fer à souder a besoin d'une panne pour fonctionner.
VB (6, .NET1&2), C++, C#.Net1
Mon site
0
vxn772 Messages postés 29 Date d'inscription jeudi 8 février 2007 Statut Membre Dernière intervention 3 mars 2009
23 mai 2008 à 16:46
Je ne connaissais pas cette fonction., mais je viens de tester, et elle marche très bien !

Merci beaucoup !

VB6 C'est++ mieux !
0
Rejoignez-nous