Contents
# What are the
Keyboard events?
# Sample
application using Keyboard
# What are Mouse
events?
# Sample
application using Mouse
# How to use Drag
and Drop?
# Sample
application using Drag and Drop
# What is control array
and how to create and use it?
Keyboard and Mouse are two most important
input devices. When user uses these devices, Visual Basic generates a set of
events. In this chapter, we will discuss
about the events that are generated by keyboard and mouse. We will also see how
to use these events and how to choose the right event. Drag and Drop interface has gained a lot of
popularity and acceptance among users. We will discuss about how to implement
drag and drop interface, and properties, methods and events related to drag and
drop.
Keyboard Events
When user presses a key on the keyboard,
Visual Basic generates a few events. These events allow user to know which key
is exactly pressed. Keyboard events occur for the controls that can receive
input (have focus).
The following are the keyboard events
available in Visual Basic:
Event
|
When does it occur? |
KeyDown
|
When user
presses the key on keyboard.
|
KeyUp
|
When user releases the key on keyboard.
|
KeyAscii
|
When user
presses and releases an ANSI key.
|
Table
8.1: Keyboard events
KeyPreview property of Form
If the KeyPreview
property of the form is set to True,
the form receives keyboard events before controls on the form receive the
events. This is useful when you want to have a global keyboard handler for the
form.
The following section will discuss all the
details related to the three keyboard events mentioned in table 8.1.
KeyDown and KeyUp events
Keydown event occurs when user has pressed a key from keyboard. KeyUp event occurs when user releases a
key that he has pressed earlier. That means every KeyDown event is followed by a KeyUp
event.
These events occur for all types of keys
including special keys like F1 and Home
key. The following are parameters for these two events.
Parameter
|
Meaning
|
KeyCode
|
A key code is
the code of the key pressed. Each key
on the keyboard has a code. You can
use constants such as vbKeyF1 (the F1 key) to know which key on the keyboard
is actually pressed by user.
|
Shift
|
An integer
that corresponds to the state of the SHIFT, CTRL, and ALT keys at the time of
the event. Please see the section
“Knowing status of control key” for details on this.
|
Table 8.2: Parameters
of KeyDown
and KeyUp events.
Knowing the status of control keys
It is possible to know which of the three
control keys - SHIFT, CTRL, and ALT – are pressed at the time of pressing a key
using Shift parameter of KeyDown and KeyUp events.
Shift parameter is an integer parameter with first three bits containing
the status of these three control keys. Depending upon which keys are pressed
the corresponding bits will be set. The
bit and the corresponding key will be:
Bit
|
Key
|
Value
|
Constant |
0
|
SHIFT
|
1
|
VbShiftMask
|
1
|
CTRL
|
2
|
VbCtrlMask
|
2
|
ALT
|
4
|
vbALTMask
|
Note: You need not directly deal with bit number. You always use
constants to check for the corresponding key.
To
test whether shift key is pressed, enter:
If (Shift
and vbCtrlMask) <> 0 then
‘
shift key is pressed
End if
To
check whether user has pressed CTRL + F1, enter:
If keycode = vbkeyF1 and ( Shift And vbCtrlMask) <> 0 then
‘
user has pressed Ctrl + f 1
end if
keyDown and KeyUp events will not occur when
user presses:
¨
The Enter key if the form has a CommandButton
control with the Default
property set to True.
¨
The Esc key if the form has a CommandButton
control with the Cancel property
set to True.
¨
The Tab key.
Note: KeyDown and KeyUp events are generally used to trap
extended keys such as function key and arrow keys.
KeyPress Event
Keypress event occurs when user presses and
releases a key. This event occurs only when user presses one of the ANSI keys
such as alphabets, digits etc. This event doesn’t occur when user presses arrow
keys, function keys etc.
KeyAscii parameter
KeyPress event has a single parameter, KeyAscii,
which contains the ASCII code of the key that is pressed.
Note: You can ignore the character by setting KeyAscii parameter to 0.
Sample Application Using Keyboard Events
Now let us develop a small demo application
to understand how to use keyboard events. This application contains a textbox
into which user enters a code. By default, whatever user enters is converted to
upper case and digits are not allowed. However, user can select to convert
subsequently entered characters to any case and also choose to allow digits by
checking Allow Digits checkbox.
Let us take the required steps to create
the project, create user interface, and change properties.
1.
Select File->New Project and select
Standard Exe type
2.
Place the control.
3.
Change the properties as
follows:
Object |
Property
|
Value |
Form1
|
Caption
|
Keyboard
Events Demo
|
Label1
|
Caption
|
Code
|
Text1
|
Text
|
“”
|
Frame1
|
Caption
|
Convert To
|
Option1
|
Name
|
OptUpper
|
|
Caption
|
&Upper
|
Option2
|
Name
|
OptLower
|
|
Caption
|
&Lower
|
Check1
|
Name
|
Chkallowdigits
|
|
Caption
|
&Allow
Digits
|
Command1
|
Name
|
Cmdexit
|
|
Caption
|
&Exit
|
Writing code for KeyPress Event
As we have to convert the entered text to
either of the cases and disallow digits,
if Allow Digits check box is unchecked, the right event for this is KeyPress event. Here is the code for
KeyPress event of Text1.
Private
Sub Text1_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case
48 To 57
' ignore if Allow Digits is unchecked
If chkallowdigits.Value = 0 Then
KeyAscii = 0 ' ignore
End If
Case
65 To 90:
'check whether lower case is selected
If optlower.Value Then
keyascii = KeyAscii + 32 '
convert to lower
End If
Case
97 To 122:
'check whether upper case is selected
If optupper.Value Then
KeyAscii = KeyAscii - 32 ' convert to upper
End If
End
Select
End Sub
Listing 8.1: Code for
KeyPress event.
In the above code, we check whether the key
is a digit, or an upper case letter, or a lower case letter using ASCII code of
the entered key.
The
ASCII codes are as follows:
Letters
A to Z 65
to 90
Letters
a to z 97 to 122
Digits
0 to 9 48
to 57
Space 32
Backspace 9
Next we will understand mouse events.
Mouse Events
Mouse events occur when user presses and
releases mouse buttons. The following
are the events related to mouse.
Event
|
When does it occur? |
Click
|
When user
presses and releases a mouse button.
|
Dblclick
|
When user
presses and releases and again presses and releases a mouse button.
|
MouseDown
|
When user
presses a mouse button.
|
MouseUp
|
When user
releases a mouse button.
|
MouseMove
|
When user moves
mouse pointer.
|
Table
8.3: Mouse events.
Click and Dblclick event do
not have any parameters. It is not possible to know which button is pressed and
the position of mouse pointer at the time of click.
MouseDown, MouseUp and MouseMove events give the following
information:
¨
The position of mouse pointer
on the object at the time of user pressing a mouse button
¨
Which button is pressed - Left,
Right or Middle.
¨
Which of the control keys, such
as SHIFT, CTRL, and ALT, are pressed along with mouse button.
The following are the parameter of MouseDown, MouseUp and MouseMove
events.
Parameter
|
Meaning |
Button
|
Contains a value indicating which button
is pressed. The values are:
1 – left, 2 – Right, 4 – Middle.
|
Shift
|
Contains a value indicating which control
keys are held down at the time of pressing mouse button.
1 –Shift, 2 – Ctrl, 4 – Alt.
|
x, y
|
The
coordinates of the location where mouse pointer was at the time of click.
|
Table
8.4: Parameters of MouseDown, MouseUp and MouseMove
events
Note: The Button argument for MouseDown and MouseUp differs from the button
argument used for MouseMove. For
MouseDown and MouseUp, the button argument indicates exactly one button per
event, whereas for MouseMove, it indicates the current state of all buttons.
Sample Application using Mouse Events
The following program allows user to draw
lines as you drag the mouse pointer. Here is the list of options available in
this program.
¨
You can draw as you move mouse
pointer by holding down the left button.
¨
You can draw a line by connecting
two points, Where points are marked with right mouse button.
¨
You can clear the form by
holding down Shift key and pressing left mouse button.
Steps to create application
Here are the steps required to create the
application.
1.
Select File-> New Project and select Standard Exe as the project type.
2. Change the Caption of the
form to Mouse Events Demo.
3.
Write the code for required
events as show in listing .
General/Declaration
Dim firstclick As Boolean
Dim px, py
Private
Sub Form_Load()
firstclick = True
End Sub
Private
Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As
Single)
Static x1, y1
'shift click - clear the form
If
Button = 1 And Shift = 1 Then
Cls
Exit Sub
End
If
‘ if
right button is pressed for the first time remember the
‘
coordinates of the point
If
Button = 2 Then
If
firstclick Then
x1 = X
y1 = Y
firstclick = False ‘ next click
will not be first click
Else
‘ This is second click so draw a line connecting first click
‘ point and current point
Line (x1, y1)-(X, Y)
firstclick = True ‘ next click
will be first click
End
If
‘ if
left button is pressed remember coordinates of the point where
‘
mouse button has gone down so that these coordinates can be used
‘ in
MouseMove event
ElseIf
Button = 1 Then
px = X
py = Y
End If
End Sub
Private
Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As
Single)
‘ if
user is moving mouse pointer by holding down left button
If
Button = 1 Then
Line (px, py)-(X, Y)
‘
current point becomes previous point for the next event
px
= X
py
= Y
End If
End Sub
Listing
8.2: Code for Mouse events in sample application
Test Run
Run the above project and test whether it
is doing what it is supposed to do.
1.
Press F5 to run the project.
2.
First take the mouse pointer to
the point from where you want to draw a line and click on right button.
3.
Then take the mouse pointer to
the ending point and again click on right button to draw a line connecting
first point with the second point.
FirstCilck is a variable that is used to know whether the click is first click
or second click. It is set to false by default. It is set to true after form
encounters the first click and again set to false at second click.
4.
Now, test dragging mouse
pointer to draw a line. Whenever you move the mouse pointer by holding left
button a continuous line is to be drawn as you move the mouse pointer. Test it
by dragging the mouse pointer to draw your name.
5.
To clear whatever is on the
form, press Shift + left button of mouse
Drag and Drop
Drag and drop is an interface. It allows
users to drag and drop a control to another control. Dropping control invokes
an action. For example, in windows explorer when you drag a set of files from
one directory and drop them on another directory, all the selected files will
be moved (or copied, if Ctrl key is pressed) to the directory on which the
files are dropped.
The control that is being dragged is called
Source, and the object on which the
Control is dropped is called as Target.
The following are various properties,
methods and events related to drag and drop.
Type
|
Name
|
Meaning
|
Property
|
Dragmode
|
Specifies
whether control is in manual drag mode or in automatic drag mode. Please see
the following section on drag modes.
|
Property
|
Dragicon
|
Specifies the icon to be used as the mouse
pointer during drag and drop operation.
|
Method
|
Drag
|
Begins, ends,
or cancels a drag operation.
|
Event
|
Dragdrop
|
This event
occurs when a source control is dropped on the target. This event occurs on
target.
|
Event
|
DragOver
|
Occurs on
target when the dragging process is in progress.
|
Table
8.5: Properties, Methods, and Events related to
Drag-and-drop.
Manual vs. Automatic drag mode
A control may be in either manual drag mode
or automatic drag mode. In manual drag mode, program has to initiate dragging
process by calling drag method. Whereas
in automatic drag mode, whenever user clicks on the control, drag process is
initiated.
Set DragMode
property of the Control to 0 for manual drag mode or 1 for automatic drag mode.
Drag method
Drag method is used to initiate, cancel or
end drag operation. Drag method is
used to initiate drag operation only when control is in manual drag mode (DragMode set to 0).
Drag action
The following are the valid actions.
Action
|
Constant
|
Meaning |
0
|
VbCancel
|
Cancels drag
operation.
|
1
|
VbBeginDrag
|
Initiate drag
operation.
|
2
|
VbEndDrag
|
Ends drag
operation and drops the Control.
|
Note : Change the icon used as mousepointer during dragging process using DragIcon property before dragging is
initiated.
Events related to Drag and drop
During drag-and-drop operation DragOver and DragDrop events occur. Both events occur on target Control. DragOver event occurs when dragging is
in progress. DragDrop event occurs
after the Control is dropped. Both events allow you to access the source
control through source parameter
The following are the common parameters of DragOver and DragDrop events. DragOver
has one extra parameter – State.
Parameter
|
Meaning |
Source
|
Refers to the
control that is being dragged. You can access the properties and methods of
source control, for example : Source.Picture
|
X, y
|
The x and y
coordinates of mouse pointer within target control.
|
State
|
Indicates the
transition state of the control being dragged in relation to a target
control. The following are valid values:
0 = Enter (source control is being dragged within the range of a target).
1 = Leave (source control is being dragged out of the range of a target).
2 = Over (source control has moved from one position in the target to
another).
|
Table
8.6 : Parameters of Drag and Drop event procedures.
Sample Application using Drag and Drop
Let us develop a small application using
drag and drop. The aim of this application is to illustrate how to use various
methods, properties and events related to drag and drop.
The application contains four image
controls. Three of them will contain images of the default size and one will
stretch the image. When user drags any
of the three images into fourth image and drops it, the dropped image will be
displayed in enlarged mode.
The following are the steps to be taken to
develop this sample application.
1.
Start a new project using File->New Project and select Standard EXE as the type of the
project.
2.
Place four image controls on
the form and change the properties as follows.
Object
|
Property
|
Value |
Image1
|
Picture
|
C:\windows\web\disney.ico
|
Image2
|
Picture
|
C:\windows\web\life.ico
|
Image3
|
Picture
|
C:\windows\web\hwood.ico
|
Image4
|
Stretch
|
True
|
|
BorderStyle
|
1-Fixed
Single.
|
Form1
|
Caption
|
Drag and Drop
Example
|
Note: The picture that is placed in Image control must be an Icon. Because
the same picture is used for DragIcon
property, Which can take only an Icon.
Write the following code. The code consists
of MouseDown event for first three image controls and DragDrop event for fourth image.
Private
Sub Image1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As
Single)
Image1.DragIcon = Image1.Picture
Image1.Drag
End Sub
Private
Sub Image2_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As
Single)
Image2.DragIcon = Image2.Picture
Image2.Drag
End Sub
Private
Sub Image3_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As
Single)
Image3.DragIcon = Image3.Picture
Image3.Drag
End Sub
Private
Sub Image4_DragDrop(Source As Control, X As Single, Y As Single)
Image4.Picture = Source.Picture
End Sub
Listing
8.3: Code for Drag and Drop sample application.
Test Run
1.
Run the application to
understand how it implemented drag and drop. To run press F5.
2.
Click on any of the first three
images and start moving the mouse pointer by holding down left button
(dragging).
3.
Along with mouse pointer the
picture of the image control that you are dragging is moved. This is because we
changed DragIcon property to the
icon in Image control before dragging process starts.
4.
Move the mouse pointer to
Image4 and drop it there. At this stage you should see the enlarged image
displayed in fourth image control.
Using DragOver event
You can use DragOver event of Image4 to display a different icon when control
enters into it to inform the user that the pointer has reached the place where
the control can be dropped. This could be done by changing DragIcon property of the source control when State parameter is 0
(enter). Again DragIcon can be
reset when control goes out of image4. The sample code is shown in listing 8.4.
Private
Sub Image4_DragOver(Source As Control, X As Single, Y As Single, State As
Integer)
' if
entering into control then change dragicon to icon
'
that indicates potential area to drop
If
State = 0 Then ‘replace potential.ico
with an Icon that you want ‘ to use.
Source.DragIcon = LoadPicture("potential.ico")
' if
leaving then reset control's dragicon
ElseIf State = 1 Then
Source.DragIcon = Source.Picture
End
If
End Sub
Listing
8.4: Code to change mouse pointer when control
enters and leaves target.
Using a control array to simplify code
A control array is an array of controls. A
control array is used when we have to write more or less the same code for a
group of controls of the same type. The sample application that we have
developed for drag and drop, is one of the candidates for control array. As you
can see, the code that we wrote for first three images is same except the name
of the control. So by using a control array we can write the same code just for
once, instead of three times.
The concept of control array is same as the
concept of menu array, Which we have seen in chapter 7. A control array is a collection of controls
with the same name but with different values for Index property of the controls. Whenever an event occurs at any of
the controls in the control array, only one event procedure is fired; that is
of the control array and not individual controls.
The event procedures of control array
contain one extra parameter, Index,
that contains the index value of the control at which event has occurred.
To
create a control for three images, take the following steps:
1.
Change the Name property of all three images (Image1, Image2 and Image3) to Images.
2.
Change the Index of first image control to 0, second image control to 1, and
third image control to 2.
3.
Write the code for MouseDown event of control array - Images, as shown in listing 8.5.
Private
Sub Images_MouseDown(Index as Integer, Button As Integer, Shift As Integer, X
As Single, Y As Single)
Images(index).DragIcon
= Images(index).Picture
Image(index).Drag
End Sub
Listing
8.5: Code for MouseDown event of the control array.
Images
(index) refers
to the control that initiated the event. So we use Drag method of that control to start dragging.
That's all. No more changes are required.
Code for DragDrop and DragOver events will remain the same.
If you run the application, it will do the same job as before. But it is more
efficient because we have only one event procedure for three images instead of
three separate event procedures.
Exercises
1.
How can we know button is
pressed, when user clicks mouse button?
2.
What will be the value of Shift parameter of KeyDown event when user presses Ctrl key?
3.
How can we ignore a key using KeyPress event? Is it also possible to
change the key without ignoring it?
4.
What is the event that occurs
when a source control is dragged on to target control?
5.
What are the properties of the
controls to be changed to create a control array?
6.
What is the order of MouseUp and Click event for a Command
button? Is it different from a form?
7.
How do you ignore Backspace
key?
8.
Is it possible to know whether
user pressed Ctrl key while moving the mouse pointer? If yes, how do you check
for it?
No comments:
Post a Comment