|
![]() |
![]() ![]() |
![]() |
|
![]() |
![]() |
![]() |
![]() |
![]() |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||
Visual Basic
Window/Form Routines GradientFill: Triangular Gradient Form Backgrounds |
||
Posted: | Monday February 17, 2003 | |
Updated: | Monday December 26, 2011 | |
Applies to: | VB4-32, VB5, VB6 | |
Developed with: | VB6, Windows XP | |
OS restrictions: | Windows 98 or later, Windows 2000 or later | |
Author: | VBnet - Randy Birch | |
Related: |
FillRect: Gradient Form Backgrounds GradientFill: Gradient Form Backgrounds GradientFill: Triangular Gradient Form Backgrounds Pure VB: Tile an Image as a Form Background |
|
Prerequisites |
None. |
|
![]() As coded, the demo creates the form coloured as shown. The Red, Green, Blue and Alpha members of the TRIVERTEX structure are defined in the C header files as USHORT, or in VB parlance, Integers. Concerning the TRIVERTEX structure, the MSDN states:
For the GRADIENT_TRIANGLE structure, the MSDN text is:
While this demos the code against a form background which may have its place in something like a custom splash screen, a better use for this code would be to fill a picture box being used as a colour-picking tool. |
BAS Module Code |
None. |
|
Form Code |
![]() |
Add the following code to a form: |
|
Option Explicit '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Copyright ©1996-2011 VBnet/Randy Birch, All Rights Reserved. ' Some pages may also contain other copyrights by the author. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Distribution: You can freely use this code in your own ' applications, but you may not reproduce ' or publish this code on any web site, ' online service, or distribute as source ' on any media without express permission. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Private Const GRADIENT_FILL_TRIANGLE = &H2 Private Type TRIVERTEX X As Long Y As Long Red As Integer Green As Integer Blue As Integer Alpha As Integer End Type Private Type GRADIENT_TRIANGLE Vertex1 As Long Vertex2 As Long Vertex3 As Long End Type Private Declare Function GradientFill Lib "msimg32" _ (ByVal hdc As Long, _ pVertex As Any, _ ByVal dwNumVertex As Long, _ pMesh As Any, _ ByVal dwNumMesh As Long, _ ByVal dwMode As Long) As Long Private Sub Form_Load() Me.AutoRedraw = True End Sub Private Sub Form_Resize() Call DrawGradientFillTriangle(vbBlue, vbYellow, vbRed, vbBlack) End Sub Private Sub DrawGradientFillTriangle(dwColour1 As Long, _ dwColour2 As Long, _ dwColour3 As Long, _ dwColour4 As Long) Dim grTri(0 To 1) As GRADIENT_TRIANGLE Dim vert(0 To 3) As TRIVERTEX 'Colour at upper-left corner With vert(0) .X = 0 .Y = 0 .Red = LongToSignedShort(CLng((dwColour1 And &HFF&) * 256)) .Green = LongToSignedShort(CLng(((dwColour1 And &HFF00&) \ &H100&) * 256)) .Blue = LongToSignedShort(CLng(((dwColour1 And &HFF0000) \ &H10000) * 256)) .Alpha = 0 End With 'Colour at upper-right corner With vert(1) .X = Me.ScaleWidth \ Screen.TwipsPerPixelX .Y = 0 .Red = LongToSignedShort(CLng((dwColour2 And &HFF&) * 256)) .Green = LongToSignedShort(CLng(((dwColour2 And &HFF00&) \ &H100&) * 256)) .Blue = LongToSignedShort(CLng(((dwColour2 And &HFF0000) \ &H10000) * 256)) .Alpha = 0 End With 'Colour at lower-right corner With vert(2) .X = Me.ScaleWidth \ Screen.TwipsPerPixelX .Y = Me.ScaleHeight \ Screen.TwipsPerPixelY .Red = LongToSignedShort(CLng((dwColour3 And &HFF&) * 256)) .Green = LongToSignedShort(CLng(((dwColour3 And &HFF00&) \ &H100&) * 256)) .Blue = LongToSignedShort(CLng(((dwColour3 And &HFF0000) \ &H10000) * 256)) .Alpha = 0 End With 'Colour at lower-left corner With vert(3) .X = 0 .Y = Me.ScaleHeight \ Screen.TwipsPerPixelX .Red = LongToSignedShort(CLng((dwColour4 And &HFF&) * 256)) .Green = LongToSignedShort(CLng(((dwColour4 And &HFF00&) \ &H100&) * 256)) .Blue = LongToSignedShort(CLng(((dwColour4 And &HFF0000) \ &H10000) * 256)) .Alpha = 0 End With With grTri(0) .Vertex1 = 0 .Vertex2 = 1 .Vertex3 = 2 End With With grTri(1) .Vertex1 = 0 .Vertex2 = 2 .Vertex3 = 3 End With Me.Cls 'parameters: 'hdc - display context handle of the target window 'vert(0) - first member of interest in the vert() array '4 - number of vert() array members (not ubound(vert)) 'grTri(0) - first member of interest in the grTri() array '2 - number of grTri() array members (not ubound(grTri) 'GRADIENT_FILL_TRIANGLE - fill operation Call GradientFill(Me.hdc, vert(0), 4, grTri(0), 2, GRADIENT_FILL_TRIANGLE) End Sub Private Function LongToSignedShort(dwUnsigned As Long) As Integer 'convert from long to signed short If dwUnsigned < 32768 Then LongToSignedShort = CInt(dwUnsigned) Else LongToSignedShort = CInt(dwUnsigned - &H10000) End If End Function |
Comments |
|
|
|
|||||
|
|||||
|
|||||
Copyright ©1996-2011 VBnet and Randy Birch. All Rights Reserved. |
![]() |