BackgroundHorizontalGradient - Paint an horizontal gradient background
Private Declare Function RealizePalette Lib "gdi32" (ByVal hdc As Long) As Long
' Paint an horizontal gradient
'
' STARTCOLOR is the starting color (applied to left border)
' ENDCOLOR is the ending color (applied to right border)
' NUMSTEPS is the optional number of stripes (default is 256)
' Example: a gradient from black to blue
' BackgroundHorizontalGradient Form1, 0, &HFF0000
Sub BackgroundHorizontalGradient(frm As Form, ByVal startColor As Long, _
ByVal endColor As Long, Optional ByVal numSteps As Integer = 256)
Dim startRed As Integer, startGreen As Integer, startBlue As Integer
Dim deltaRed As Integer, deltaGreen As Integer, deltaBlue As Integer
Dim x As Single, dx As Single
Dim stp As Long
' Split the start color into its RGB components
startRed = startColor And &HFF
startGreen = (startColor And &HFF00&) \ 256
startBlue = (startColor And &HFF0000) \ 65536
' Split the end color into its RGB components
deltaRed = (endColor And &HFF&) - startRed
deltaGreen = (endColor And &HFF00&) \ 256 - startGreen
deltaBlue = (endColor And &HFF0000) \ 65536 - startBlue
RealizePalette frm.hdc
' Eval width of each block
dx = frm.ScaleWidth / numSteps
For stp = 0 To numSteps - 1
frm.Line (x, 0)-(x + dx, frm.ScaleHeight), RGB(startRed + (deltaRed * _
stp) \ numSteps, startGreen + (deltaGreen * stp) \ numSteps, _
startBlue + (deltaBlue * stp) \ numSteps), BF
x = x + dx
Next
End Sub