ColorPicker Control For Windows Applications


Introduction

What is the use of MBColorPicker? It provides a graphical interface to select a color from a set of various colors. It is simple to use, just drop it onto a form, adjust the design time properties and use it like normal controls.

Background

MBColorPicker is a color picker control that provides various functionalities so the user can select the required color from a set of colors. The language used is VB.NET.

Control properties

Here is the list of properties available in MBColorPicker:

  • PickedColor: This property gets and sets the color picked by MBColorPicker.
  • Arrow: This property sets the arrow on the MBColorPicker button.
  • BaseColor: This property sets the base color of the MBColorPicker button.
  • BaseStrokeColor: This property sets the base stroke color of the MBColorPicker button.
  • OnColor: This property sets the on color of the MBColorPicker button.
  • OnStrokeColor: This property sets the on stroke color of the MBColorPicker button.
  • PressColor: This property sets the press color of the MBColorPicker button.
  • PressStrokeColor: This property sets the press stroke color of the MBColorPicker button.
  • Radius: This property sets the corner radius of the MBColorPicker button.

Code

The concept for this MBColorPicker came from the Microsoft Office 2007 color picker. I organized my paint event into layers like this:

Protected Overrides Sub OnPaint(ByVal pevent As System.Windows.Forms.PaintEventArgs)  
    Dim g As Graphics = pevent.Graphics  
    g.SmoothingMode = SmoothingMode.HighQuality  
    g.InterpolationMode = InterpolationMode.High  
    Dim r As Rectangle = New Rectangle(New Point(-1, -1), New Size(Me.Width + _radius, Me.Height + _radius))  
    Dim path As GraphicsPath = New GraphicsPath  
    Dim rp As Rectangle = New Rectangle(New Point(0, 0), New Size(Me.Width - 1, Me.Height - 1))  
    DrawArc(rp, path)  
    FillGradients(g, path)  
    DrawImage(g)  
    DrawText(g)  
    DrawArrow(g)  
End Sub  

The following are some methods that provide a transparent look to MBColorPicker. This method draws the background for MBColorPicker.

''' <summary>  
''' Draw the MBColorPicker Control.  
''' </summary>
Protected Overrides Sub OnCreateControl()  
    MyBase.OnCreateControl()  
    A0 = BaseColor.A  
    R0 = BaseColor.R  
    G0 = BaseColor.G  
    B0 = BaseColor.B  
    _colorStroke = _baseStroke  
    Dim r As Rectangle = New Rectangle(New Point(-1, -1), _  
             New Size(Me.Width + _radius, Me.Height + _radius))  
    If Me.Size <> Nothing Then  
        Dim pathregion As GraphicsPath = New GraphicsPath  
        DrawArc(r, pathregion)  
        Me.Region = New Region(pathregion)  
    End If  
End Sub   

This methods draws the color boxes for MBColorPicker:

''' <summary>  
''' Draw Color Boxes For MBColorPicker.  
''' </summary>
''' <param name="graphics">Graphics As Graphics</param>  
Private Sub DrawColorBoxes(ByVal graphics As Graphics)  
    DrawColorBelt(graphics, 0, _TopBoxMargin1, True)  
    For i As Int16 = 1 To _ColorMatrixY - 2  
        DrawColorBelt(graphics, i, (i - 1) * _ColorBoxUnit + _TopBoxMargin2, False)  
        Next  
        For i As Int16 = 0 To _ColorMatrixX - 1  
            graphics.DrawRectangle(New Pen(Color.Gray), i * _  
              (_ColorBoxUnit + _ColorBoxMarginX) + _ColorBoxMarginX, _  
              _TopBoxMargin2, _ColorBoxUnit, _ColorBoxUnit * 5)  
        Next  
        DrawColorBelt(graphics, _ColorMatrixY - 1, _TopBoxMargin3, True)  
End Sub  
  
'''
<summary>  
''' Draw Color Belt For MBColorPicker.  
''' </summary>
''' <param name="graphics">Graphics As Graphics</param>  
''' <param name="no">No As Int16</param>  
''' <param name="yOffSet">yOffSet As Int16</param>  
''' <param name="border">Border As Boolean</param>  
''' <remarks></remarks>  
Private Sub DrawColorBelt(ByVal graphics As Graphics, ByVal no As Int16, _  
            ByVal yOffSet As Int16, ByVal border As Boolean)  
    For i As Int16 = 0 To _ColorMatrixX - 1  
        DrawColorBox(graphics, _ColorMatrix(i, no), _  
           New Point(i * (_ColorBoxUnit + _ColorBoxMarginX) + _ColorBoxMarginX, yOffSet), border)  
    Next  
End Sub    

This method handles the drop down color for MBColorPicker:

Protected Overrides Sub OnMouseUp(ByVal mevent As System.Windows.Forms.MouseEventArgs)  
    R0 = OnColor.R  
    G0 = OnColor.G  
    B0 = OnColor.B  
    _colorStroke = OnStrokeColor  
    _showbase = MB_ShowBase.Yes  
    i_mode = 1  
    mouse = True  
    If _splitlocation = MB_SplitLocation.Right And xmouse > _  
             Me.Width - _splitdistance And _splitbutton = MB_SplitButton.Yes Then  
        If (_arrow = MB_Arrow.ToDown) Then  
            Dim _MBColorPicker As MBColorPickerHelper = New MBColorPickerHelper(Me)  
            _MBColorPicker.Show(Me.Parent, New Point(Me.Location.X, Me.Height + Me.Location.Y))  
        ElseIf (_arrow = MB_Arrow.ToRight) Then  
            Dim _MBColorPicker As MBColorPickerHelper = New MBColorPickerHelper(Me)  
            _MBColorPicker.Show(Me.Parent, New Point(Me.Location.X + Me.Width, _  
                   (Me.Location.Y + Me.Height / 2) - _MBColorPicker.Height / 2))  
        End If  
    Else  
        MyBase.OnMouseUp(mevent)  
        If (_Keeppressed) Then  
            _Ispressed = True  
            For Each _control As Control In Me.Parent.Controls  
                If _control.Name <> Me.Name And TypeOf (_control) Is MBColorPickerButton = True Then  
                    CType(_control, MBColorPickerButton)._Ispressed = False  
                    CType(_control, MBColorPickerButton).UpdateMouseLeave()  
                End If  
            Next  
        End If  
    End If  
End Sub   

Using the code

It is very easy to use the MBColorPicker in your application. Just add the reference of the provided DLL to your application and just drag and drop.

History

  • MBColorPicker version 1.0.

Downloads

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s