Login | Register   
RSS Feed
Download our iPhone app
Browse DevX
Sign up for e-mail newsletters from DevX

By submitting your information, you agree that devx.com may send you DevX offers via email, phone and text message, as well as email offers about other products and services that DevX believes may be of interest to you. DevX will process your information in accordance with the Quinstreet Privacy Policy.

Tip of the Day
Language: VB7
Expertise: Intermediate
Jun 8, 2002



Building the Right Environment to Support AI, Machine Learning and Deep Learning

Creating owner drawn menu items to simulate a color picker

' This class does the owner drawing of a MenuItem to draw a color box.
' The class inherits from MenuItem, thus the ColorMenuItem objects
' can be added to a parent MenuItem or a context menu as you 
' normally do, and can also be mixed with other MenuItem items 
' under the same parent item.

Imports System.Drawing
Imports System.Windows.Forms

Public Class ColorMenuItem : Inherits MenuItem

    Public m_Color As Color

    Sub New(ByVal color As Color)
        ' create the base menu

        ' save the color, and specify that the item will be owner drawn
        Me.OwnerDraw = True
        m_Color = color
    End Sub

    Sub New(ByVal color As Color, ByVal eventHandler As EventHandler)
        ' create the base menu
        MyBase.New("", eventHandler)

        ' save the color, and specify that the item will be owner drawn
        Me.OwnerDraw = True
        m_Color = color
    End Sub

    Public Property Color() As Color
            Return m_Color
        End Get
        Set(ByVal Value As Color)
            m_Color = Value
        End Set
    End Property

    Protected Overrides Sub OnMeasureItem(ByVal e As MeasureItemEventArgs)

        e.ItemHeight = SystemInformation.MenuHeight - 4
        e.ItemWidth = 40
    End Sub

    Protected Overrides Sub OnDrawItem(ByVal e As DrawItemEventArgs)

        ' draw the background, using the normal/selected color
        ' according to the menu item state
        Dim brBack As Brush
        If (e.State And DrawItemState.Selected) = DrawItemState.Selected Then
            brBack = SystemBrushes.Highlight
            brBack = SystemBrushes.Menu
        End If
        e.Graphics.FillRectangle(brBack, e.Bounds)

        ' draw the color box
        Dim brColorBox As Brush = New SolidBrush(m_Color)
        Dim rect As New RectangleF(e.Bounds.X, e.Bounds.Y, e.Bounds.Width, _
        ' draw the box's black border
        rect.Inflate(-5, -3)
        e.Graphics.FillRectangle(brColorBox, rect)
        e.Graphics.DrawRectangle(New Pen(Color.Black), New Rectangle(rect.X, _
            rect.Y, rect.Width, rect.Height))
    End Sub

End Class

' SAMPLE USAGE: create a color picker

' In this example we create a menu bar for the form, with a top level 
' menu called "Colors", and add to this item some ColorMenuItem items 
' to simulate a color picker menu. We also handle the click on the
' color items, and change the form's background color accordingly.
' You may change the code to add the color items to a context menu, 
' associated to a toolbar button or any other control.

Private Sub Form1_Load(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles MyBase.Load
    ' create a new menu bar and add it to the form
    Me.Menu = New MainMenu()
    ' create and add the Colors top menu item
    Dim mnuColors As MenuItem = New MenuItem("Colors")
    ' add some color menu items 
    mnuColors.MenuItems.Add(New ColorMenuItem(Color.Green, _
        New EventHandler(AddressOf mnuColor_Click)))
    mnuColors.MenuItems.Add(New ColorMenuItem(Color.Navy, _
        New EventHandler(AddressOf mnuColor_Click)))
    mnuColors.MenuItems.Add(New ColorMenuItem(Color.Purple, _
        New EventHandler(AddressOf mnuColor_Click)))
    mnuColors.MenuItems.Add(New ColorMenuItem(Color.Red, _
        New EventHandler(AddressOf mnuColor_Click)))
    mnuColors.MenuItems.Add(New ColorMenuItem(Color.Lime, _
        New EventHandler(AddressOf mnuColor_Click)))
    mnuColors.MenuItems.Add(New ColorMenuItem(Color.Yellow, _
        New EventHandler(AddressOf mnuColor_Click)))
    ' create a normal menu item
    mnuColors.MenuItems.Add(New MenuItem("Other color...", _
        New EventHandler(AddressOf mnuColor_Click)))
End Sub

Private Sub mnuColor_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs)
    Dim bgColor As Color

    ' if the clicked item is a ColorMenuItem, extract its color
    If TypeOf sender Is ColorMenuItem Then
        bgColor = CType(sender, ColorMenuItem).Color
        ' otherwise open a Windows's Color dialog box
        ' ...add your code here...
    End If

    ' set the form's background color to the selected text
    Me.BackColor = bgColor
End Sub

Marco Bellinaso
Comment and Contribute






(Maximum characters: 1200). You have 1200 characters left.



Thanks for your registration, follow us on our social networks to keep up-to-date