友情提示:同学您好,此页面仅供预览,在此页面学习不会被统计哦! 请进入学习空间后选择课程学习。

实验目的

1. 掌握 Click, DblClick 事件。

2. 掌握 MouseDown,MouseUp事件。

3. 掌握 MouseMove 事件。

4. 了解鼠标事件在程序设计中应用。

实验内容

一、绘制彩色线条

当单击窗体底部不同颜色的按钮后,在窗体上按下鼠标左键并拖动鼠标,可以绘制相应颜色的线条。单击“CLEAR”按钮,可清除窗体上的所有线条;单击“EXIT”按钮,终止程序的运行。本程序运行效果如图13-1所示。


本程序的设计步骤如下。

1. 向窗体中添加命令按钮Command1,设置其 Caption属性为空;设置其BackColor属性为红色;Style属性为1Graphical,最后调整其大小和位置。

2. 采用相同的方法,向窗体中分别添加其它按钮Command2~Command6,如图13-1所示,并使之代表不同的颜色。

3. 添加命令按钮Command7Command8,并设置它们的Caption属性分别为CLEAREXIT

4. 编写以下代码,调试运行程序。

OptionExplicit

DimFlag As Boolean

DimCLR

PrivateSub Command1_Click()

CLR = vbRed

EndSub

PrivateSub Command2_Click()

CLR = vbYellow

EndSub

PrivateSub Command3_Click()

CLR = vbGreen

EndSub

PrivateSub Command4_Click()

CLR = vbBlue

EndSub

PrivateSub Command5_Click()

CLR = vbWhite

EndSub

PrivateSub Command6_Click()

CLR = vbBlack

EndSub

PrivateSub Command7_Click()

Cls

EndSub

PrivateSub Command8_Click()

End

EndSub

PrivateSub Form_Load()

Form1.DrawWidth = 3

EndSub

PrivateSub Form_MouseDown(Button As Integer, Shift As Integer, _

XAs Single, Y As Single)

IfButton = 1 Then Flag = True

CurrentX = X

CurrentY = Y

EndSub

PrivateSub Form_MouseMove(Button As Integer, Shift As Integer,  _

XAs Single, Y As Single)

If Flag Then Line -(X, Y), CLR

EndSub

 

Private Sub Form_MouseUp(Button AsInteger, Shift As Integer, _

X As Single, Y As Single)

Flag = False

EndSub

问题:在运行程序时,如果在单击任何颜色按钮之前,按下鼠标左键并在窗体上拖动鼠标,是否能画出线条?        ;如果能,它的颜色由什么决定?                   

二、鼠标单击事件的应用

在窗体上有9个按钮排列成33列。当第135……次单击任意一个按钮时,被单击的按钮上显示字符“X”,当第246……次单击任意一个按钮时,被单击的按钮上显示字符“O”。程序运行效果如图13-2所示。


本程序的设计步骤如下。

1. 添加一个命令按钮Command1,设置其Caption属性为空,最后调整该按钮的大小。

2. 选定该按钮,单击工具栏上的“复制”按钮,再单击工具栏上的“粘贴”按钮,在弹出的如图13-3所示的确认对话框中,单击“是”按钮。多次使用“粘贴”命令,向窗体上添加9个按钮,并将它们摆放整齐。


3. 双击窗体中的任意一个命令按钮,在Click事件过程中添加如下代码:

PrivateSub Command1_Click(Index As Integer)

Staticxo As Boolean

Ifxo Then

Command1(Index).Caption= "O"

Else

Command1(Index).Caption= "X"

EndIf

xo= Not xo

EndSub

 

参照上述代码编写程序,使当单击9个按钮中的任一按钮时,被单击的按钮上交替显示“A”、“B”、“C”。即当第147……次单击某按钮时,被单击的按钮上显示字符“A”;而当第258……次单击某按钮时,被单击的按钮上显示“B”;第369……次单击某按钮时,被单击的按钮上显示“C”。

三、简单的画图程序

