Visual Basic 可视化程序设计首页 上页 目录 前页 后页 末页
2009-7-28 第 1页第 5章 VB图形操作
模拟画笔程序设计
图形设计基础
图形控件
绘图方法
键盘和鼠标事件过程
知识延伸 ——拖放
Visual Basic 可视化程序设计首页 上页 目录 前页 后页 末页
2009-7-28 第 2页知识回顾
菜单的设计
工具栏与状态栏的设计
通用对话框的使用
错误处理
TreeView,ListView控件提问:怎样实现弹出菜单?
提问:怎样实现动态菜单?
提问:编程的时候怎样判断用户单击了哪个按钮?
提问:六种通用对话框的打开方式
Visual Basic 可视化程序设计首页 上页 目录 前页 后页 末页
2009-7-28 第 3页本章目标
熟悉图形的处理
图形控件的使用
绘图方法
键盘和鼠标事件
Visual Basic 可视化程序设计首页 上页 目录 前页 后页 末页
2009-7-28 第 4页引例五示例:模拟 Windows中的画笔。
要求:
1,包含操作菜单;
2,包含进行图形操作的工具箱;
3,可以画直线、曲线、点、圆、椭圆、矩形等;且能对闭合路径的图形填充颜色;
4,能隐藏 /显示颜料盒和相应的工具箱(如:线型或点型)。
( 单击查看代码 )
Visual Basic 可视化程序设计首页 上页 目录 前页 后页 末页
2009-7-28 第 5页图形设计基础
坐标系统
– 每个容器都有一个坐标系
– 构成一个坐标系,需要三个要素
坐标原点
坐标度量单位
坐标轴的长度与方向
– 坐标度量单位由容器对象的 ScaleMode属性决定,缺省为 Twip
Height
ScaleHeight
X
Y
O原点
Visual Basic 可视化程序设计首页 上页 目录 前页 后页 末页
2009-7-28 第 6页用户自定义坐标系
默认坐标系
Form1.ScaleHeight = 200
Form1.ScaleWidth = 200
Form1.ScaleLeft = 0
Form1.ScaleTop = 0
X
Y
O原点
自定义坐标系
Form1.ScaleHeight = 200
Form1.ScaleWidth = 200
Form1.ScaleLeft = -50
Form1.ScaleTop = -50
(-50,-50)
X
Y
50
方法一:
通过 ScaleWidth,ScaleHeight,ScaleTop和 ScaleLeft
属性实现。
(ScaleLeft,ScaleTop)
-200
Visual Basic 可视化程序设计首页 上页 目录 前页 后页 末页
2009-7-28 第 7页方法二:采用 Scale方法实现
[对象,]Scale [(xLeft,yTop) – (xRight,yBottom)]
(xLeft,yTop)
(xRight,yBottom)
X
Y
自定义坐标系例如,Form1.Scale (-50,50) - (150,-150)
可以在程序中使用 Scale方法改变坐标系统。
当 Scale方法不带参数时,取消用户定义的坐标系,采用缺省坐标系。
Visual Basic 可视化程序设计首页 上页 目录 前页 后页 末页
2009-7-28 第 8页练习例题示例:保持控件对象在坐标系内与 X轴和 Y轴的位置保持不变,如下图所示。
要求:
单击,左移,按钮时,坐标系向左和向上分别移动 100twip单位;
单击,右移,按钮时,坐标系向右和向下分别移动 100twip单位;
在坐标改变之后,窗体上的控件保持与坐标系的相对位置不变;
同时用一个标签显示当前窗体的
ScaleLeft和 ScaleTop两个属性的当前值。
( 单击查看代码 )
Visual Basic 可视化程序设计首页 上页 目录 前页 后页 末页
2009-7-28 第 9页图形控件( 2-1)
Line控件
– 显示水平线、垂直线或对角线
– X1,Y1:起始坐标
– X2,Y2:终止坐标
– BorderWidth:设定线的粗细,单位:像素
– BorderStyle:设定线的样式
Shape控件
– 绘制矩形、正方形、椭圆、圆、圆角矩形、圆角正方形
Visual Basic 可视化程序设计首页 上页 目录 前页 后页 末页
2009-7-28 第 10页练习例题示例:在窗体上利用 Shape控件绘制出奥运五环期的形状,如下图所示。 ( 查看代码 )
Visual Basic 可视化程序设计首页 上页 目录 前页 后页 末页
2009-7-28 第 11页图形控件( 2-2)
PictureBox控件
– 功能
显示来自位图、图标或元文件的图形,也可以增强的元文件、
JPEG或 GIF文件。
还可以作为容器存放其他控件
– AutoSize属性
True:表示图形过大时,控件调整大小与图形相适合
False:表示图形过大时,裁剪图像以适应控件的大小
Image控件
– 功能
显示来自位图、图标或元文件的图形,也可以增强的元文件、
JPEG或 GIF文件。 但占用的内存要少 。
不能存放其他控件
– Stretch属性
True:表示图形要调整大小以与控件相适合。
False:表示控件要调整大小以与图形相适(缺省值)
Visual Basic 可视化程序设计首页 上页 目录 前页 后页 末页
2009-7-28 第 12页示例,通过该例题体会 AutoSize与 Stretch属性的区别。 如下图所示。
练习例题蝴蝶飞舞。
( 单击查看代码 )
( 单击查看代码 )
Visual Basic 可视化程序设计首页 上页 目录 前页 后页 末页
2009-7-28 第 13页示例:利用 CurrentX和 CurrentY属性在窗体上随机打印 100个,★,,如下图所示。
当前坐标
当前坐标
– CurrentX属性和 CurrentY属性:
获取或设置窗体、图形框或打印机在绘图时的当前位置
在设计阶段不可用
( 查看代码 )
Visual Basic 可视化程序设计首页 上页 目录 前页 后页 末页
2009-7-28 第 14页案例一示例:在窗体上绘制如下图形。
实现步骤:
1.自定义坐标系并绘制坐标轴;
2,绘制 X坐标刻度和标记;
3,绘制 Y坐标刻度和标记;
4,绘制 Sin函数曲线。
( 单击查看代码 )
Visual Basic 可视化程序设计首页 上页 目录 前页 后页 末页
2009-7-28 第 15页绘图方法( 3-1)
Line
– [对象,] Line [Step](x1,y1) - [Step](x2,y2)[,color[,
B[F]]]
– 用来绘制直线或矩形
– 对象指窗体、图形框或打印机
– (x1,y1),(x2,y2)指直线的起始点和终止点,或矩形的对角坐标
– Color:表示直线的颜色或矩形的填充颜色
QBColor(0 ~ 15)
RGB(red,green,blue)
– 关键字 B表示画矩形,F表示用画矩形的颜色来填充矩形
– Step:表示相对于当前点 CurrentX和 CurrentY属性的相对位移量;否则就为坐标系中的绝对位移量
( 查看补充资料:颜色设置 )
Visual Basic 可视化程序设计首页 上页 目录 前页 后页 末页
2009-7-28 第 16页几个练习例题示例:假设定义坐标系为,Form1.Scale (0,100)-(100,0)
作如下操作:
Line(10,10)-(80,80),QBColor(12)
Line(10,10)-(80,80),QBColor(12),B
Line(10,10)-(80,80),QBColor(12),BF
无 B 只有 B 有 BF
只要有 F关键字出现,一定会有 B关键字;
例如,Line(10,10)-(80,80),QBColor(12),F×
Visual Basic 可视化程序设计首页 上页 目录 前页 后页 末页
2009-7-28 第 17页示例:假设定义坐标系为,Form1.Scale (0,100)-(100,0)
同时执行如下代码:
Line (10,10)-(80,80),,B
Line Step(10,0)-(10,10)
(10,10)
(80,80)
S
Step(10,0)
思考:执行 Line (10,0)- Step(10,10),效果如何?
Visual Basic 可视化程序设计首页 上页 目录 前页 后页 末页
2009-7-28 第 18页示例:在窗体中,实现背景颜色从上到下渐变的效果。
提示:
在窗体中画线,从上到下线的颜色逐渐变浅或变深。
( 单击查看代码 )
Visual Basic 可视化程序设计首页 上页 目录 前页 后页 末页
2009-7-28 第 19页思考:怎样用三角函数 Sin函数绘制面的图形?
Visual Basic 可视化程序设计首页 上页 目录 前页 后页 末页
2009-7-28 第 20页案例二示例:对统计的数据用饼图显示。
实现步骤:
1.自定义坐标系并产生要显示的数据;
2,将数据转换成弧度;
3.利用 Circle方法绘制饼图
(可使用 FillColor和 FillStyle
进行美化)。
( 单击查看代码 )
Visual Basic 可视化程序设计首页 上页 目录 前页 后页 末页
2009-7-28 第 21页绘图方法( 3-2)
Circle
– [对象,] Circle [step] (x,y),radius,[color],[起始角 ],
[终止角 ],[纵横比 ]
– 作用:画圆、画椭圆、画扇形、画弧线
– (x,y):表示圆点
– radius:表示半径
– 起始角和终止角,以弧度为单位,范围是 [-2π,2π ]
0~2π,指定 弧 的起点和终点位置;
-2π ~0:指定 扇形 的起点和终点位置
– 纵横比:缺省为 1.0
Visual Basic 可视化程序设计首页 上页 目录 前页 后页 末页
2009-7-28 第 22页几个练习例题示例:假设定义坐标系为,Scale (-20,20)-(20,-20),
作如下操作:
Circle (0,0),5
Circle (0,0),5,,,,2
Circle (0,0),5,,0.5,2.5
Circle (0,0),5,,-0.5,-2.5
Visual Basic 可视化程序设计首页 上页 目录 前页 后页 末页
2009-7-28 第 23页示例:画同心圆。颜色由随机数产生。
思路:
1,定制圆心
2,从圆心(半径为 0)逐渐增加半径的长度,圆心不变
3,颜色随机产生关键:找到同心圆的最大半径。
( 单击查看代码 )
思考:怎样以直方图的形式显示统计数据?
Visual Basic 可视化程序设计首页 上页 目录 前页 后页 末页
2009-7-28 第 24页绘图方法( 3-3)
PSet
– [对象,]PSet [Step](x,y),Color
– 作用:在指定的位置用给定的颜色画点
– Step:表示当前位置的一个相对位移量示例:以像素为单位,画不同彩色块 ( 单击查看代码 )
示例:用 PSet方法画出 Sin函数图形。 ( 单击查看代码 )
Visual Basic 可视化程序设计首页 上页 目录 前页 后页 末页
2009-7-28 第 25页与绘图有关的属性、方法和函数属性 方法 函数
ScaleWidth Scale QBColor
ScaleHeight Line RGB
ScaleLeft Circle
ScaleTop PSet
CurrentX
CurrentY
FillStyle
FillColor
DrawStyle
DrawWidth
Visual Basic 可视化程序设计首页 上页 目录 前页 后页 末页
2009-7-28 第 26页
线宽与线型
– 线宽,DrawWidth
给出窗体、图形框或打印机上所画线的宽度或点的大小。
以像素为单位,取值为 0 ~ 32767
– 线型,DrawStyle
给出窗体、图形框或打印机上所画线的形状示例:用 DrawWidth属性改变执行宽度 ( 查看代码 )
常数 设 置 值 描述
VBSolid 0 (缺省值 )实线
VBDash 1 虚线
VBDot 2 点线
VBDashadot 3 点划线
VBDashDotDot 4 双点划线
Vbinvisible 5 无线
VbinsideSolid 6 内收实线
Visual Basic 可视化程序设计首页 上页 目录 前页 后页 末页
2009-7-28 第 27页
填充样式与色彩
– FillColor
指定填充矩形或圆的颜色
默认是对象的 ForeColor所指定的颜色
– FillStyle
指定填充图案(样式)
Visual Basic 可视化程序设计首页 上页 目录 前页 后页 末页
2009-7-28 第 28页事件
Paint事件是在窗体或图片框上的覆盖窗口移开后被触发或是在窗体装入、最小化、还原、最大化时被触发的事件。
与 AutoRedraw的区别
– Paint事件可恢复全部被破坏的内容;
– AutoRedraw属性为“真”时,只能恢复为
“真”以后绘制的图形或文本。
示例:在窗体范围内以随机颜色画菱形,且当窗体大小改变时,菱形簇也随之调整。 ( 查看代码 )
Visual Basic 可视化程序设计首页 上页 目录 前页 后页 末页
2009-7-28 第 29页提高练习示例:用 Circle方法在窗体上绘制由圆环构成的艺术图案。如下图所示:
算法提示:等分半径为 r的圆周为 n份,以等分点位圆心,半径 r1绘制 n个圆。
( 单击查看代码 )
Visual Basic 可视化程序设计首页 上页 目录 前页 后页 末页
2009-7-28 第 30页示例:在窗体上显示一幅地图,移动滚动条漫游地图。
如下图所示,( 单击查看代码 )
Visual Basic 可视化程序设计首页 上页 目录 前页 后页 末页
2009-7-28 第 31页键盘和鼠标事件
键盘事件
– KeyDown事件:按下任一按键时触发
Sub Form_KeyDown(keycode As Integer,shift As Integer)
Sub object_KeyDown([index As Integer,]keycode As
Integer,shift As Integer)
– KeyUp事件:松开任一按键时触发
Sub Form_KeyUp(keycode As Integer,shift As Integer)
Sub object_KeyUp([index As Integer,]keycode As Integer,
shift As Integer)
– KeyPress事件:单击一个具有 Ascii码值按键时触发
Sub Form_KeyPress(KeyAscii As Integer)
Sub object_KeyPress([index As Integer,]KeyAscii As
Integer)
Visual Basic 可视化程序设计首页 上页 目录 前页 后页 末页
2009-7-28 第 32页
参数说明
– Shift
表示 Shift,Ctrl和 Alt三个功能键的状态信息
b0为 1:按下了 Shift键 ( vbShiftMask)
b1为 1:按下了 Ctrl键 ( vbCtrlMask)
b2为 1:按下了 Alt键 ( vbAltMask)
注意:如果 Shift <> 1,并不表示没有按下 Shift
键;如果 Shift = 3,则同时按下了 Ctrl和 Shift
两个功能键
– KeyCode:键盘扫描码,键盘每个按键有唯一个扫描码对应。因此任何一个按键都有 KeyDown
和 KeyUp事件。
– KeyAscii:字符 Ascii码。因此,只有具有 Ascii
码值的按键才能触发 KeyPress事件
b2 b1 b0
Visual Basic 可视化程序设计首页 上页 目录 前页 后页 末页
2009-7-28 第 33页练习例题示例:编写“捶打红心”程序,用方向键移动。如下图:
分析:
窗体中的红心定时的随机移动;
用上下左右方向键控制铁锤,每次移动 200twip;
因为方向键没有 Ascii码值,不能触发 KeyPress事件。
当铁锤在红心周围的某个范围之内,认为打中红心。
此时,程序暂停(即红心不在移动),且在窗体上显示用了多长时间,铁锤移动了多少次才打中红心。
( 单击查看代码 )
Visual Basic 可视化程序设计首页 上页 目录 前页 后页 末页
2009-7-28 第 34页
区别
KeyPress KeyDown和 KeyUp
事件发生的时间 输入一个 ASCII字符 按任意一个键参数值 KeyAscii接收到字符的 ASCII值
KeyCode接收到按键的扫描码按 Shift+A时事件发生的次数事件发生一次 事件发生两次按 Shift+A时参数值
(键盘处于大写状态 )
97 第一次是 16
第二次是 65
按 Shift+A时参数值
(键盘处于小写状态 )
65 第一次是 16
第二次是 65
Visual Basic 可视化程序设计首页 上页 目录 前页 后页 末页
2009-7-28 第 35页窗体的 KeyPreview属性窗体的:
KeyPress
KeyDown
KeyUp
控件的:
KeyPress
KeyDown
KeyUp
窗体的 KeyPreview为 True
焦点在控件上输入在这里作一点修改影响所有控件在这里作一点修改影响一个控件
假定窗体 KeyPreview为 True,并有下面事件过程,
则当文本框中输入,1”时,实际上是得到的是,3”
Sub Form_KeyPress(KeyAscii As Integer)
KeyAscii = KeyAscii + 1
End Sub
Sub Text1_KeyPress(KeyAscii As Integer)
KeyAscii = KeyAscii + 1
End Sub
? 窗体 KeyPreview为
False时 在文本框中输入,1”时,实际上得到的是什么。
Visual Basic 可视化程序设计首页 上页 目录 前页 后页 末页
2009-7-28 第 36页练习例题对输入的数据进行验证、限制和修改示例:修改输入数据。
要求:接收大写字符,即输入的字符都用大写显示。
把 KeyPreview属性设置为 True时,编写下面代码:
Sub Form_KeyPress(KeyAscii As Integer)
If KeyAscii >= Asc("a") And KeyAscii <= Asc("z") Then
KeyAscii = KeyAscii + Asc("A") - Asc("a")
End If
End Sub
Visual Basic 可视化程序设计首页 上页 目录 前页 后页 末页
2009-7-28 第 37页示例:限制输入数据。
要求:文本框只接收,0 ~ 9”的数字字符。
Sub txtExample_KeyPress(KeyAscii As Integer)
If KeyAscii < 48 Or KeyAscii > 57 Then
KeyAscii = 0
End If
End Sub
示例:当按下 Alt + F5时终止程序的运行。
Sub Form_KeyDown(KeyCode As Integer,Shift As Integer)
'按下 Alt键时,Shift的值为 4
If (KeyCode = vbKeyF5) And (Shift = 4) Then
End
End If
End Sub
Visual Basic 可视化程序设计首页 上页 目录 前页 后页 末页
2009-7-28 第 38页鼠标事件
MouseDown事件
– 按下鼠标按键时触发
– Sub Form_MouseDown(Button As Integer,Shift As Integer,X
As Single,Y As Single)
MouseUp事件
– 松开鼠标按键时触发
– Sub Form_MouseUp(Button As Integer,Shift As Integer,
X As Single,Y As Single)
MouseMove事件
– 移动鼠标指针时触发
– Sub Form_MouseMove(Button As Integer,Shift As Integer,X
As Single,Y As Single)
Visual Basic 可视化程序设计首页 上页 目录 前页 后页 末页
2009-7-28 第 39页
参数说明
– Button
表示鼠标三个按键的状态信息
b0为 1:按下了左键 ( vbLeftButton )
b1为 1:按下了右键 ( vbRightButton)
b2为 1:按下了中键 ( vbMiddleButton)
例如:如果 Button = 1,表示按下鼠标左键;
如果 Button=2,则表示按下了鼠标右键。
– Shift:同键盘中的 Shift
– X和 Y:表示当前鼠标指针的位置
b2 b1 b0
Visual Basic 可视化程序设计首页 上页 目录 前页 后页 末页
2009-7-28 第 40页练习例题示例:显示鼠标当前的位置。 ( 单击查看代码 )
示例:画线和圆。
要求:
按下鼠标右键,直接花圆;
按下鼠标左键移动时画线;
在画线时,鼠标的指针用 pen04.ico形状;
松开鼠标左键时,停止画线,且鼠标指针恢复默认形状。
( 单击查看代码 )
Visual Basic 可视化程序设计首页 上页 目录 前页 后页 末页
2009-7-28 第 41页知识延伸
拖放
– 定义:是运行时用户在应用程序中或应用程序之间选择并移动对象的一种方法。
– 分类
控件拖放
OLE拖放
Visual Basic 可视化程序设计首页 上页 目录 前页 后页 末页
2009-7-28 第 42页控件拖放
定义:运行时将控件从一个位置拖到另一个位置
自动拖放
手工拖放
Visual Basic 可视化程序设计首页 上页 目录 前页 后页 末页
2009-7-28 第 43页控件拖放属性、方法
DragMode属性
– 设置在拖放操作中所用的是手动还是自动拖动方式
– 0:缺省,手动拖动模式; 1:自动拖动模式
DragIcon属性
– 拖动过程中显示的图标
Drag方法
– 格式,[对象,] Drag Action
– 当 DragMode属性为 0时,需用 Drag进行拖动操作
– Action的取值:
0 — vbCancle:取消控件的拖动操作;
1 — vbBeginDrag:启动控件的拖动;
2 — vbEndDrag:放下控件并引发 DragDrop事件。
Visual Basic 可视化程序设计首页 上页 目录 前页 后页 末页
2009-7-28 第 44页几个练习例题示例:控件拖放的实现代码。
( 单击查看代码 )
Sub Form_DragDrop(Source As Control,X As Single,Y As Single)
Source.Move X,Y
End Sub
示例:控件拖放。
( 单击查看代码 )
示例:控件拖放。
Visual Basic 可视化程序设计首页 上页 目录 前页 后页 末页
2009-7-28 第 45页
OLE拖放
定义:运行时将数据从一个控件或应用程序移到另一个控件或应用程序
要判断控件是否支持 OLE拖放,请检查该控件是否存在 OLEDragMode和
OLEDropMode属性,或检查是否存在
OLEDrag方法。
Visual Basic 可视化程序设计首页 上页 目录 前页 后页 末页
2009-7-28 第 46页
OLE属性
OLEDragMode属性
– 在源控件上设置
– 0 — Manual:缺省,手动拖动模式,用 OLEDrag方法实现“拖”操作
– 1 — Automatic,自动拖动模式,自动实现“拖”操作
OLEDropMode属性
– 在目标控件上设置
– 0 — None:缺省,目标控件不接受 OLE,放” 操作,
并且显示 No Drop图标
– 1 — Manual:手工实现“放”操作
– 2 — Automatic:自动实现“放”操作
Visual Basic 可视化程序设计首页 上页 目录 前页 后页 末页
2009-7-28 第 47页
完全支持自动 OLE拖放
– PictureBox,Image和 TextBox
支持自动“拖”操作,不支持自动“放”
– ComboBox,FileListBox,DirListBox和 ListBox
只支持 OLE拖放事件的控件
– CheckBox,Frame,OptionButton,Label、
DriveListBox和 CommandButton
示例:从 Windows资源管理把文件的文件名拖到标签上。 ( 单击查看代码 )
Visual Basic 可视化程序设计首页 上页 目录 前页 后页 末页
2009-7-28 第 48页
OLE拖放的方法和对象
OLEDrag方法如果控件不支持自动拖动或想指定支持的是哪种数据格式的拖动效果,那么要用手动拖动。
DataObject对象数据从拖动源传到放下目标时,要用 DataObject对象来存储和获取。 DataObject对象提供了存储、获取与分析数据的方法和属性。
示例:在窗体上放一文本框。运行时若用户从
Windows资源管理器中选择文本文件并拖到文本框,那么文本框中将显示每个文本文件的内容。
( 单击查看代码 )
Visual Basic 可视化程序设计首页 上页 目录 前页 后页 末页
2009-7-28 第 49页本章总结
图形控件
绘图方法
Line
Circle
Pset
键盘和鼠标事件