BackgroundVerticalGradient - Paint a vertical gradient background
Private Declare Function RealizePalette Lib "gdi32" (ByVal hdc As Long) As Long
' Paint a vertical gradient
'
' STARTCOLOR is the starting color (applied to top border)
' ENDCOLOR is the ending color (applied to bottom border)
' NUMSTEPS is the optional number of stripes (default is 256)
'
' Example: a vertical gradient from blue to Red
' BackgroundVerticalGradient Form1, &HFF0000, &HFF
Sub BackgroundVerticalGradient(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 y As Single, dy 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
dy = frm.ScaleHeight / numSteps
For stp = 0 To numSteps - 1
frm.Line (0, y)-(frm.ScaleWidth, y + dy), RGB(startRed + (deltaRed * _
stp) \ numSteps, startGreen + (deltaGreen * stp) \ numSteps, _
startBlue + (deltaBlue * stp) \ numSteps), BF
y = y + dy
Next
End Sub