结合鼠标事件和绘图方法设计一个模拟的画图程序。程序运行效果如图13-4所示


本程序的设计步骤如下。

1. 向窗体中添加两个PictureBox控件:Picture1Picture2

2. Picture1中添加四个单选钮:Option1Option2Option3Option4。调整其大小刺骨设置它们的Style属性值为:1GraphicalCaption属性分别为“画笔”、“直线”、“圆”、“矩形”。

3. 根据图13-5所示,向窗体中添加菜单。

4)补充完善如下代码,并调试通过。

OptionExplicit

  Private MYCOLOR As Long   '颜色

  Private xStart As Single  '起点X坐标

  Private yStart As Single  '起点Y坐标

  Private xOld As Single    '上一点X坐标

  Private yOld As Single    '上一点Y坐标

  Private r As Single       '当前半径

  Private rOld As Single    '上一次半径

PrivateSub Form_Load()

    MYCOLOR = Picture1.ForeColor

    Picture1.DrawWidth = 3

EndSub

PrivateSub Picture1_MouseDown(Button As Integer, _

ShiftAs Integer, X As Single, Y As Single)

    If Button = 1 Then

        xStart = X

        yStart = Y

        xOld = xStart

        yOld = yStart

        rOld = 0

        Picture1.DrawMode = 7

        Picture1.Line (xStart, yStart)-(xOld,yOld), _

Picture1.BackColor   

        Picture1.Line (xStart, yStart)-(X, Y),MYCOLOR

    End If

EndSub

PrivateSub Picture1_MouseMove(Button As Integer, Shift As _

Integer,X As Single, Y As Single)

'画笔

    If Option1.Value And Button = 1 Then

    Picture1.DrawMode = 13

    Picture1.Line (xOld, yOld)-(X, Y), MYCOLOR

    xOld = X

    yOld = Y

    End If

'直线

  If Option2.Value And Button = 1 Then

      Picture1.Line (xStart, yStart)-(xOld,yOld), _

Picture1.BackColor   '消除背景色

      Picture1.Line (xStart, yStart)-(xOld,yOld), MYCOLOR

      Picture1.Line (xStart, yStart)-(X, Y),Picture1.BackColor

      Picture1.Line (xStart, yStart)-(X, Y),MYCOLOR

      xOld = X

      yOld = Y

  End If

'

  If Option3.Value And Button = 1 Then

     Picture1.Circle (xStart, yStart), rOld,Picture1.BackColor

     Picture1.Circle (xStart, yStart), rOld,MYCOLOR

     r =                                                     

     Picture1.Circle (xStart, yStart), r,Picture1.BackColor

     Picture1.Circle (xStart, yStart), r,MYCOLOR

     rOld =          

 End If

'矩形

IfOption4.Value And Button = 1 Then

       Picture1.Line (xStart, yStart)-(xOld,yOld), _

Picture1.BackColor,B

       Picture1.Line (xStart, yStart)-(xOld,yOld), MYCOLOR, B

                                                                          

                                                                          

       xOld = X

       yOld = Y

EndIf

EndSub

PrivateSub Picture1_MouseUp(Button As Integer, Shift As Integer, _

XAs Single, Y As Single)

Picture1.DrawMode = 13

     '直线

     If Option2.Value And Button = 1 Then

        Picture1.Line (xStart, yStart)-(X, Y),MYCOLOR

     End If

     '

     If Option3.Value And Button = 1 Then

        Picture1.Circle (xStart, yStart), r,MYCOLOR

        Picture1.PSet (xStart, yStart),Picture1.BackColor

     End If

     '矩形

     If Option4.Value And Button = 1 Then

                                                                          

     End If

EndSub

PrivateSub RED_Click()

    MYCOLOR= vbRed

EndSub

PrivateSub YELLOW_Click()

    MYCOLOR= vbYellow

EndSub

PrivateSub BLUE_Click()

    MYCOLOR= vbBlue

EndSub

PrivateSub CLEAR_Click()

    Picture1.Cls

EndSub

PrivateSub EXIT_Click()

    End

EndSub