Hi,
Wenn jemand noch nicht weiß wie das geht, hier die Lösung:
Code im Modul:Public Declare Function GetSysColor Lib "user32.dll" (ByVal nIndex As Long) As _
Long
Public Declare Function OleTranslateColor Lib "OLEPRO32.DLL" (ByVal OLE_COLOR _
As Long, ByVal HPALETTE As Long, pccolorref As Long) As Long
Public Const CLR_INVALID As Long = &HFFFF&
Public Property Get BlendColor(ByVal oColorFrom As OLE_COLOR, ByVal oColorTo As _
OLE_COLOR, Optional ByVal alpha As Long = 128) As Long
Dim lCFrom As Long
Dim lCTo As Long
lCFrom = TranslateColor(oColorFrom)
lCTo = TranslateColor(oColorTo)
Dim lSrcR As Long
Dim lSrcG As Long
Dim lSrcB As Long
Dim lDstR As Long
Dim lDstG As Long
Dim lDstB As Long
lSrcR = lCFrom And &HFF
lSrcG = (lCFrom And &HFF00&) \ &H100&
lSrcB = (lCFrom And &HFF0000) \ &H10000
lDstR = lCTo And &HFF
lDstG = (lCTo And &HFF00&) \ &H100&
lDstB = (lCTo And &HFF0000) \ &H10000
BlendColor = RGB(((lSrcR * alpha) / 255) + ((lDstR * (255 - alpha)) / 255), ( _
(lSrcG * alpha) / 255) + ((lDstG * (255 - alpha)) / 255), ((lSrcB * alpha) _
/ 255) + ((lDstB * (255 - alpha)) / 255))
End Property
Public Function TranslateColor(ByVal clr As OLE_COLOR, Optional hPal As Long = _
0) As Long
If OleTranslateColor(clr, hPal, TranslateColor) Then TranslateColor = _
CLR_INVALID
End Function Für das Beispiel erstelle ein Formular mit 15 Pictureboxen. Benenne einfach eine "Farben", gib ihr den Index 0 und kopiere sie 14 mal.
Code in Form1:Private Sub Farben_Paint(Index As Integer)
Farben(0).BackColor = GetSysColor(vb3DShadow And &H1F&) 'Linie
Farben(1).BackColor = BlendColor(vb3DHighlight And &H1F&, vbWindowBackground, _
6) 'Hintergrund
Farben(2).BackColor = TranslateColor(BlendColor(vbWindowBackground, vb3DFace, _
42)) 'Checkmark
Farben(3).BackColor = BlendColor(vb3DShadow, vbWindowBackground, 256) 'Disable
' Checked Border
Farben(4).BackColor = BlendColor(vb3DLight, vbWindowBackground, 110) 'Disable
' Checked Fläche
Farben(5).BackColor = BlendColor(vbHighlight, vbWindowBackground, 255) 'Enabled
' Checked Border
Farben(6).BackColor = BlendColor(vbHighlight, vbWindowBackground, 40) 'Enabled
' Checked Fläche
Farben(7).BackColor = BlendColor(vbHighlight, vbWindowBackground, 116) 'Enabled
' Checked Fläche Over
Farben(8).BackColor = BlendColor(vbHighlight, vbWindowBackground, 255) 'Enabled
' Checked Border Over
Farben(9).BackColor = BlendColor(vb3DShadow, vbWindowBackground, 256) 'Disabled
' Checked Border Over
Farben(10).BackColor = TranslateColor(ActiveMenuForeColor) 'Textcolor
Farben(11).BackColor = TranslateColor(InActiveMenuForeColor) 'Inactive Textcolor
Farben(12).BackColor = BlendColor(vb3DLight, vbWindowBackground, 110) 'Disabled
' Textcolor
Farben(13).BackColor = BlendColor(vbHighlight, vbWindowBackground, 77) 'Fläche
' Over
Farben(14).BackColor = BlendColor(vbHighlight, MenuBackgroundColor, 255) _
'Border Over
End Sub PS: @Dieter: Du könntest dies auch in deine sevMenuXP ActiveX einbauen  |