DrawHighliteGradientFrame – Draw a form with raised/sunken gradient borders

Private Type POINTAPI    x As Long    Y As LongEnd TypePrivate Declare Function SetPixel& Lib "gdi32" (ByVal hDC As Long, _    ByVal x As Long, ByVal Y As Long, ByVal crColor As Long)Private Declare Function LineTo& Lib "gdi32" (ByVal hDC As Long, _    ByVal x As Long, ByVal Y As Long)Private Declare Function MoveToEx Lib "gdi32" (ByVal hDC As Long, _    ByVal x As Long, ByVal Y As Long, lpPoint As POINTAPI) As Long' Create a form with a 3D gradient frame'' Pass this a borderless form' You get better results with AutoRedraw set to TRUE' and with HiLiteCol and ShadowCol "close" to the' form's BackColor'' It draws a series of lines around the form' starting on the outside and moving one pixel inward with each line' the number of lines is determined by the "Steps" value that is passed.' The Left and Top use the "HiliteCol" value' the Right and Bottom use the "ShadowCol" value.' Swap them to get a sunken effect' Call this routine from within Form_Load, as in:'    Sub Form_Load()'        Const MyBackgroundColor = 16119262'        Const MyShadowColor = 14474381'        Const MyHiLiteColor = 15329769'        Me.BackColor = MyBackgroundColor'        DrawHighliteGradientFrame Me, MyHiLiteColor, MyShadowColor, 7'    End SubSub DrawHighliteGradientFrame(FormIn As Form, ByVal HiLiteCol As Long, _    ByVal ShadowCol As Long, ByVal Steps As Integer)    ' exit if the form is minimized    If FormIn.WindowState = vbMinimized Then Exit Sub           Dim InnerCol As Long    Dim R_Inner As Long, G_Inner As Long, B_Inner As Long    Dim R_HiLite As Long, G_HiLite As Long, B_HiLite As Long     Dim R_Shadow As Long, G_Shadow As Long, B_Shadow As Long    Dim R_HiLiteIncr As Single, G_HiLiteIncr As Single, B_HiLiteIncr As Single,    Dim R_HiLiteCur As Single, G_HiLiteCur As Single, B_HiLiteCur As Single    Dim R_ShadowIncr As Single, G_ShadowIncr As Single, B_ShadowIncr As Single,    Dim R_ShadowCur As Single, G_ShadowCur As Single, B_ShadowCur As Single    Dim sTemp As String, i As Integer, WD  As Long, HT As Long, DC As Long    Dim pos As Integer, LP As POINTAPI, LongVal As Long    Dim oldScaleMode As Integer, oldForeColor As Long         ' switch to pixel scalemode    oldForeColor = FormIn.ForeColor    oldScaleMode = FormIn.ScaleMode    FormIn.ScaleMode = vbPixels        'Set the form width, height & DC    With FormIn       WD = .ScaleWidth - 1       HT = .ScaleHeight - 1       DC = .hDC    End With        'convert the hilite color from long to RGB    R_HiLite = (HiLiteCol And &HFF&)    G_HiLite = (HiLiteCol And &HFF00&) / &H100&    B_HiLite = (HiLiteCol And &HFF0000) / &H10000        'convert the shadow color from long to RGB    R_Shadow = (ShadowCol And &HFF&)    G_Shadow = (ShadowCol And &HFF00&) / &H100&    B_Shadow = (ShadowCol And &HFF0000) / &H10000        'convert the inner color from long to RGB    InnerCol = FormIn.BackColor    R_Inner = (InnerCol And &HFF&)    G_Inner = (InnerCol And &HFF00&) / &H100&    B_Inner = (InnerCol And &HFF0000) / &H10000            'set the increments    R_HiLiteIncr = (R_HiLite - R_Inner) / Steps    G_HiLiteIncr = (G_HiLite - G_Inner) / Steps    B_HiLiteIncr = (B_HiLite - B_Inner) / Steps    R_ShadowIncr = (R_Shadow - R_Inner) / Steps    G_ShadowIncr = (G_Shadow - G_Inner) / Steps    B_ShadowIncr = (B_Shadow - B_Inner) / Steps        'initialize the current colors    R_HiLiteCur = R_HiLite    G_HiLiteCur = G_HiLite    B_HiLiteCur = B_HiLite    R_ShadowCur = R_Shadow    G_ShadowCur = G_Shadow    B_ShadowCur = B_Shadow        With FormIn        For i = 0 To Steps - 1            'draw clockwise from bottom / left                        'Use hilite color            'Round the RGB vals  to integers and convert to a long color value            LongVal = (Int(B_HiLiteCur) * 65536) + (Int(G_HiLiteCur) * 256) + _                Int(R_HiLiteCur)                        'set the drawing color            .ForeColor = LongVal                        'Draw the left and top            MoveToEx DC, i, HT - i, LP        'left            LineTo DC, i, i            MoveToEx DC, i, i, LP             'top            LineTo DC, WD - i, i                        'Use shadow color            'Round the RGB vals  to integers and convert to a long color value            LongVal = (Int(B_ShadowCur) * 65536) + (Int(G_ShadowCur) * 256) + _                Int(R_ShadowCur)                        'set the drawing color            .ForeColor = LongVal                        'Draw the right and bottom            MoveToEx DC, WD - i, i, LP       'right            LineTo DC, WD - i, HT - i            MoveToEx DC, WD - i, HT - i, LP  'bottom            LineTo DC, i, HT - i                        'increment the colors            R_HiLiteCur = R_HiLiteCur - R_HiLiteIncr            G_HiLiteCur = G_HiLiteCur - G_HiLiteIncr            B_HiLiteCur = B_HiLiteCur - B_HiLiteIncr            R_ShadowCur = R_ShadowCur - R_ShadowIncr            G_ShadowCur = G_ShadowCur - G_ShadowIncr            B_ShadowCur = B_ShadowCur - B_ShadowIncr        Next           .Refresh    End With    ' restore original values    FormIn.ForeColor = oldForeColor    FormIn.ScaleMode = oldScaleModeEnd Sub

Share the Post:
Share on facebook
Share on twitter
Share on linkedin


The Latest

homes in the real estate industry

Exploring the Latest Tech Trends Impacting the Real Estate Industry

The real estate industry is changing thanks to the newest technological advancements. These new developments — from blockchain and AI to virtual reality and 3D printing — are poised to change how we buy and sell homes. Real estate brokers, buyers, sellers, wholesale real estate professionals, fix and flippers, and beyond may

man on floor with data

DevX Quick Guide to Data Ingestion

One of the biggest trends of the 21st century is the massive surge in internet usage. With major innovations such as smart technology, social media, and online shopping sites, the internet has become an essential part of everyday life for a large portion of the population. Due to this internet

payment via phone

7 Ways Technology Has Changed Traditional Payments

In today’s digital world, technology has changed how we make payments. From contactless cards to mobile wallets, it’s now easier to pay for goods and services without carrying cash or using a checkbook. This article will look at seven of the most significant ways technology has transformed traditional payment methods.