How to Create Rubber-Band Lines/Boxes in Visual Basic
ID: Q71488
|
The information in this article applies to:
-
Microsoft Visual Basic Standard and Professional Editions for Windows, version 3.0
-
Microsoft Visual Basic programming system for Windows, version 1.0
SUMMARY
Creating rubber bands within Visual Basic can be done using the
DrawMode property. Rubber bands are lines that stretch as you move the
mouse cursor from a specified point to a new location. This can be
very useful in graphics programs and when defining sections of the
screen for clipping routines.
MORE INFORMATION
The theory of drawing a rubber-band box is as follows:
- Draw a line from the initial point to the location of the mouse
cursor using:
[form].DrawMode = 6. {INVERT}
- Move the mouse cursor.
- Save the DrawMode.
- Set the [form].DrawMode to 6. {INVERT}
- Draw the same line that was drawn in step 1. This will restore the
image underneath the line.
- Set the [form].DrawMode back to the initial DrawMode saved in step 3.
- Repeat the cycle again.
DrawMode equal to INVERT allows the line to be created using the
inverse of the background color. This allows the line to be always
displayed on all colors.
The sample below will demonstrate the rubber-band line and the
rubber-band box. Clicking the command buttons will allow the user
to select between rubber-band line or a rubber-band box. The user will
also be able to select a solid line or a dashed line.
Create and set the following controls and properties:
Control Name Caption Picture
------------------------------------------------
Form1 Form1 c:\windows\chess.bmp
Command1 RubberBand
Command2 RubberBox
Command3 Dotted
Command4 Solid
In the general section of your code, define the following constants:
Const INVERSE = 6 '*Characteristic of DrawMode property(XOR).
Const SOLID = 0 '*Characteristic of DrawStyle property.
Const DOT = 2 '*Characteristic of DrawStyle property.
Const TRUE = -1
Const FALSE = 0
Dim DrawBox As Integer '*Boolean-whether drawing Box or Line
Dim OldX, OldY, StartX, StartY As Single '* Mouse locations
In the appropriate procedures, add the following code:
Sub Form_MouseDown (Button As Integer, Shift As Integer, X As
Single, Y As Single)
'* Store the initial start of the line to draw.
StartX = X
StartY = Y
'* Make the last location equal the starting location
OldX = StartX
OldY = StartY
End Sub
Sub Form_MouseMove (Button As Integer, Shift As Integer, X As
Single, Y As Single)
'* If the button is depressed then...
If Button Then
'* Erase the previous line.
Call DrawLine(StartX, StartY, OldX, OldY)
'* Draw the new line.
Call DrawLine(StartX, StartY, X, Y)
'* Save the coordinates for the next call.
OldX = X
OldY = Y
End If
End Sub
Sub DrawLine (X1, Y1, X2, Y2 As Single)
'* Save the current mode so that you can reset it on
'* exit from this sub routine. Not needed in the sample
'* but would need it if you are not sure what the
'* DrawMode was on entry to this procedure.
SavedMode% = DrawMode
'* Set to XOR
DrawMode = INVERSE
'*Draw a box or line
If DrawBox Then
Line (X1, Y1)-(X2, Y2), , B
Else
Line (X1, Y1)-(X2, Y2)
End If
'* Reset the DrawMode
DrawMode = SavedMode%
End Sub
Sub Form_MouseUp (Button As Integer, Shift As Integer, X As Single,
Y As Single)
'* Stop drawing lines/boxes.
StartEvent = FALSE
End Sub
Sub Command2_Click ()
'* Boolean value to determine whether to draw a line or box.
DrawBox = TRUE
End Sub
Sub Command1_Click ()
'* Boolean value to determine whether to draw a line or box.
DrawBox = FALSE
End Sub
Sub Command3_Click ()
'* Create a dotted line
Form1.DrawStyle = DOT
End Sub
Sub Command4_Click ()
'* Create a solid line.
Form1.DrawStyle = SOLID
End Sub
Additional query words:
2.00 3.00
Keywords : kbcode APrgGrap PrgCtrlsStd
Version : 1.00 2.00 3.00
Platform : WINDOWS
Issue type :