Quantcast
Channel: VBForums - CodeBank - Visual Basic 6 and earlier
Viewing all articles
Browse latest Browse all 1483

Animation demonstration drawing a rectangle with gradient filling by vb6

$
0
0
from here?https://blog.csdn.net/weixin_3210910...ails/117191984
This may be the original link that I can't open to view.
http://vbcity.com/forums/t/73200.aspx

Code:

  Dim r As RECT

    r.Left = 10
    r.Top = 10
    r.Right = 300
    r.Bottom = 550
    Call gdiDrawGradient(Me.hdc, r, vbRed, vbBlue, True)

Name:  demo.gif
Views: 138
Size:  43.1 KB
Code:

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Declare Function timeGetTime Lib "winmm.dll" () As Long
Declare Function timeBeginPeriod Lib "winmm.dll" (ByVal uPeriod As Long) As Long
Declare Function timeEndPeriod Lib "winmm.dll" (ByVal uPeriod As Long) As Long
Public PauseTime As Long


Public Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type

Private Declare Function CreateSolidBrush Lib "gdi32" (ByVal crColor As Long) As Long
Private Declare Function FillRect Lib "user32" (ByVal hdc As Long, lpRect As RECT, ByVal hBrush As Long) As Long
Public Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long



Function Pause(HowLong As Long)
    Dim tick As Long
    tick = timeGetTime()
    Do
      DoEvents
      Sleep 1
    Loop Until tick + HowLong < timeGetTime
End Function

Public Sub gdiDrawGradient( _
            ByVal hdc As Long, _
            ByRef rct As RECT, _
            ByVal lEndColor As Long, _
            ByVal lStartColor As Long, _
            ByVal bVertical As Boolean)

    Dim lStep As Long
    Dim lPos As Long, lSize As Long
    Dim bRGB(1 To 3) As Integer
    Dim bRGBStart(1 To 3) As Integer
    Dim dR(1 To 3) As Double
    Dim dPos As Double, d As Double
    Dim hBr As Long
    Dim tR As RECT

    LSet tR = rct
    If bVertical Then
        lSize = (tR.Bottom - tR.Top)
    Else
        lSize = (tR.Right - tR.Left)
    End If
    lStep = lSize \ 255
    If (lStep < 3) Then
        lStep = 3
    End If

    bRGB(1) = lStartColor And &HFF&
    bRGB(2) = (lStartColor And &HFF00&) \ &H100&
    bRGB(3) = (lStartColor And &HFF0000) \ &H10000
    bRGBStart(1) = bRGB(1): bRGBStart(2) = bRGB(2): bRGBStart(3) = bRGB(3)
    dR(1) = (lEndColor And &HFF&) - bRGB(1)
    dR(2) = ((lEndColor And &HFF00&) \ &H100&) - bRGB(2)
    dR(3) = ((lEndColor And &HFF0000) \ &H10000) - bRGB(3)

    For lPos = lSize To 0 Step -lStep '
        ' Draw bar
        If bVertical Then
            tR.Top = tR.Bottom - lStep
        Else
            tR.Left = tR.Right - lStep
        End If
        If tR.Top < rct.Top Then
            tR.Top = rct.Top
        End If
        If tR.Left < rct.Left Then
            tR.Left = rct.Left
        End If

        hBr = CreateSolidBrush((bRGB(3) * &H10000 + bRGB(2) * &H100& + bRGB(1)))
        FillRect hdc, tR, hBr
        DeleteObject hBr

        ' Adjust colour '
        dPos = ((lSize - lPos) / lSize)
        If bVertical Then
            tR.Bottom = tR.Top
            bRGB(1) = bRGBStart(1) + dR(1) * dPos
            bRGB(2) = bRGBStart(2) + dR(2) * dPos
            bRGB(3) = bRGBStart(3) + dR(3) * dPos
        Else
            tR.Right = tR.Left
            bRGB(1) = bRGBStart(1) + dR(1) * dPos
            bRGB(2) = bRGBStart(2) + dR(2) * dPos
            bRGB(3) = bRGBStart(3) + dR(3) * dPos
        End If
            If PauseTime > 0 Then Pause PauseTime
    Next lPos

End Sub

Attached Images
 
Attached Files

Viewing all articles
Browse latest Browse all 1483

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>