Convertir une couleur système en RGB ? [résolu] [VB 6] - VB/VBA/VBS - Programmation
Marsh Posté le 23-06-2002 à 09:28:28
je ne connais pas, mais je crois que la couleur système et en Hexadécimal ? si c'est le cas, ce n'est plus trés compliqué...il te suffit de convertir l'hexadeciaml en decimal...
Marsh Posté le 23-06-2002 à 10:39:35
essaye peut etre l'API GetSysColor
Declare Function GetSysColor Lib "user32" Alias "GetSysColor" (ByVal nIndex As Long) As Long
jamais testé , je pense que le paramatre index est l'octet de poid ort dont tu parle , et la fonction renvoie la couleur RGB.
Marsh Posté le 23-06-2002 à 22:50:56
macray a écrit a écrit : je ne connais pas, mais je crois que la couleur système et en Hexadécimal ? si c'est le cas, ce n'est plus trés compliqué...il te suffit de convertir l'hexadeciaml en decimal... |
Non, ce sont deux systèmes trop différents.
L'un me dit: n-ième couleur du système.
L'autre me dit: rouge tant, vert tant, bleu tant.
cerdoc a écrit a écrit : essaye peut etre l'API GetSysColor Declare Function GetSysColor Lib "user32" Alias "GetSysColor" (ByVal nIndex As Long) As Long jamais testé , je pense que le paramatre index est l'octet de poid ort dont tu parle , et la fonction renvoie la couleur RGB. |
Ça doit être la bonne solution.
Je reviens dès que ça marche (ou pas).
Marsh Posté le 24-06-2002 à 09:04:52
musaran a écrit a écrit : Non, ce sont deux systèmes trop différents. L'un me dit: n-ième couleur du système. L'autre me dit: rouge tant, vert tant, bleu tant. Ça doit être la bonne solution. Je reviens dès que ça marche (ou pas). |
Marsh Posté le 24-06-2002 à 11:54:38
Option Explicit
private Type RGB
R As Long
G As Long
B As Long
End Type
private Function GetRGB(ByVal Color As Long) As RGB
Dim The_Couleur As String
The_Couleur = Right("000000" & Hex(Color), 6)
With GetRGB
.R = Val("&h" & Right(The_Couleur , 2))
.G = Val("&h" & Mid(The_Couleur , 3, 2))
.B = Val("&h" & Left(The_Couleur , 2))
End With
End Function
Marsh Posté le 24-06-2002 à 20:40:32
KarLKoX a écrit a écrit : Option Explicit private Type RGB R As Long G As Long B As Long End Type private Function GetRGB(ByVal Color As Long) As RGB Dim The_Couleur As String The_Couleur = Right("000000" & Hex(Color), 6) With GetRGB .R = Val("&h" & Right(The_Couleur , 2)) .G = Val("&h" & Mid(The_Couleur , 3, 2)) .B = Val("&h" & Left(The_Couleur , 2)) End With End Function |
oh ça c'est bien vu !
Marsh Posté le 24-06-2002 à 21:29:21
|
Tu lui file une couleur RGB normale ou système, ca te retourne la couleur traduite (ou pas)
Apres, pour les composantes R,G,B, tu utilises ca :
|
Je pense que c'est bien plus rapide que de faire une suite de concaténations et de conversions de chaines....
Marsh Posté le 25-06-2002 à 16:07:12
justement non, moi aussi je bitshiftais mais en VB, c'est un poil plus long (testé avec GetTickCount).
Marsh Posté le 26-06-2002 à 01:48:55
N'en jetez plus !
Mon idée est de faire la moyenne de la couleur sytème "grisé" et rouge pour indiqué qu'un path n'est pas valide, même s'il est désactivé.
Je vous montrerais mon "Oeuvre" dès qu'elle sera prête (y'a pas le feu au lac).
karlkox as-tu essayé avec une string de longueur fixe ?
Marsh Posté le 26-06-2002 à 22:19:28
La valeur des couleurs système est dans l'octet de poids faible, contrairement à ce que j'avais dit dans mon premier post.
Les couleurs système sont simplement marquées par le bit de poids fort à 1.
KarLKoX
Attention avec GetTickCount, cette horloge a un pas de 10 à 55 ms, et elle tourne même lorsque le process chronométré est préempté.
Je crois que j'ai mieux, je cherche et je le poste.
Tu as chronométré quoi ? L'environnement Visual Basic (interprété, favorisant le texte) est très différent de l'exécutable (compilé, favorisant les entiers).
Note:
Le shiftage par division par une puissance de 2 n'est malheureusement pas optimisé en vrai décalage, car Long est un type signé, et que pour un nombre négatif le décalage est différent d'une division/multiplication par 2.
Enfin, toujours est-il que ça marche, voici mon code:
Declare Function GetSysColor Lib "USER32.DLL" (ByVal nIndex As Long) As Long |
Marsh Posté le 23-06-2002 à 03:13:24
Une couleur système est un indice indiquant quelle couleur de la configuration windows utiliser (texte, fond, barre, sélection...)
Une couleur RGB utilise trois octets pour stocker les composantes rouge, vert, et bleu.
Elles sont donc très différentes, et je ne vois vraiment pas comment passer du mode système à RGB.
Message édité par Musaran le 26-06-2002 à 22:27:01
---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone