# How
to create menus and options?
# How
to use graphic methods such as Circle and Line?
# How
to use properties related to drawing?
# Properties
of an option
# How
to check and uncheck options?
# How
to create and use submenu?
# How
to work with radio menu items?
# How
to use Popup Menus?
What is a Menu?
A menu is a collection of options. Whenever
user clicks on a menu, all its options are displayed so that user can select an
option. Each option in the menu initiates an action.
In Visual Basic, each Form can contain a
menu. Once a menu is attached to a form it cannot be attached to any other
Form.
In Visual Basic, a menu is designed using Menu Editor.
Code for the options of the menu is written
using Code Window. For each option, code is written for click event. In other words, whenever user selects an option Click event occurs and the code written
for Click event procedure will be
executed.
Note: Click is the only event
available for options in menu.
Sample Application
Now let us develop an application to
understand various types of options available in VB. This sample application
covers plain options, separators, submenus, check options and options that are
mutually exclusive (radio menu options).
The following table (table 7.1) explains
what each option in the menu system is supposed to do.
Draw
|
Style |
Circle F2
|
Size… Ctrl + S
|
Rectangle F3
|
Draw Style
|
Line F4
|
Sold
|
|
Dot
|
Exit
|
Dash
|
|
Fill Ctrl + F
|
Option
|
What it does?
|
Circle
|
Draws a
circle with a radius of 200 units (by default) and with center point at a
random location. Shortcut key is F2.
|
Rectangle
|
Draws a
rectangle with random points. Shortcut key is F3.
|
Line
|
Draws a line
with random points. Shortcut key is F4.
|
Exit
|
Exits
program.
|
Size
|
Prompts the
user to enter size to be used to draw line and changes the DrawWidth of the form. Shortcut key
is CTRL + S.
|
Draw Style
|
This is a
submenu. It contains three options, Solid, Dot, and Dash. Only one of the three options can be selected at a time.
Drawing takes place in the selected style. By default Solid is selected.
|
Fill
|
It is a check
option. If it is checked then circles and rectangles that are drawn subsequently
will be filled otherwise they are not filled. Default is unchecked. If it is
checked then Draw Style option is
to be disabled. Shortcut key is CTRL + F.
|
Table 7.1: Description
of options in sample application.
Shortcut Key
A shortcut key is a key sequence that can
be used from anywhere in the application to select an option. For example, if shortcut key of a menu item
is F2, then from anywhere in the application you can press F2 to select the
menu item. This is much easier way of selecting a menu item. Because,
otherwise, we have to select the menu in which the option is and then select
the menu item. Shortcut keys make selection faster. That is the reason they are
generally assigned commonly used options.
Creating Sample Application and Menu
Now, let us understand how to create menu
system step-by-step.
1.
Select File->New Project. Choose
Standard Exe project type.
2.
When Form is displayed,
choose Tools -> Menu Editor
This will invoke menu editor
3.
Enter &Draw in Caption field and press Tab key to move
to Name field.
4.
Enter mnudraw as the name of the menu
5.
Click on Next button at the bottom.
At this
stage highlighted bar moves to next item at the bottom of the Menu Editor and
focus is shifted to Caption field.
6.
Enter &Circle as Caption and
press tab key.
7.
Enter mnucircle as the Name of
the option.
8.
Use Shortcut drop-down Listbox and select F2 as the shortcut key.
At this stage, both Draw and Circle
are at the same indent level. But as Circle is an option in Draw menu, Circle
option should be pushed towards right using right arrow key in Menu Editor.
For the remaining enter the following.
Caption
|
Name
|
Shortcut key |
&Rectangle
|
Mnurectangle
|
F3
|
&Line
|
Mnuline
|
F4
|
-
|
Mnusep1
|
|
&Exit
|
Mnuexit
|
|
9.
Enter Style as the caption for second menu.
As we have been working with
options, we are at first indent level (option level). But Style is a menu and
it should be at left most.
10.
Select Style menu and click on left arrow to move left.
11.
Click on Next button
12.
Enter &Size as the caption of first option in the second menu. And
select Shortcut key CTRL+ S.
13.
And enter the following
options:
Caption
|
Name
|
Shortcut Key |
&Size…
|
Mnusize
|
Ctrl + S
|
&Draw Style
|
Mnuds
|
|
&Solid
|
Mnusolid
|
|
&Dot
|
Mnudot
|
|
&Dash
|
Mnudash
|
|
&Fill
|
Mnufill
|
Ctrl + F
|
Increase indent level of Solid, Dot, and
Dash options so that they make up a sub menu for Draw Style option.
At the end of the entire menu your Menu
Editor
Writing Code for options
We have just created required menus and
options. Now, let us write code for CLICK
event of options in Draw menu.
1.
At design time click on the
Draw menu
2.
When Visual Basic displays
options in Draw menu, select Circle option.
3.
Visual Basic takes you into
Code Window and displays event procedure for CLICK event.
4.
Enter the code
Private
Sub mnucircle_Click()
Dim x,
y
' draw
a circle at a random location
x =
Rnd * Me.ScaleWidth
y =
Rnd * Me.ScaleHeight
Circle
(x, y), 200 'radius is 200
End Sub
Listing
7.1: Code for Circle option of Draw menu.
Before we proceed let us spend some time
with new command used in the above listing.
RND function
Returns a random number in the range 0 to
1.
Circle Method
Draws a circle by taking coordinates of the
starting point and the radius. Circle method can also be used to draw arc,
ellipse etc.
Circle [Step] (x,
y), radius, [color, start, end, aspect]
The following table explains each options
of circle method.
Step
|
Specifies the x, y coordinates are relative
to the current position.
|
X,
Y
|
X and Y
coordinates of the center point.
|
Radius
|
Radius of the
circle
|
Color
|
Color to be
used to draw circle.
|
Start,
End
|
Specifies
starting and ending angles in radius when drawing Arc or Ellipse.
|
Aspect
|
Specifies the
aspect ratio. The default is 1.0
|
5.
In the same manner write code
for Rectangle and Line options as show in listing 7.2.
Private
Sub mnurectangle_Click()
Dim
sx, sy, ex, ey
'draw
a rectangle connecting two random points
sx =
Rnd * Me.ScaleWidth
ex =
Rnd * Me.ScaleWidth
sy =
Rnd * Me.ScaleHeight
ey =
Rnd * Me.ScaleHeight
Line
(sx, sy)-(ex, ey), , B
End Sub
Private
Sub mnuline_Click()
Dim
sx, sy, ex, ey
' draw
a line connecting two random points
sx =
Rnd * Me.ScaleWidth
ex =
Rnd * Me.ScaleWidth
sy =
Rnd * Me.ScaleHeight
ey =
Rnd * Me.ScaleHeight
Line
(sx, sy)-(ex, ey)
End Sub
Listing
7.2: Code for Rectangle and Line options.
Line Method
Draw a line or a rectangle connecting given
two points.
Line [Step] (x1, y1)
[Step] - (x2, y2), [color], [B][F]
The following table explains each of the
available options.
Object
|
Any object that supports LINE method.
|
X1,y1
|
Coordinates
of the first point.
|
X2, Y2
|
Coordinates
of the second point.
|
Color
|
Color to be
used to draw Line or Rectangle.
|
B
|
Causes a Box
to be drawn.
|
F
|
Fills the
box. It cannot be used without using B.
|
Writing code for Size option
Size option has to take a number from the
user and change Drawwidth property
of the Form so that the new width effects drawings that will take place
subsequently. The following is the code for Size option.
Private
Sub mnusize_Click()
Dim ssize As String
ssize = InputBox("Enter line size", "LineSize", 2)
'
user has not clicked on Cancel button
If
ssize <> "" Then
Me.DrawWidth = Val(ssize)
End
If
End Sub
Listing 7.3: Code for
Size option.
InputBox Function
It is used to accept a value from
user. It contains two command buttons, Ok and Cancel, The prompt and a textbox where you enter the value. it is one of the predefined dialog boxes in Visual Basic. We have already used, other predefined dialog
box called Message Box.
The following is the syntax of InputBox function.
InputBox (prompt[,title]
[,default] [,xpos] [,ypos] [,helpfile, context])
The following is the list of options and
their meaning.
Prompt
|
The message to be displayed in Inputbox. This
could be up to 1024 characters.
|
Title
|
The title to
be displayed in the title bar of Inputbox.
|
Default
|
The value to
be taken when user doesn’t enter any value.
|
Xpos
|
X coordinate
from where the Inputbox is to be displayed.
|
Ypos
|
Y coordinate
from where the Inputbox is to be displayed.
|
Helpfile, Context
|
Identify the
help file and context id in help file. It these two are given then user can
press F1 to display help.
|
InputBox function returns the value entered by the user. If user clicks on Cancel button, Inputbox return
zero-length string (“”).
DrawWidth property
Specifies the width of the line for output
by graphics methods such as Line, Circle,
etc. The value assigned to this property may be in the range 1 to 32767. And
the value is specified in Pixels.
Note: If the value of DrawWidth
is more than 1 then DrawStyle
property settings 1 to 4 produce a solid line.
Writing code for Fill option
When Fill option is checked, the objects
will be filled with solid color. If it is unchecked , the objects are drawn but
not filled with solid color. This option is an example of check option. It is
either checked, in which case a check mark appears on the left, or unchecked,
in which case no check mark is displayed.
In our program, when this option is checked
then rectangles and circles will be filled. See listing 7.4, for the code of
Fill option.
Private Sub mnufill_Click()
If
mnufill.Checked Then
mnufill.Checked = False
Me.FillStyle = vbFSTransparent
'
enable mnulinstyle option
mnudrawstyle.Enabled = True
Else
mnufill.Checked = True
Me.FillStyle = vbFSSolid
'
disable mnulinstyle option
mnudrawstyle.Enabled = False
End If
End Sub
Listing 7.4: Code for
Fill option.
If option is currently checked then the code does the following:
¨
Sets Checked property to false to uncheck the option
¨
Turns off filling by setting FillStyle property to 1 (Transparent).
¨
Enable Draw Style sub menu.
If
option is currently unchecked then the code does the following:
¨
Sets Checked property to true to check the option
¨
Sets FillStyle property to 0 (Solid) so that future drawings will be
filled
¨
Disables Draw Style sub menu
because change to DrawStyle is not
visible when drawings are filled.
FillStyle property
Returns or sets the pattern used to fill Shape controls as well as circles and
boxes created with the Circle and Line methods.
The following are the available settings.
Constant
|
Setting
|
What it uses to fill? |
VbFSSolid
|
0
|
Solid
|
VbFSTransparent
|
1 (Default)
|
Transparent
|
VbHorizontalLine
|
2
|
Horizontal Line
|
VbVerticalLine
|
3
|
Vertical Line
|
VbUpwardDiagonal
|
4
|
Upward
Diagonal
|
VbDownwardDiagonal
|
5
|
Downward
Diagonal
|
VbCross
|
6
|
Cross
|
VbDiagonalCross
|
7
|
Diagonal
Cross
|
Note: Use FillColor property
to change the color used for filling.
Writing code for Draw Style submenu
This submenu contains three options. Out of
these three options only one option can be selected ( checked) at a time. So when an option is
selected, the remaining two options are to be unchecked. Each option changes DrawStyle property of the form to the required setting. For
instance, when DOT option is selected DrawStyle
property is set to vbDot
Here is the code for all three options in
this submenu.
Private
Sub mnusolid_Click()
‘
Check SOLID option and uncheck other options
mnusolid.Checked = True
mnudot.Checked = False
mnudash.Checked = False
Me.DrawStyle
= vbSolid
End Sub
Private
Sub mnudot_Click()
‘
Check DOT option and uncheck other options
mnusolid.Checked = False
mnudot.Checked = True
mnudash.Checked = False
Me.DrawStyle = vbDot
End Sub
Private
Sub mnudash_Click()
‘ Check DASH option and uncheck other options
mnusolid.Checked = False
mnudot.Checked = False
mnudash.Checked = True
Me.DrawStyle = vbDash
End Sub
Listing
7.5: Code for options in Draw Style sub menu.
Test Run
To test the options, run the program and
take the following steps.
1.
Run program using F5
You
should see an empty Form
2.
Select Draw-> Circle to draw a circle.
You should see a small circle at right-bottom of the form.
3.
Turn on Fill option by selecting Style->Fill
4. Select Draw->Circle
again. You will see a filled circle on the form.
5.
If you select Style menu again, you should see a
check mark on the left of Fill option, and also note that Draw Style option is
disable.
6. Turn off Filling by selecting Style->Fill.
7.
Select Style->Draw Style->Dot to change the drawing style. If you
select Style->Draw Style again,
you will find only Dot checked and the rest unchecked.
8.
At this stage your form
contains a few graphic objects. Now move some other window on to your form and
remove the window. This action will erase all the graphic objects you have
drawn.
Note: To retain the graphics that you are drawing even after an overlap,
set AutoRedraw property of the form
to true. Please see on-line help for more details.
Properties of a Menu Item
The following are the properties of menu
items.
Property
|
Meaning |
Caption
|
Contains the
text to be displayed.
|
Name
|
The name
using which the menu item is identified.
|
Checked
|
If it is set
to true, menu item appears with a check mark
on the left.
|
Enabled
|
If it is set
to false, menu item gets disabled, and it cannot be selected.
|
Visible
|
If it is set
to false, menu item will be invisible.
|
Helpcontextid
|
Contains the
context number of the help topic that is to be displayed when user presses F1
by highlighting the menu item. If it is set to 0 then there is no
context-sensitive help.
|
Index
|
Used to
uniquely identify a menu item in menu array. Please see the section on Menu
Array.
|
Table
7.2: Properties of menu items
Menu Array
Some times you encounter a case where two
or more menu items have more or less the same code. In this case writing code
for each item may be lengthy and redundant. The solution to this problem is
creating a menu array with the options that have more or less the same code.
The
following are the characteristics of a menu array.
¨
All the menu items that are
part of menu array have same name.
¨
All the menu items that are
part of menu must have unique index value. The unique index value is set using Index property.
¨
When user selects any of the
menu items in the menu array only one
event procedure occurs with the name as shown below, and with Index parameter to identify the menu
item that actually caused the event.
menuarrayname_click
(index as integer)
In our sample program, if you observe, you
find menu items Solid, Dash, and Dot are ideal for a menu array. The following is the sequence of steps to be
taken to convert those three menu items to a menu array and also the revised
code.
Steps to create menu array
1.
Invoke menu editor using Tools->Menu Editor. You can invoke Menu Editor only when you are
on Form. If you are in Code window then Menu Editor options will be disabled.
2.
Select menu item Solid and change the Name to mnuds and change Index
property to 0.
3.
Change the name of Dash menu item to mnuds and Index to 1.
4.
Change the name of Dot menu item to mnuds and Index to 2.
5.
Click on Ok button to exit Menu Editor
Writing code for menu array
All menu items in the menu array invoke the
same event procedure. All menu items of the menu array (MNUDS) will invoke the
following event procedure.
Private
Sub mnuds_Click(Index As Integer)
‘write
code here. Index property contains the index value of the
‘menu
item that is selected by the user.
End Sub
Listing 7.6: Code for
menu array
Now let us write code for Click event of mnuds. See listing 7.7 for complete code.
Note: Index property of menu
array event procedure contains the index of the
menu item that has been selected.
Private
Sub mnuds_Click(Index As Integer)
Dim i as integer
'
first uncheck all menu items in the menu array
For i
= 0 To 2
mnuds(i).Checked = False
Next
' set
checked property of menu item that is selected by user
mnuds(Index).Checked = True
'set
DRAWSTYLE property to index because the value of index property
'of
the menu item and the required setting are matching.
'INDEX property value
Required setting of DRAWSTYLE
'--------------------------------------------------------------
' 0 (Solid) 0 - vbsolid
' 1 (Dash) 1 - vbdash
' 2 (Dot) 2 - vbdot
Me.DrawStyle = Index ' change DrawStyle setting
End Sub
Listing
7.7: Code for menu array.
Popup Menu
Popup menu is a menu that pops up on the
form. This menu is not displayed at the top of the form like normal menus,
instead it is displayed when certain event occurs, such as user pressing right
mouse button.
Visual Basic provides PopupMenu method for Form and MDIform objects to invoke a popup
menu. Here is the syntax of the command.
PopupMenu menuname,
flags, x, y, boldcommand
Here is the meaning of each parameter.
Parameter
|
Meaning |
Menuname
|
name of the
pop-up menu to be displayed.
|
Flags
|
value or
constant that specifies the location and behavior of a pop-up menu. Please
see on-line documentation for more information.
|
X
|
Specifies the
x-coordinate where the pop-up menu is displayed. If omitted, the mouse
coordinate is used.
|
Y
|
Specifies the
y-coordinate where the pop-up menu is displayed. If omitted, the mouse
coordinate is used.
|
Boldcommand
|
Specifies the
name of a menu control in the pop-up menu to display its caption in bold
text. If omitted, no controls in the pop-up menu appear in bold.
|
Let us develop a simple form, which
displays a popup menu when user clicks on right button. the popup menu contains
the following options and meaning.
Option
|
Meaning |
Clear
|
Clears the
content of the form.
|
Maximize
|
Maximizes the
form.
|
Move Left
|
Moves the
form towards left by 200 units.
|
Move Right
|
Moves the
form towards right by 200 units.
|
Table
7. 3:
Options in Popup menu.
Creating sample form with popup menu
Following are the steps to create popup
menu.
1.
Create new project using File-> New Project and select Standard Exe as the type of the
project.
2.
Change Caption property of the form to Demonstration of Popup menu.
3.
From Form1, select Tools -> Menu Editor.
4.
Create a single menu with
name, mnupopup, and required options
5.
Write the following code for
menu items.
Private
Sub mnuclear_Click()
'
clear the contents on form
Me.Cls
End Sub
Private
Sub mnumaximize_Click()
'
maximize the form
Me.WindowState = vbMaximized
End Sub
Private
Sub mnumoveleft_Click()
'
move form towards left by 200 units
Me.Left = Me.Left - 200
End Sub
Private
Sub mnumoveright_Click()
'
move form towards right by 200 units
Me.Left = Me.Left + 200
End Sub
Listing
7. 8: Code for options of popup menu.
6.
Invoke the popup menu (frmpopup) using PopupMenu method whenever user click right mouse button using the
following code.
Private
Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As
Single)
'
invoke popup menu when right button is clicked
If
Button = 2 Then
Me.PopupMenu mnupopup, , X, Y
End
If
End Sub
Listing 7.9 : Code to invoke
popup menu
1.
Run the project using F5.
2.
Click the right button of the
mouse. Form displays a popup menu
3.
Selecting Move Left option will
move form towards left by 200 units.
Exercises
1.
What is the name of the
parameter in event procedure of menu array that identifies the menu item at
which the event occurred?
2.
Which property of the menu item
is used to disable menu item?
3.
Which is the caption of a
separator?
4.
Which property is used to
increase the width of the line drawn using Line
method?
5.
What is the return value of Rnd function?
6.
How do you make all the options
of a menu unavailable?
7.
What does AutoRedraw property in a form do?
8.
Convert options Circle,
Rectangle, and Line to a menu array and rewrite the code.
9.
Make options Draw Style
invisible when option Fill is checked and make it visible when Fill is
unchecked.
10.
What is the use of shortcut
key?
No comments:
Post a Comment