1 / 28

重点难点和错误分析 —— 项目五 简易画图板

重点难点和错误分析 —— 项目五 简易画图板. 主 讲 : 浙江广播电视大学 郑 炜. 一、保存图片文件及打开. 将图形保存到文件的语句: SavePicture 语法格式: SavePicture picture , stringexpression Picture : 产生图形文件的 PictureBox 控件或 Image 控件的图片内容 Stringexpression : 欲保存的图形文件名. 一、保存图片文件及打开. 例子:. Private Sub save_Click()

cady
Download Presentation

重点难点和错误分析 —— 项目五 简易画图板

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 重点难点和错误分析——项目五 简易画图板 主 讲 :浙江广播电视大学郑 炜

  2. 一、保存图片文件及打开 • 将图形保存到文件的语句:SavePicture • 语法格式: SavePicture picture, stringexpression • Picture:产生图形文件的 PictureBox 控件或 Image 控件的图片内容 • Stringexpression:欲保存的图形文件名

  3. 一、保存图片文件及打开 • 例子: Private Sub save_Click() dlgFile.Filter = "BMP ILES(*.BMP)|*.BMP|_ JPG FILES(*.JPG)| *.JPG" dlgFile.ShowSave Fn = dlgFile.FileName If Fn <> "" Then SavePicture picPaintzone.Image, Fn End If End Sub

  4. 一、保存图片文件及打开 • 打开已存在的图形文件,在图形控件内显示图形内容。 • 格式: 图片框控件名.Picture=LoadPicture([filename]) • 当filename为一个文件的路径+文件名时,图片框控件加载了一个图形文件。 • 当filename为空时,清空(删除)图片框内的图形内容。

  5. 一、保存图片文件及打开 • 将图形按一定比例绘制在图片框控件内 • 格式: 图片框控件名.PaintPicturepicture, x, y, width, height • Picture:要绘制到 object 上的图形源 • x, y:均为单精度值,指定在 object 上绘制 picture 的目标坐标 • width, height:单精度值,指示 picture 的目标宽度和高度

  6. 一、保存图片文件及打开 • 例子: dlgFile.Filter = "BMP FILES(*.BMP)|*.BMP|JPG FILES(*.JPG)" dlgFile.ShowOpen If dlgFile.FileName <> "" Then picPaintzone.Picture = LoadPicture(dlgFile.FileName) Fn = dlgFile.FileName picPaintzone.PaintPicturepicPaintzone.Picture, 0, 0, _ picPaintzone.ScaleWidth, picPaintzone.ScaleHeight End If picPaintzone是“绘图区”,图片框控件

  7. 二、绘图方法 在应用程序中加进适当的图形和动画常常可以增加程序的魅力,使其多姿多彩。利用VB提供的绘图方法可以很容易地完成各种图形编程工作,Visual Basic的绘图方法如下: • Print 显示字符串  • Line 画直线和方框  • Circle 画圆或椭圆 • Point 取得点的颜色值  • Pset 设置点的颜色值

  8. 1、Line方法 • 在对象上画直线或矩形 • 语法格式: object.Line [Step] (x1, y1) [Step] (x2, y2),[color],[B][F] • Object:所绘直线的控件对象,例如Form、PictureBox等 • (x1, y1):所画线段的起点坐标 • (x2, y2):所画线段的终点坐标 • Color:可选的颜色参数 • [B][F]:B参数可选参数,利用对角坐标画出矩形;如果使用了 B 参数,则 F 参数规定矩形以矩形边框的颜色填充。

  9. 例 利用Line方法绘制直线或矩形 • 运用Line方法绘制窗体坐标系 Private Sub Form_Click() Cls Form1.Scale (-110, 110)-(110, -110) ' 定义坐标系 Line (-105, 0)-(105, 0) '画X轴 Line (0, 105)-(0, -105) '画Y轴 End Sub

  10. 例 利用Line方法绘制直线或矩形 • 运用Line方法在窗体坐标系内绘制矩形 Private Sub Form_Click() Cls Form1.Scale (-110, 110)-(110, -110) ' 定义坐标系 Line (-105, 0)-(105, 0) '画X轴 Line (0, 105)-(0, -105) ‘画Y轴 Line (-40, 40)-(40, -40), , B ' 画矩形 Line (-70, 40)-(-50, -40), vbRed, BF ' 画实心矩形 End Sub

  11. 2、Circle方法 • Circle方法用来绘制圆、椭圆、圆弧等图形 • 语法格式 [对象名.] Circle [Step](x,y),Radius, [Color] ,[Start],[End],[Aspet] • [对象名]:要绘制图形的容器对象名称,如窗体、图片框等,缺省时为当前窗体。 • (x,y):圆、椭圆、弧或扇形的圆心坐标。 • Radius:圆、椭圆、弧或扇形的半径,若为椭圆,则为最长轴的尺寸。

  12. 2、Circle方法 • Circle方法用来绘制圆、椭圆、圆弧等图形 • 语法格式 [对象名.] Circle [Step](x,y),Radius, [Color] ,[Start],[End],[Aspet] • [Start]:可选型,指定弧的起点位置。取值范围从-2π到2π,缺省值是0。若为负数,则在画弧的同时还要画出到弧的起点的连线。 • [End]:可选项,指定弧的终点位置。取值范围从-2Π到2Π,缺省值是2Π。若为负数,则在画弧的同时还要画出圆心到弧的终点的连线。弧的画法是从起点逆时针画到终点。

  13. 2、Circle方法 • 语法格式 [对象名.] Circle [Step](x,y),Radius, [Color] ,[Start],[End],[Aspet] • [Aspet]:可选项,圆的纵轴和横轴的尺寸比。缺省值为1,表示画一个标准圆。当纵横比大于1时,椭圆的纵轴比横轴长;反之,则比横轴短。

  14. 例 在窗体上绘制圆、圆弧等 • 绘制圆 Private Sub Form_Click() Cls '清屏 Const pi = 3.1415926 ScaleWidth = 100 ScaleHeight = 100 Circle (30, 30), 10 '画标准圆 End Sub

  15. 例 在窗体上绘制圆、圆弧等 • 绘制椭圆 Private Sub Form_Click() Cls '清屏 Const pi = 3.1415926 ScaleWidth = 100 ScaleHeight = 100 Circle (70, 30), 10, vbGreen, , , 0.5 '画绿色椭圆 Circle (70, 30), 10, vbRed, , , 2 '画红色椭圆 End Sub

  16. 例 在窗体上绘制圆、圆弧等 • 绘制圆弧和扇形 Private Sub Form_Click() Cls '清屏 Const pi = 3.1415926 ScaleWidth = 100 ScaleHeight = 100 Circle (30, 75), 10, , -0.75 * pi, -0.25 * pi '画扇区 Circle (75, 75), 10, , -0.25 * pi, -0.75 * pi '画扇区 Circle (75, 75), 10, , 1.25 * pi, 1.75 * pi '画弧 End Sub

  17. 三、鼠标事件 • MouseDown和MouseUp事件 • 语法格式: • Private Sub 控件对象名_MouseDown(Button As Integer, Shift As Integer, x As Single, Y As Single) • Private Sub 控件对象名_MouseUp(Button As Integer, Shift As Integer, x As Single, Y As Single)

  18. MouseDown和MouseUp事件 • 语法格式: • Private Sub 控件对象名_MouseDown(Button As Integer, Shift As Integer, x As Single, Y As Single) • Button参数:可以用来区分当前鼠标的左、中、右按键,1表示用户按下了鼠标左按键,2表示右按键,4表示中间键。 • Shift参数:可以用来区别鼠标与键盘的组合,它的值等于1,表示Shift键被按下,2表示Ctrl键,4表示Alt键。 • X,Y参数:返回鼠标指针当前的位置,它们的计算单位由窗体的ScaleMode决定,由自定义坐标系统决定,如果没有自定义坐标系统,则按照默认坐标系。

  19. 示例1 • 当鼠标左键单击窗体时,按钮跟随鼠标位置移动;当鼠标右键单击窗体时,窗体内出现弹出菜单。

  20. 示例1 Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 1 Then '单击鼠标左键时 Command1.Move X, Y ElseIf Button = 2 Then '单击鼠标右键时 PopupMenu edit, X, Y End If End Sub

  21. MouseMove事件 • 语法格式: • Private Sub 控件对象名_MouseMove(Button As Integer, Shift As Integer, x As Single, Y As Single) • 参数与MouseDown、MouseUp一致

  22. 示例 • 设计程序,当鼠标在窗体内移动时,在鼠标指针当前位置画一个直径为100的圆,如图所示。 Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Circle (X, Y), 100 End Sub

  23. 在项目中巧妙运用鼠标事件 • 运用MouseDown事件启动绘图,并绘制起点位置的图形,当鼠标按下后,将绘图区的绘图笔类型设置为异或笔(DrawMode = 7 ) • 运用MouseMove事件处理连续滑动鼠标绘制图形,当鼠标移动到新的位置,则先擦除在这一位置之前的坐标位置所成形的图形,然后再绘制新图形。

  24. 四、常见错误分析 • Form_Load事件内怎么无法绘制图形? • 如何清除已绘制的图形,例如线条? • 如何判定对象是否越出窗体的边界?

  25. 1、 Form_Load事件内怎么无法绘制图形? • 解决方法: • 用绘图方法在窗体上绘制图形时,如果将绘制过程放在Form_Load事件内,由于窗体装入内存有一个时间过程,在该时间段内同步地执行了绘图命令,所绘制的图形无法在窗体上显示。 • 有两种方法可解决此问题: • 方法一:将绘图程序代码放在其他事件内。例如Paint等事件。 • 方法二:将窗体的AutoRedraw属性设置为True。

  26. 2、如何清除已绘制的图形,例如线条? • 解决方法: • Line控件在窗体上移动时,原位置上不会留下图形痕迹。如果用Line方法来代替Line控件,则每次在新位置上画直线前,需要清除原来位置上的线条。清除原来位置上的线条,可将DrawMode属性设置为异或(Xor)模式,在原位置上重画一次直线,即可清除原来的线条。

  27. 3、如何判定对象是否越出窗体的边界? • 解决方法: • 当对象在窗体上移动时,对象是否越出窗体的上边界或左边界,不能用对象的Top<0或对象的Left<0来判断,对象的Top<0(Left<0)仅表示该控件对象的上边界越出窗体的上(左)边界,而要使整个控件越出窗体的上(左)边界,还需要加上控件的高度(宽度)。

  28. 谢谢!

More Related