Musaran Cerveaulté | 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
'helper
Function AvgLong(ByVal Arg1 As Long, ByVal Arg2 As Long) As Long
AvgLong = (Arg1 + Arg2) / 2
End Function
'Color handling
Function Color_SysToRGB(ByVal SysColor As Long) As Long
Color_SysToRGB = GetSysColor(SysColor And &H7FFFFFFF)
End Function
Function Color_AnyToRGB(ByVal ArgColor As Long) As Long
If (ArgColor And &H80000000) Then ArgColor = Color_SysToRGB(ArgColor)
Color_AnyToRGB = ArgColor
End Function
Function Color_BlendRGB(ByVal Arg1 As Long, ByVal Arg2 As Long) As Long
Dim RPart As Long
Dim GPart As Long
Dim BPart As Long
RPart = AvgLong(Arg1 And &HFF, Arg2 And &HFF)
GPart = AvgLong(Arg1 And &HFF00, Arg2 And &HFF00)
BPart = AvgLong(Arg1 And &HFF0000, Arg2 And &HFF0000)
Color_BlendRGB = RPart Or GPart Or BPart
End Function
'code utilisateur
Private Sub txt_Change()
txt.ForeColor = IIf(Exists, _
IIf(Grayed, vbGrayText, vbWindowText), _
IIf(Grayed, Color_BlendRGB(vbRed, Color_SysToRGB(vbGrayText)), vbRed))
End Sub |
Message édité par Musaran le 26-06-2002 à 22:22:54 ---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
|