Hello I've Took A Progress Bar From An Open Source Project, & I'm Trying To Change The Background For The Custom Control For My Personal Use, Currently The Color Is The Normal SystemControl Color For The Progress Bar, Any Help?
Code:
Imports System.ComponentModel
Imports System.Drawing.Drawing2D
Imports System.Windows.Forms.VisualStyles
Namespace UI
Public NotInheritable Class QualityProgressBar
Inherits Control
Public Sub New()
MyBase.New()
Me.DoubleBuffered = True
End Sub
Private m_nMinimum As Integer = 0
Function ColorToGrayscale(ByVal clr As Color) As Color
Dim l As Integer = CInt(((0.3F * clr.R) + (0.59F * clr.G) + (0.11F * clr.B)))
If l >= 256 Then l = 255
Return Color.FromArgb(l, l, l)
End Function
Function ColorMiddle(ByVal clrA As Color, ByVal clrB As Color) As Color
Return Color.FromArgb((CInt(clrA.A) + CInt(clrB.A)) / 2, (CInt(clrA.R) + CInt(clrB.R)) / 2, (CInt(clrA.G) + CInt(clrB.G)) / 2, (CInt(clrA.B) + CInt(clrB.B)) / 2)
End Function
<DefaultValue(0)>
Public Property Minimum As Integer
Get
Return m_nMinimum
End Get
Set(ByVal value As Integer)
m_nMinimum = value
Me.Invalidate()
End Set
End Property
Private m_nMaximum As Integer = 100
<DefaultValue(100)>
Public Property Maximum As Integer
Get
Return m_nMaximum
End Get
Set(ByVal value As Integer)
m_nMaximum = value
Me.Invalidate()
End Set
End Property
Private m_nPosition As Integer = 0
<DefaultValue(0)>
Public Property Value As Integer
Get
Return m_nPosition
End Get
Set(ByVal value As Integer)
m_nPosition = value
Me.Invalidate()
End Set
End Property
Private m_pbsStyle As ProgressBarStyle = ProgressBarStyle.Continuous
<Browsable(False)>
<DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)>
Public Property Style As ProgressBarStyle
Get
Return m_pbsStyle
End Get
Set(ByVal value As ProgressBarStyle)
m_pbsStyle = value
Me.Invalidate()
End Set
End Property
Public Function ShouldSerializeStyle() As Boolean
Return False
End Function
Private m_strText As String = String.Empty
<DefaultValue("")>
Public Property ProgressText As String
Get
Return m_strText
End Get
Set(ByVal value As String)
m_strText = value
Me.Invalidate()
End Set
End Property
Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
Try
PaintPriv(e)
Catch __unusedException1__ As Exception
Debug.Assert(False)
End Try
End Sub
Private Sub PaintPriv(ByVal e As PaintEventArgs)
Dim g As Graphics = e.Graphics
If g Is Nothing Then
MyBase.OnPaint(e)
Return
End If
Dim nNormPos As Integer = m_nPosition - m_nMinimum
Dim nNormMax As Integer = m_nMaximum - m_nMinimum
If nNormMax <= 0 Then
Debug.Assert(False)
nNormMax = 100
End If
If nNormPos < 0 Then
Debug.Assert(False)
nNormPos = 0
End If
If nNormPos > nNormMax Then
Debug.Assert(False)
nNormPos = nNormMax
End If
Dim rectClient As Rectangle = Me.ClientRectangle
Dim rectDraw As Rectangle
Dim vse As VisualStyleElement = VisualStyleElement.ProgressBar.Bar.Normal
If VisualStyleRenderer.IsSupported AndAlso VisualStyleRenderer.IsElementDefined(vse) Then
Dim vsr As VisualStyleRenderer = New VisualStyleRenderer(vse)
If vsr.IsBackgroundPartiallyTransparent() Then vsr.DrawParentBackground(g, rectClient, Me)
vsr.DrawBackground(g, rectClient)
rectDraw = vsr.GetBackgroundContentRectangle(g, rectClient)
Else
g.FillRectangle(Brushes.White, rectClient)
Dim penGray As Pen = Pens.DarkGray
Dim penWhite As Pen = Pens.LightGray
g.DrawLine(penGray, 0, 0, rectClient.Width - 1, 0)
g.DrawLine(penGray, 0, 0, 0, rectClient.Height - 1)
g.DrawLine(penWhite, rectClient.Width - 1, 0, rectClient.Width - 1, rectClient.Height - 1)
g.DrawLine(penWhite, 0, rectClient.Height - 1, rectClient.Width - 1, rectClient.Height - 1)
rectDraw = New Rectangle(rectClient.X + 1, rectClient.Y + 1, rectClient.Width - 2, rectClient.Height - 2)
End If
Dim nDrawWidth As Integer = CInt((CSng(rectDraw.Width) * CSng(nNormPos) / CSng(nNormMax)))
Dim clrStart As Color = Color.FromArgb(255, 128, 0)
Dim clrEnd As Color = Color.FromArgb(0, 255, 0)
Dim clrMid As Color = Color.FromArgb(255, 255, 0)
If Not Me.Enabled Then
clrStart = ColorToGrayscale(Color.White)
clrEnd = ColorToGrayscale(Color.White)
clrMid = ColorMiddle(clrStart, clrEnd)
End If
Dim bRtl As Boolean = (Me.RightToLeft = RightToLeft.Yes)
If bRtl Then
Dim clrTemp As Color = clrStart
clrStart = clrEnd
clrEnd = clrTemp
End If
Dim rectGrad As Rectangle = New Rectangle(rectDraw.X, rectDraw.Y, rectDraw.Width, rectDraw.Height)
Using brush As LinearGradientBrush = New LinearGradientBrush(rectGrad, clrStart, clrEnd, LinearGradientMode.Horizontal)
Dim cb As ColorBlend = New ColorBlend()
cb.Colors = New Color(2) {clrStart, clrMid, clrEnd}
cb.Positions = New Single(2) {0.0F, 0.5F, 1.0F}
brush.InterpolationColors = cb
g.FillRectangle(brush, (If(bRtl, (rectDraw.Width - nDrawWidth + 1), rectDraw.Left)), rectDraw.Top, nDrawWidth, rectDraw.Height)
End Using
PaintText(g, rectDraw, bRtl)
End Sub
Private Sub PaintText(ByVal g As Graphics, ByVal rectDraw As Rectangle, ByVal bRtl As Boolean)
If String.IsNullOrEmpty(m_strText) Then Return
Dim f As Font = Me.Font
Dim clrFG As Color = ColorToGrayscale(Me.ForeColor)
Dim clrBG As Color = Color.FromArgb(clrFG.ToArgb() Xor &H20FFFFFF)
Dim dx As Integer = rectDraw.X
Dim dy As Integer = rectDraw.Y
Dim dw As Integer = rectDraw.Width
Dim dh As Integer = rectDraw.Height
Using br As SolidBrush = New SolidBrush(clrFG)
Dim sff As StringFormatFlags = (StringFormatFlags.FitBlackBox Or StringFormatFlags.NoClip)
If bRtl Then sff = sff Or StringFormatFlags.DirectionRightToLeft
Using sf As StringFormat = New StringFormat(sff)
sf.Alignment = StringAlignment.Center
sf.LineAlignment = StringAlignment.Center
Dim rf As RectangleF = New RectangleF(dx, dy, dw, dh)
g.DrawString(m_strText, f, br, rf, sf)
End Using
End Using
End Sub
End Class
End Namespace