7.1 显示图片和图形的控件

65
7.1 显显显显显显显显显显 7.2 显显 7.3 显显显显显显显显显显 7.4 显显显显显显 7.5 显显显 显7显 显显显显 7.6 ProgressBar 显显 7.10 显显显显显显 7.8 Animation 显显 7.9 SSTab 显显 7.7 UpDown 显显

Upload: kaipo

Post on 15-Jan-2016

88 views

Category:

Documents


0 download

DESCRIPTION

第 7 章 常用控件. 7.1 显示图片和图形的控件. 7.2 框架. 7.3 为用户提供选择的控件. 7.4 滚动条与滑块. 7.5 计时器. 7.6 ProgressBar 控件. 7.7 UpDown 控件. 7.8 Animation 控件. 7.9 SSTab 控件. 7.10 鼠标器和键盘. 7.1 显示图片和图形的控件. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 7.1  显示图片和图形的控件

7.1 显示图片和图形的控件 7.2 框架

7.3 为用户提供选择的控件 7.4 滚动条与滑块

7.5 计时器

第 7 章 常用控件

7.6 ProgressBar 控件

7.10 鼠标器和键盘

7.8 Animation 控件

7.9 SSTab 控件

7.7 UpDown 控件

Page 2: 7.1  显示图片和图形的控件

7.1 显示图片和图形的控件• 图片框控件( PictureBox )与图像框控件( Image 控

件)在 VB 中用来在窗体的指定位置显示图形信息。图片框控件具有更大的灵活性,可以用来显示动态的图形信息。而图像框控件只是用来显示静态的图形信息,包括来自位图、图标或元文件的图形,也可以显示增强的元文件、 JPEG 或 GIF 文件。

• 图片框控件可以作为父控件,即可以容纳其他控件。可以使用 Print 方法,而图像框控件则不具有这些性能。但图像框控件使用较少的系统资源,所以重画起来比图片框控件要快。

Page 3: 7.1  显示图片和图形的控件

• 1. Picture 属性 Picture 属性的作用为返回或设置控件中要显示的图片。

其语法为: [< 对象名 >.]Picture [= < 图片文件路径及文件名 >]• 2. LoadPicture 函数 LoadPicture 函数用于在设计时将图形载入到窗体的 Pictu

re 属性、 PictureBox 控件或 Image 控件。其语法为: LoadPicture([< 图形文件名 >] , [< 尺寸 >] , [< 颜色深度

>] , [x , y])• 3. Stretch 属性 Stretch 属性值用来返回或设置一个值,该值用来指定一个

图形是否要调整大小,以适应图像框控件的大小。其语法为:

[< 对象名 >.]Stretch [=< 逻辑值 >]

7.1.1 重要属性、事件和方法

Page 4: 7.1  显示图片和图形的控件

7.1.2 图形文件的装入• 1. 设计时装入图形文件• ( 1 )利用属性窗口的 Pictrue 属性装入图形文件• 操作步骤为:• ① 单击图片框使其成为活动控件。• ② 在属性窗口中找到 Pictrue 属性条,单击其右边的三个

小点(…),打开“加载图片”对话框;• ③ 找到所需图形文件后,单击“打开”按钮,完成图形

文件的装入。• ( 2 )利用剪贴板装入图形文件• 具体方法是:• ① 在 Windows 下用绘图软件绘制所需图形,将图形复制

到剪贴板中,或者使用图形浏览软件,图象捕捉软件将图形复制到剪贴板中。

• ② 使图片框(或图像框和窗体)处于活动状态,单击“编辑”菜单中的“粘贴”命令,则可将剪贴板中的图形粘贴到图片框中。

Page 5: 7.1  显示图片和图形的控件

图 7-1 “ 加载图片”对话框

Page 6: 7.1  显示图片和图形的控件

2. 在运行时装入图形文件例 7-1:编程实现三个图片框中图片的轮换,并使得一个图片框中可以显示整个图片。( 1)界面设计在窗体上添加如图 7-2所示三个图片框控件 Picture1、 Picture2、 Picture3。将 Picture3的 AutoSize属性设置为 True。其他属性值为默认值。

( a )设计时界面 ( b )运行时界面 ( c )响应事件

图 7-2 图片框

Page 7: 7.1  显示图片和图形的控件

( 2 )编写事件代码在 Form_Load() 事件中加入如下代码:Private Sub Form_Load() Picture1.Picture = LoadPicture("c:\steamship.gif") Picture2.Picture = LoadPicture("c:\bus.gif") Picture3.Picture = LoadPicture("c:\car.gif")End Sub在 Picture3_Click() 事件中加入如下代码:Private Sub Picture3_Click() Form1.Picture = Picture3.Picture : Picture3.Picture = Picture2.Pict

ure Picture2.Picture = Picture1.Picture : Picture1.Picture = Form1.Pict

ure Form1.Picture = LoadPicture()End Sub

Page 8: 7.1  显示图片和图形的控件

7.2 框架 框架( Frame )控件可以用来对其他控件进行分组,以便于用

户识别。• 为了将控件分组,首先需要绘制框架,然后绘制框架里面的控

件。• 如果需要对窗体上已有的控件进行分组,可以选中需要放入框

架中的控件,然后采用“编辑”菜单的“剪切”命令将控件剪切到剪贴板中,再选中框架,单击“编辑”菜单的“粘贴”命令将选中的控件放入框架中。如果要将框架内的控件移动到框架之外,也只能采用“剪切”和“粘贴”的方法。

• 框架的主要属性有 Name 、 Caption 、 Enable 、 Visible等。• Caption 为框架的可见文字部分,如果省略,则框架形式上如同一个封闭的矩形框。

• 当框架的 Enable 属性为 False 时,框架内的所有控件都将屏蔽,用户无法对其操作,此时框架的标题( Caption )为灰色。

• 当框架的 Visible 属性为 False 时,框架及其内部的所有控件都将隐藏起来。

Page 9: 7.1  显示图片和图形的控件

7.3 为用户提供选择的控件表 7-1 为用户提供选择的控件

控件名称 用 途

CheckBox 用户可选择一个或多个选项的小选择集OptionButton (如果需要附

加的组则使用 Frame )用户只能选择一项的小选择集

ListBox 用户可从中进行选择的滚动列表ComboBox 一个可滚动选择列表附加一个文本编辑域。

用户可以从表中选择或在编辑域中键入选择

Page 10: 7.1  显示图片和图形的控件

7.3.1 单选按钮和复选框

1. 单选按钮和复选框的重要属性

2. 单选按钮和复选框的主要事件

Page 11: 7.1  显示图片和图形的控件

1. 单选按钮和复选框的重要属性( 1 ) Alignment 属性0 :(缺省值)文本是左对齐的,控件是右对齐的。1 :文本右对齐,控件左对齐。( 2 ) Value 属性单选按钮:Value=True,表示单选按钮被选中; Value=False,默认设置,表示单选按钮不被选中。复选框:Value=0,默认设置,表示复选框不被选中; Value=1,复选框被选中; Value=2,复选框为灰色,表示禁止用户选择。( 3 ) Style 属性Style=0 ,标准方式; Style=1 ,图形方式(参见图 7-5 )。

Page 12: 7.1  显示图片和图形的控件

图 7-4 复选框(左)和单选按钮(右)

( a )复选框和单选按钮(未选中状态) ( b)复选框和单选按钮(选中状态)

图 7-5 图形方式的单选按钮和复选框

Page 13: 7.1  显示图片和图形的控件

2. 单选按钮和复选框的主要事件单选按钮和复选框可以接受的事件主要有 click 事件。但往往并不需要编写其事件过程。因为单击时,它们自动改变状态。例 7-2 :用复选框和单选按钮控制文本框中输入的字体。( 1 )界面设计本程序采用如图 7-6 所示界面。包括两个标准形式的单选按钮,两个图形方式的复选框,一个文本框(设计时已经输入文字,字体三号),一个 Picture 图片框,用于显示文本框中文本的字体),一个 Command 命令按钮用于切换字体。各控件的属性见表 7-2 。

图 7-6 复选框和单选按钮的应用

表 7-2 控件属性

控件名 标题Option1 下划线Option1 删除线Check1 粗体Check1 斜体Text1 无Picture1 无Command1 下一个字体

Page 14: 7.1  显示图片和图形的控件

Private Sub Check1_Click() Text1.FontBold = IIf(Check1=1,True,False) ' “粗体”复选框是否按下(选中)End Sub

Private Sub Check2_Click() Text1.FontItalic = IIf(Check2=1,True,False) ' “斜体”复选框是否按下(选中)End Sub

Private Sub Option1_Click() Text1.FontUnderline = IIf(Option1,True,False) ' “ 下划线”单选按钮是否选中End Sub

Private Sub Option2_Click() Text1.FontStrikethru = IIf(Option2,True,False) ' “删除线”单选按钮是否选中End Sub

Private Sub Command1_Click() Static I ' 声明变量 Dim OldFont Picture1.Cls OldFont = FontName ' 保留原来的字体。 Text1.FontName = Screen.Fonts(I) ' 改变到新的字体。 I = I + 1 ' 计数器增一。 If I = FontCount Then I = 0 ' 重新开始。 FontName = OldFont ' 恢复原来的字体。 Text1.FontBold = IIf(Check1=1,True,False) ' “粗体”复选框是否按下(选中) Text1.FontItalic = IIf(Check2=1,True,False) ' “斜体”复选框是否按下(选中) Text1.FontStrikethru = IIf(Option1,True,False) ' “ 下划线”单选按钮是否选中 Text1.FontStrikethru = IIf(Option2,True,False) ' “删除线”单选按钮是否选中 Picture1.Print Text1.FontNameEnd Sub

Page 15: 7.1  显示图片和图形的控件

7.3.2 列表框和组合框列表框( ListBox )控件显示项目列表,用户从其中可以选择一项或多项。列表框的默认名为 ListX,组合框的默认名为 ComboX( X=1, 2,…。)。列标框和组合框的图标参见图 7-7。 组合框( ComboBox )控件将文本框( TextBox )控件和列表框控件的特性结合在一起-既可以在控件的文本框部分输入信息,也可以在控件的列表框部分选择一项。组合框有三种风格:下拉式组合框、简单组合框和下拉式列表框。

用户可以通过单击列表框或组合框中的某一项来选择所需选项,也可以在组合框中输入自己的选项(即使输入的内容并不包含在列表中),但是只能在列表框中进行选择,这是列表框和组合框的最大区别。

7-7 列表框组合框图标

Page 16: 7.1  显示图片和图形的控件

1. 列表框和组合框的重要属性( 1 ) List 属性List 属性用来存放列表框和组合框列表部分的选项。列表是一个字符串数组,数组的每一项都是一列表选项,对列表框和组合框控件在设计时可以通过属性窗口进行设置,也可以在运行时进行读写。其语法为:[< 对象名 >.].List (<索引值 >) [=<字符串表达式 >]

( 2 ) ListIndex 属性ListIndex 属性用来存放控件中当前选择项目的索引,在设计时不可用。如果未选定项目,则 ListIndex 属性值是 – 1 。对于 ComboBox 控件,表示用户向文本框部分输入了新文本。

Page 17: 7.1  显示图片和图形的控件

( 3 ) Sorted 属性

Sorted 属性决定控件的元素是否自动按字母表顺序升序排序。 Sorted 属性值为 True ,则选项按字母顺序升序排列,否则按输入的顺序排列。

( 4 ) Text 属性对下拉组合框和简单组合框控件,表示编辑域中的文本,该文本可以从列表中选择或从键盘输入。

对下拉列表框和列表框控件,表示在列表中选择的选项,返回值总与表达式 List(ListIndex) 的返回值相同。 Text 属性只能在程序中设置,为只读属性。

Page 18: 7.1  显示图片和图形的控件

2. 列表框特有的重要属性( 1 ) MultiSelect 属性

MultiSelect 属性用来设置在列表框控件中进行复选以及如何进行复选。在运行时是只读的。

MultiSelect 属性值在 0 、 1 、 2 之间选择。MultiSelect 属性值 =0 :(缺省值)不允许复选。

MultiSelect 属性值 =1 :简单复选。鼠标单击或按下空格键,在列表中选中或取消选中项。使用箭头键移动焦点。MultiSelect 属性值 =2 :扩展复选。按下 SHIFT 并单击鼠标或按下 SHIFT 以及一个箭头键(上箭头、下箭头、左箭头、右箭头)将在以前选中项的基础上扩展选择到当前选中项。按下 CTRL 并单击鼠标在列表中选中或取消选中项。

Page 19: 7.1  显示图片和图形的控件

( 3 ) SelCount 属性SelCount 属性返回在列表框控件中被选中项的数量。

如果没有选项被选中,那么 SelCount 属性将返回 0 值。( 4 ) Style 属性Style 属性控制列表框的外观。Style 属性值 =0 :默认值,不带复选框,单击选项即可选中。Style 属性值 =1 :带复选框,必须在选项左边的复选框(小方框)中出现小对钩时才可选中。

列表框名 .Selected(<索引值 >) [= < 逻辑值 >]

Selected 属性值为一个逻辑数组,其中的每个元素对应列表中的一项,表示列表框控件中的一个项的选择状态。当数组元素值为 True时,对应项被选中,否则没有选中。在设计时不可用。 Selected 属性的语法为:

( 2 ) Selected 属性

Page 20: 7.1  显示图片和图形的控件

3. 组合框特有的重要属性• 对于组合框控件, Style 属性值可以为 0 , 1 和 2 。• Style 属性值 =0 :缺省值,此时组合框称为下拉式组合

框。包括一个下拉式列表和一个文本框。只有在单击文本框右边的下拉按钮时才可见下拉式列表框。可以从列表选择或在文本框中输入。

• Style 属性值 =1 :此时组合框称为简单组合框。包括一个文本框(文本框的右边无下拉按钮)和一个不能下拉的列表框。可以从列表中选择或在文本框中输入用户的选择(可以是列表中没有的内容)。

• Style 属性值 =2 :此时组合框称为下拉式列表框。这种样式仅允许从下拉式列表中选择。

Page 21: 7.1  显示图片和图形的控件

4.列表框和组合框的常用方法( 1 ) AddItem 方法AddItem 方法用于将项目添加到列表框或组合框控件,其语法为:

<列表框 | 组合框 >.AddItem <项目字符串 >[ , <索引值 >]

( 2 ) Clear 方法Clear 方法用于清除列表框或组合框或系统剪贴板的内容。其语法为:

< 对象名 >.Clear

( 3 ) RemoveItem 方法

RemoveItem 方法用以从列表框或组合框中删除一项。其语法为:

< 对象名 >.RemoveItem <索引值 >

Page 22: 7.1  显示图片和图形的控件

5. 列表框和组合框的常用事件• 列表框和组合框的常用事件有 Click 事件、 DblClick 事件、

Dropdown 事件等。其中只有简单组合框( Style=1 )才能响应 Dbllick 事件。另外,下拉式组合框和简单组合框具有 Change 事件(在输入文本时响应事件)。在大多数情况下,都是在用户选择项目后,读取列表框或组合框的Text 属性。

Page 23: 7.1  显示图片和图形的控件

例 7-3:建立两个列表框,分别为可购商品列表框和顾客购物列表框。要求程序能够完成商品选购、撤消选购、添加新商品、删除现有商品、统计全部选购的商品价格等操作。( 1)界面设计如图 7-9所示,在窗体上添加的 2个框架、两个列表框、 5个命令按钮。除列表框外其余控件的 Caption属性见表 7-3。

表 7-3 控件属性

Frame1 Frame2 Command1

Command2

Command3

Command4

Command5

Caption 商品列表 购物列表 选购商品 撤消选购 添加商品 删除商品 价格统计

图 7-9 运行界面

Page 24: 7.1  显示图片和图形的控件

Private Sub Command1_Click() If List1.ListIndex <> -1 Then List1_DblClick ' 选中某个选项后,调用 List1_DblClick 事件End Sub

Private Sub Command2_Click() If List2.ListIndex <> -1 Then List2.RemoveItem List2.ListIndex ' 选中 List2 中某个选项后,将其

删除End Sub

Private Sub Command3_Click() newlist = InputBox("输入新商品 ") ' 从对话框中输入新商品名 List1.AddItem newlist ' 添加到 List1 中End Sub

Private Sub Command4_Click() If List1.ListIndex <> -1 Then List1.RemoveItem List1.ListIndex ' 选中 List1 中某个选项后,将其

删除End Sub

Private Sub List1_DblClick() ' 双击 List1 时给 List2列表框添加项目 Dim k%, yandn% k = 0 For i = 0 To List2.ListCount – 1 If List2.List(i) = List1.Text Then k = 1 ' 判断 List2列表框中是否已有选定项目 Next If k <> 1 Then List2.AddItem List1.Text ' List2 列表框中无选定项目则添加 Else yandn = MsgBox(" 是:重复,否:不重复 ", vbInformation + vbYesNo, " 重复输入 ") If yandn = 6 Then List2.AddItem List1.Text ' 同意重复选择时也可以添加 End IfEnd Sub

Page 25: 7.1  显示图片和图形的控件

例 7-4:将框架的应用实例进行改善,用列表框或组合框列出各电“ ”脑配件的选项供用户选择。用户每选择一项,将在 用户配置 组合

“ ”框中添加对应的选择项,单击 求总价 按钮将在 Picture1图片框中显示总价格。( 1)界面设计设计如图 7-10所示界面,有 9 “个框架, CPU” “ ”框架和 显示器 框架为列表框,其余为组合框。每个框架中有一个列表框或组合框,框架的 Capion属性值、列表框或组合框的名称相同,分别为各类配件的名称。列表框和组合框的种类见图示。(设计时组合框的 Text属性为相应组合框的名称)。

图 7-10 列表框和组合框的应用

Page 26: 7.1  显示图片和图形的控件

( 2 )编写事件过程代码Dim cpupri, dypri, hdpri, mbpri, grapri, mempri, cdpri, othpri, realpri As SingleDim mycpu!, mydy!, myhd!, mygra!, mymb!, mymem!, mycd!, myoth!

Private Sub Form_Load() cpupri = Array(1000, 1100, 1200, 1300, 1400) ' cpupri 为存放 CPU价格的数组 ' 同样用 Array 函数为其他存放各配件价格的数组 dypri 、 hdpri 、 mbpri 、 grapri 、

mempri 、 cdpri 赋值End Sub

Private Sub Command1_Click() 用户配置 .AddItem cpu.Text, 0: 用户配置 .AddItem 光驱 .Text 用户配置 .AddItem 内存 .Text: 用户配置 .AddItem 其他 .Text 用户配置 .AddItem 显卡 .Text: 用户配置 .AddItem 显示器 .Text 用户配置 .AddItem 硬盘 .Text: 用户配置 .AddItem 主板 .Text realpri = mycpu + mydy + myhd + mygra + mymb + mymem + mycd + myoth '

求总价格 Picture1.Print "总价 ="; realpriEnd Sub

Private Sub cpu_Click() mycpu = cpupri(cpu.ListIndex) ' mycpu存放所选择的 CPU价格End Sub

Page 27: 7.1  显示图片和图形的控件

7.4 滚动条与滑块• 滚动条( ScrollBar )和滑块( Slider )控件通常用来帮助观察数据或确定位置,同时也可以作为数据输入的工具。FlatScrollBar 控件是标准 Windows 滚动条( ScrollBar 控件)对鼠标敏感版本,它提供平面格式选项,也可以代替标准 Windows 的立体滚动条。使用滚动箭头和滚动框时,FlatScrollBar 能提供更强的交互性能。 FlatScrollBar 控件是 MSCOMCT2.OCX 文件中一组 ActiveX 控件的一部分。要在应用程序中使用 FlatScrollBar 控件,必须将MSCOMCT2.OCX 文件添加到工程。

Page 28: 7.1  显示图片和图形的控件

FlatScrollBar 控件的三种格式选项: ( 1)和 Internet Explorer 4.0 中的滚动条看起来一样的平面外观。滚动箭头和滚动条滑块都是对鼠标敏感的;当鼠标指针移动到它们上面并按下时,它们就会改变颜色。(参见图 7-11左 2)( 2)鼠标指针放在上面就变成立体的平面外观。当鼠标指针移动到滚动箭头和滚动条滑块上时,它们就会变成斜面。(参见图 7-11左 3)( 3 )和标准 Windows 的立体滚动条外观相同。立体模式没有鼠标敏感功能。参见图 7-11左 1)

使用 FlatScrollBar 可以禁用两个滚动箭头之一,这就给用户提供了基于程序中其它因素的附加反馈信息,以作为在特定方向上的滚动指示。图 7-11左边三个为 FlatScrollBar控件,第 4个为标准滚动条控件。

图 7-11 滚动条与滑快

Page 29: 7.1  显示图片和图形的控件

7.4.1 滚动条和滑块共有的重要属性

• 1. Value 属性 Value 属性表示滚动框在滚动条中的位置,用整数表示,其取值范围

为 -32768~32767 。• 2. Max 属性 Max 属性表示滚动条所能够代表的最大值,其取值范围为 -32768~327

67 。。• 3. Min 属性 Min 属性表示滚动条或滑块所能够代表的最小值,其取值范围为 -3276

8~32767 。• 4. SmallChange 属性 SmallChange 属性表示当用户单击滚动条两端箭头时,滚动框移动的

增量值。对滑块控件,可以用左、右箭头进行控制。。• 5. LargeChange 属性 LargeChange 属性表示当用户单击滚动条或滑块中的空白处时,滚动

框或滑快移动的增量值。对滑块控件,还可以用 PageUp 和 PageDown 键控制。

Page 30: 7.1  显示图片和图形的控件

7.4.2 FlatScrollBar 控件特有的重要属性

• Appearance 属性:• Appearance 属性用来设置滚动条的外观,并决定滚动条

是平面的、立体的,还是两者的组合。• Appearance=fsb3D (即 0 ):滚动条有标准 Windows

滚动条的立体外观。• Appearance=fsbFlat (即 1 ):缺省值, 滚动条是平面

的。• Appearance=fsbTrack3D (即 2 ):滚动条是平面的,当鼠标移动到滑块和箭头按钮上,它们就会变成立体的。

Page 31: 7.1  显示图片和图形的控件

7.4.3 滑块控件特有的重要属性• 1. TickStyle 属性 TickStyle 属性用来确定 Slider 控件上显示的刻度标记的样式和位置。可以

为 0~3四个值。• 2. TickFrequency 属性 TickFrequency 属性用来确定滑块控件刻度标记的频率,此频率与其范围有关。

• 3. TextPosition 属性 当用鼠标操作滑块控件时会出现当前刻度的提示文本, TextPosition 属性用

来确定显示提示文本相对于滑块的位置。 TextPosition 属性 =0 :文本显示在控件的上边或左边。 TextPosition 属性 =1 :文本显示在控件的下边或右边。• 4. SelLength 属性和 SelStart 属性 SelLength 属性表示滑块中选择出的范围长度。 SelStart 属性表示滑块中选择出的范围起点。 SelLength 和 SelStart 属性一起使用,可以在滑块上选择某一范围内的连续

数值。因此,可以在滑块上直观地模拟可能的取值范围。 SelLength 属性不能小于 0 , SelLength 与 SelStart 之和不能大于 Max

属性值。• 5. SelectRange 属性 SelectRange 属性决定滑块是否能够具有选择出的范围。

Page 32: 7.1  显示图片和图形的控件

7.4.4 滚动条和滑块的事件• 与滚动条有关的事件主要是 Scroll 和 Change 事件。只有拖动滚动框才响应 Scroll ,而通过单击滚动箭头或滚动条则不会发生 Scroll 事件。只要滚动框的位置发生改变,就触发 Change 事件。

Page 33: 7.1  显示图片和图形的控件

例 7-5:利用滚动条调整图片的大小,利用滑块调整字号。( 1)界面设计

图 7-14 滑块属性页

图 7-12 运行界面 图 7-13 滚动条属性页

Page 34: 7.1  显示图片和图形的控件

( 2 )编写事件过程代码Private Sub FlatScrollBar1_Change() Picture1.Height = FlatScrollBar1.Value*3 ' 图片的高度 = 滚动条的

值 ×3 Picture1.Width = FlatScrollBar1.Value*4 ' 图片的高度 = 滚动条的

值 ×4 FlatScrollBar1.Width = Picture1.Width ' 滚动条的跨度 = 图片框

的宽度 FlatScrollBar1.ToolTipText = " 图片尺寸 " & Picture1.Width & "*" & Picture1.Height

' 显示提示文本 Slider1.Top = Picture1.Top + Picture1.Height - Slider1.Height ' 滑块保持在图片

框内的底部 Slider1.Width = Picture1.WidthEnd Sub

Private Sub Slider1_Click() Label1.FontSize = Slider1.Value ' 文字大小随滑块值调整 Slider1.ToolTipText = "字号 " & Slider1.Value ' 显示提示文字End Sub

Page 35: 7.1  显示图片和图形的控件

7.5 计时器• 计时器( Timer )控件是在应用程序中用来处理按一定时间间隔( Interval )触发事件的控件。在运行时不可见。

• 计时器的属性不多,其重要的属性为 Interval 属性。• 计时器只有一个事件,即 Timer 事件。• 在 VB 中,可以用 Timer 函数获取系统时钟的时间。而 Timer

事件是 VB模拟实时计时器的事件,不能将两者混淆。• Timer 事件的一般语法格式为:• Private Sub < 计时器名称 >_Timer()• 只要 Timer 控件的 Enabled 属性被设置为 True 而且 Inter

val 属性值大于 0 ,则 Timer 事件以 Interval 属性值指定的时间间隔发生。

Page 36: 7.1  显示图片和图形的控件

例 7-6 :利用计时器实现气球升空。在窗体上添加两个图片框控件 Picture1~Picture2 ,两个计时器 Ti

mer1 、 Timer2 ,令 Interval1=10 , Interval1=20 ,在 Windows附件的“画图”程序中绘制几个气球,分别复制到两个图片框中。程序代码为:

Private Sub Timer1_Timer() Picture1.Top = Picture1.Top – 10 ' 气球上升 If Picture1.Top < 0 Then Picture1.Top = Form1.Height - Picture1.Height ' 气球 1 回到窗体下部 End IfEnd Sub

Private Sub Timer2_Timer() Picture2.Top = Picture2.Top – 10 ' 气球上升 If Picture2.Top < 0 Then Picture2.Top = Form1.Height - Picture2.Height ' 气球 2 回到窗体下部 End If

End Sub

Page 37: 7.1  显示图片和图形的控件

例 7-7:利用随机函数在文本框 Text1中输入小学生加减运算题,答案由用户在文本框 Text2中输入,每题解答时间为 10秒钟,总共答题时间为 60分钟。每题的限制时间采用倒计时,答题时间到,统计并显示总成绩。( 1)界面设计设计如图 7-15所示界面。除文本框外,其余各控件的属性见表 7-5。

Label1 Label2 Label3 Command1 Command2 Timer1

Caption = 当前剩余时间 总共用时 开始 (下一题 ) 结束 Interval=1000

表 7-5 控件属性

图 7-15 运行界面

Page 38: 7.1  显示图片和图形的控件

Dim n As Integer , k! ' k 为存放当前剩余时间的变量 Private Sub Command1_Click() ' “ 开始 / 下一题”按钮事件过程 Dim a!, b! ' 存放操作数 Static c! ' 存放正确答案 Command1.Caption = " 下一题 " ' 将“开始”变换为“下一题” If Val(Text2.Text) = c Then n = n + 10 ' 答案正确,加 10 分 Randomize a = CInt(100 * Rnd() + 1) : b = CInt(100 * Rnd() + 1) ' 随机产生操作数 If a > b Then Text1.Text = Str(a) & "-" & Str(b): c = a – b ' 减法运算 Else Text1.Text = Str(a) & "+" & Str(b) : c = a + b ' 加法运算 End If Text2.Enabled = True Text2.Text = "" : Text2.SetFocus ' 清空 Text2并将焦点定位在 Text2 上,以便输入答案 k = 0 Label2.Visible = TrueEnd Sub

Private Sub Command2_Click() ' “结束”按钮事件过程 If Text1<> "" And Text2.Text <> "" ThenCommand1_Click ' 防止漏判 Command1.Visible = False : Command2.Visible = False : Command3.Visible = False Timer1.Enabled = False ' 停止计时 Label3.Visible = False Label2.Caption = "你的得分是 " & n - 10 & " 分 " ' 显示成绩End Sub

Page 39: 7.1  显示图片和图形的控件

Private Sub Command3_Click() ' “ 暂停 /继续”事件过程 If Command3.Caption = "暂停 " Then Timer1.Enabled = False ' 暂停 Command3.Caption = "继续 " Else Timer1.Enabled = True ' 继续 Command3.Caption = "暂停 " End IfEnd Sub

Private Sub Timer1_Timer() Static m! ' 存放总用时 m = m + 1 : k = k + 1 Label3.Caption = "总共用时 " & Str(m) Label2.Caption = "当前剩余时间 " & Str(10 - k) ' 显示倒计时 If k = 10 Then Label2.Caption = " 时间到 " : Label2.Visible = False Text2.Enabled = False ' 当前时间到,禁止解答 k = 0 ' 重新计时 End If If m = 100 Then Command2_Click ' 总用时完,调用“结束”事件End Sub

Page 40: 7.1  显示图片和图形的控件

7.6 ProgressBar 控件• ProgressBar 控件通过从左到右用一些方块填充矩形来表

示一个较长操作的进度。因而可以监视操作完成的进度。 ProgressBar 控件位于 Microsoft Windows Common Control6.0部件中。

• ProgressBar 控件有一个行程和一个当前位置。行程代表该操作的整个持续时间。当前位置则代表应用程序在完成该操作过程时的进度。

• ProgressBar 控件的重要属性有 Max 属性、 Min 属性和 Value 属性。 Max 和 Min 属性设置了行程的界限。Value 属性则指明了在行程范围内的当前位置。由于使用方块来填充控件,因此所填充的数量只能是接近于 Value 属性的当前设置值。一般来讲,可以将 Max 设置为 100 ,Min 设置为 1 。此时 Value=50表示完成了 50% 的操作。

• 可以用 ProgressBar 控件的 Align 属性把它自动定位在窗体的顶部或底部。

Page 41: 7.1  显示图片和图形的控件

例 7-8 :数组 Wage(1 to 3000) 中存放某单位职工的工资,下面的程序为 Wage 数组进行初始化。程序中用一个名为 ProgressBar1 的 ProgressBar 控件,来显示初始化的进度。

Private Sub Form_Click() Print " 数组初始化 " Dim Counter As Single , wage(3000) As Integer ProgressBar1.Min = LBound(wage) : ProgressBar1.Max = UBound(wage) ProgressBar1.Visible = True : ProgressBar1.Value = ProgressBar1.Min For Counter = LBound(wage) To UBound(wage) wage(Counter) = Counter ' 设置数组中每项的初始值。 ProgressBar1.Value = Counter Next Counter ProgressBar1.Visible = False : ProgressBar1.Value = ProgressBar1.Min Form1.Caption = "初始化完毕 "End SubPrivate Sub Form_Load() ProgressBar1.Align = vbAlignBottom ' 将 ProgressBar1 控件定位在窗体底部 ProgressBar1.Visible = FalseEnd Sub

图 7-16 ProgressBar 控件应用实例

Page 42: 7.1  显示图片和图形的控件

7.7 UpDown 控件• UpDown 控件有一对上下箭头按钮,位于 Microsoft Windows C

ommon Control-2 6.0部件中,往往与其他控件捆绑在一起使用。单击时使诸如滚动位置或者关联的伙伴控件中的值增减。

建立 Updown 控件的伙伴控件的两种方法:( 1 )通过设置 AutoBuddy 属性, UpDown 控件将自动地将 Tab 键次序中前面的控件作为它的伙伴控件。如果 Tab 键次序中没有前面的控件, UpDown 控件则将 Tab 键次序中的下一个控件作为它的伙伴控件。( 2 )另一种设置伙伴控件的方法是使用 BuddyControl 属性。在设计时,一旦 AutoBuddy 属性或 BuddyControl 属性被设置,伙伴控件会自动地按其大小和位置与 UpDown 控件配对。 UpDown 控件可用 Alignment 属性决定它被放在伙伴控件的右面或左面。

Page 43: 7.1  显示图片和图形的控件

例 7-9:将 Text1文本框控件作为 Updown1控件的伙伴控件,要求单击向上箭头时, Text1中的文本字号增加,反之则减小。( 1)界面设计

( a )伙伴控件及其关联属性 ( b) Value、Min、Max、、Wrap、 Increment属性值图 7-17 Updown控件的属性页

在窗体上添加一个几乎充满整个窗体的文本框 Text1,在 Text1的右边添加一个Updown控件 Updown1。右键单击 Updown1,打开如图 7-17所示 Updown “控件的属性页对话框。单击 合

” “ ”作者 选项卡,在 合作者控件 (即伙伴控件)栏内输入 Text1 “(或者选中 自动”合作者 ,则自动在栏内输入 Text1 “ ” “),在 合作者属性 栏内选择 Text”(即运

行时 Text1中显示 Updown控件的 Value属性值)。

Page 44: 7.1  显示图片和图形的控件

( 2 )编写事件过程代码“合作者属性”只是与 Updown 控件关联的属性,这里与 Updown 控件关联

的属性为 Text1.text 。要达到程序要求,还应编写 Updown1_Change 事件代码如下:

Private Sub UpDown1_Change()Text1.FontSize = UpDown1.ValueEnd Sub

图 7-18 Updown 控件应用程序运行界面

Page 45: 7.1  显示图片和图形的控件

7.8 Animation 控件• Animation 控件用来显示无声的视频动画,只能播放无声的视频文

件( AVI 文件)。 Animation 控件位于 Microsoft Windows Common Control-2 6.0部件中。

• AVI 动画类似于电影,由若干帧位图组成。虽然 AVI 动画可以有声音,但这样的动画不能在 Animation 控件中使用,如果试图装载这样的文件将会产生错误(错误号 32767 )。要播放有声的 .avi 文件,可以使用 Multimedia (MCI) 控件。

• 在运行时, Animation 控件不具有自己的图文框。• Animation 控件的四个重要的方法: Open 、 Play 、 Stop 和 Clos

e 方法。在使用该控件时,可用 Open 方法打开 .avi 文件,用 Play 方法进行播放,用 Stop 方法停止播放。在动画播放完毕以后,可用 Close 方法关闭该文件。在打开新文件之前不必关闭旧文件。

• Play 方法有三个参数,即 repeat 、 start 和 stop ,它们决定文件被播放多少遍,从哪一帧开始播放,到哪一帧停止。

• 如果没有提供 repeat 参数,文件将被连续播放。

Page 46: 7.1  显示图片和图形的控件

例 7-10:利用 Animation 控件和 CommonDialog 控件播放 AVI文件。( 1)界面设计

图 7-19 DlgOpen控件的属性页

( 2)编写事件过程代码Private Sub cmdPlay_Click() dlgOpen.ShowOpen anmAvi.Open dlgOpen.FileName anmAVI.PlayEnd Sub“ ”停止 事件过程代码:Private Sub cmdStop_Click() anmAVI.StopEnd Sub

图 7-20 运行界面

Page 47: 7.1  显示图片和图形的控件

7.9 SSTab 控件• SSTab 控件提供了一组选项卡,每个选项卡都可作为其它控件

的容器。在控件中,同一时刻只有一个选项卡是活动的,这个选项卡向用户显示它本身所包含的控件而隐藏其它选项卡中的控件。 SSTab 控件位于 Mirosoft Tabbed Dialog Control 6.0 中。

• SSTab 控件的属性可以在其属性页中进行设置,其重要属性及其作用为:

• Tabs :决定选项卡的数目。• TabsPerRow :每一行选项卡数。• Style :决定选项卡的样式。• 为了使用 SSTab 控件,必须首先决定怎样组织放置到不同选项卡中的控件。设置 Tabs 和 TabsPerRow 属性来创建选项卡,并把它们组织到各行中 (通常只有一行 ) 。然后在设计时通过单击每个选项卡来选择它。对每个选项卡,在用户选定该选项卡时希望显示控件,所以要将这些控件绘制出来。按照要求,设置 Caption 、 Picture 、 TabHeight 和 TabMaxWidth 属性,由此定制选项卡的顶部。

Page 48: 7.1  显示图片和图形的控件

例 7-11:使用 SSTab控件,每个选项卡上绘制一个列表框显示各类配件的可供商品名称。实现例 7-4的功能。( 1)界面设计在窗体上绘制一个 SSTab控件,右键单击该控件,打开如图 7-21所示属性页。设置选项卡数为 7,每行选项卡数为 7(即全部在一行上),为每一个选项卡设置标题。在每一个选项卡上添加一个列表框,设置列表框的 List属性(即输入各类配件所有选项)。绘制一个 Picture控件显示配件及总价格。( 2)编写事件过程代码(略)事件过程代码与实例 7-5类似。程序运行情况参见图 7-22和图 7-23(删除了Picture控件)。

图 7-21 SSTab控件属性页

图 7-23 “ ”主板 选项卡图 7-22 “CUP” 选项卡

Page 49: 7.1  显示图片和图形的控件

7.10.1 鼠标器7.10 鼠标器和键盘

由用户操作鼠标所引起的、能够被 VB各种对象识别的事件即为鼠标事件。常用的鼠标事件有单击( Click )、双击( DblClick )、按下任意键( MouseDown )、释放任意键( MouseUp )、移动鼠标( MouseMove )等。鼠标事件的语法结构基本相同,下面以窗体上发生的 MouseMove为例进行说明。Private Sub < 对象名 >_MouseMove([index As Integer , ] button As Integer , shift As Integer , x As Single , y As Single)

1. 鼠标事件

2. 鼠标光标形状鼠标光标的形状由对象的 MousePointer 属性确定,具体值可在属性窗口了解或参考 VB帮助文件。

Page 50: 7.1  显示图片和图形的控件

例 7-12:设计绘图程序。要求:单击鼠标左键开始绘制,按下左键并移动鼠标进行绘制,释放鼠标则停止绘制,然后在新的位置开始绘制。用鼠标右键可以绘制较粗的线条。在窗体的左下角显示当前坐标值。

图 7-24 鼠标事件实例

( 1 )界面设计

Page 51: 7.1  显示图片和图形的控件

( 2 )编写事件过程代码。Dim X0 As Integer ,Y0 As Integer ' X0 、 Y0存放新的图形的起点Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) Dim k As Integer k = k + 1 If k = 1 Then X0 = X: Y0 = Y : Line (X0, Y0)-(X, Y) ' 设置绘图起点 End IfEnd SubPrivate Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 1 Then Line -(X, Y) ' 按下鼠标左键时绘制图形 If Button = 2 Then Circle (X, Y), 25: Circle (X, Y), 30: Circle (X, Y), 35: Circle (X, Y), 40 ' 用绘制圆的方式绘制粗线条 Label1.Caption = Str(X) : Label2.Caption = Str(Y)End SubPrivate Sub Form_Resize() Label1.Top = Form1.ScaleTop + Form1.ScaleHeight - Label1.Height ' 标签位于窗体底部 Label2.Top = Form1.ScaleTop + Form1.ScaleHeight - Label2.HeightEnd Sub

Page 52: 7.1  显示图片和图形的控件

1. KeyPress 事件• 当用户按下和松开一个 ANSI 键时发生 KeyPress 事件。 ANSI 键包括数字、

大小字母、 Enter 、 Backspace 、 Esc 、 Tab等键。方向键不会产生 KeyPress 事件。

• KeyPress 事件过程的语法为:• Private Sub Form_KeyPress(keyascii As Integer)• Private Sub < 对象名 >_KeyPress([index As Integer , ]keyascii As Integer)

2. KeyDown 和 KeyUP 事件当一个对象具有焦点时按下 ( KeyDown ) 或松开 ( KeyUp ) 一个键时发生 KeyDown 和 KeyUP 事件。其语法为:Private Sub Form_KeyDown(keycode As Integer , shift As Integer)Private Sub < 控件名 >_KeyDown([index As Integer , ]keycode As Integer, , shift As Integer)Private Sub Form_KeyUp(keycode As Integer, shift As Integer)Private Sub < 控件名 >_KeyUp([index As Integer , ]keycode As Integer , shift As Integer)

7.10.2 键盘

Page 53: 7.1  显示图片和图形的控件

例 7-13:编写一个简易的指法练习程序。要求,最大时限 1分钟。( 1)界面设计

( 2)编写代码Dim n As Integer, m As Integer ' n存放正确的击键数 ,m存放总击键数Private Sub Command1_Click() If Command1.Caption = " 开始 " Then Timer1.Enabled = True: Timer2.Enabled = True : Command1.Caption = "结束 " ' 开始练习 Else Timer1.Enabled = False :Timer2.Enabled = False ' 结束练习 If m > 0 Then Print "正确率为: " & n / m * 100 & "%" Print " 击键次数: "; m & " 次 " End IfEnd Sub

图 7-25 指法测试程序界面

Page 54: 7.1  显示图片和图形的控件

Private Sub Form_KeyPress(KeyAscii As Integer) m = m + 1 ' 总击键数增 1 If Chr(KeyAscii) = Label1.Caption Then Label1.Caption = "": n = n + 1 ' 击键正确,正确击键数

增 1 If Chr(KeyAscii) = Label2.Caption Then Label2.Caption = "": n = n + 1 ' 并清空标签 If Chr(KeyAscii) = Label3.Caption Then Label3.Caption = "": n = n + 1End SubPrivate Sub Timer1_Timer() Randomize If Label1.Caption = "" Then ' 击键正确后产生新字符并将标签移到窗体底部 ,随机产生小写的英文

字母 Label1.Top = Form1.Height - Label1.Height : Label1.Caption = Chr(CInt(Rnd * 26 + 97)) Else Label1.Top = Label1.Top - 10 End If If Label2.Caption = "" Then Label2.Top = Form1.Height - Label2.Height : Label2.Caption = Chr(CInt(Rnd * 26 + 97)) Else Label2.Top = Label2.Top - 10 End If If Label3.Caption = "" Then Label3.Top = Form1.Height - Label3.Height : Label3.Caption = Chr(CInt(Rnd * 26 + 97)) Else Label3.Top = Label3.Top - 10 End If If Label1.Top <= 0 Then Label1.Top = Form1.Height - Label1.Height ' 标签移动到窗体顶部后 If Label2.Top <= 0 Then Label2.Top = Form1.Height - Label2.Height ' 重新回到底部 If Label3.Top <= 0 Then Label3.Top = Form1.Height - Label3.HeightEnd SubPrivate Sub Timer2_Timer() Command1_Click ' 时限到,调用“结束”事件过程End Sub

Page 55: 7.1  显示图片和图形的控件

7.10.3 拖放• 拖放( drag and drop )是一种将一个对象(称为源对

象)拖到另一个对象(称为目标对象)上执行某种操作的功能。要拖动一个对象,可单击该对象,按住鼠标键,然后移到指定的新位置释放鼠标放下对象。

Page 56: 7.1  显示图片和图形的控件

1. DragMode 属性拖放的形式有两种, DragMode 属性为 1 时为自动拖放, DragMode 属性为 0 时为手工拖放。2. DragIcon 属性DragIcon 属性用于改变拖动图标。拖动控件时, Visual Basic 将控件的灰色轮廓作为缺省的拖动图标。对 DragIcon 属性进行设置,就可用其它图象代替该轮廓。设置 DragIcon 属性的最简单方法就是使用属性窗口。 3. Drag 方法采用手动拖放方式时,必须使用 Drag 方法来启动拖动操作。不过,在自动拖放方式下,也可以使用 Drag 方法。Drag 方法的语法为:[ 对象名 .]Drag [action]

Page 57: 7.1  显示图片和图形的控件

例 7-14:将图片框控件拖放到准确的位置。( 1)界面设计在新建工程的 Form1窗体上添加一个图片框控件 Picture1,任意设置一个 Picture属性值。将 Picture1的 DragMode设置为 1。( 2)编写代码

( a )拖放前 ( b)拖放到任意位置 图 7-26 拖放图片Dim X0 As Single ,Y0 As SinglePrivate Sub Form_DragDrop(Source As Control, X As Single, Y As Single) Source.Move (X - X0), (Y - Y0)End SubPrivate Sub Label1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Sing

le) Label1.Drag 1 ' 启动控件拖放 X0 = X : Y0 = YEnd Sub

Page 58: 7.1  显示图片和图形的控件

4. DragDrop 事件和 DragOver 事件• 在拖动对象经过某个对象时,该对象发生 DragOver 事件,拖动

对象并在某个对象上释放鼠标按钮时,该对象发生 DragDrop 事件。可用多种方法响应 DragDrop 事件和 DragOver 事件。 DragDrop 事件和 DragOver 事件的语法为

• Private Sub < 对象名 >_DragDrop(Source As Control , X As Single , Y As Single)

• Private Sub < 对象名 >_DragOver(Source As Control , X As Single , Y As Single , State As Integer)

Page 59: 7.1  显示图片和图形的控件

例 7-15:下面的程序将控件拖动到 Picture2图片框控件上时,判断拖动的控件类型,如果是图片框,则将其图片在 Picture2上显示,并在窗体的标题内显示拖动控件的类型。当拖离 Picture2时,清除Picture2 “中的图片,恢复窗体标题栏的名称(设计时窗体标题为 拖

”放 )。参见图 7-27。Private Sub Picture2_DragOver(Source As Control, X As Single, Y As Single, State

As Integer) If TypeOf Source Is Picture Then Picture2.Picture = Source.Picture If State = 1 Then Form1.Caption = "拖放 " : Picture2.Picture = LoadPicture() Else Form1.Caption = "这是 " & TypeName(Source) & "控件 " End IfEnd Sub

图 7-27 拖放实例

Page 60: 7.1  显示图片和图形的控件

5. Parent 属性• 控件作为参数 Source传递给过程后, Source就继承了控件的

的属性和方法,包括控件的 Parent 属性,即控件所在窗体,因而可以对控件所在窗体进行各种操作。

如上面的程序中的语句:Form1.Caption = "拖放 "Form1.Caption = " 这是 " & TypeName(Source) & " 控件 "可以改为:Source.Parent.Caption = "拖放 "Source.Parent.Caption = " 这是 " & TypeName(Source) & " 控

件 "

Page 61: 7.1  显示图片和图形的控件

例 7-16:跳棋游戏。如图 7-28所示,红绿两种颜色的棋子(每种棋子数量相等,可以同时增减),要经过空格(白格)交换位置,当不同颜色的两个棋子相邻时,可以通过相邻的棋子跳到空格上,用最少步数完成交换者胜。编程实现行棋过程。

Private Sub Label1_DragDrop(Index As Integer, Source As Control, X As Single, Y As Single) If Label1(Index).BackColor = &HFFFFFF Then ' 控件为白色吗? If Abs(Source.Index - Index) = 2 And Label1((Index + Source.Index) / 2).BackColor <> Source.Back

Color Then '被拖放的控件与发生 DragDrop 事件过程的控件相隔一个控件,且与相隔控件不同色 a = Label1(Index).BackColor Label1(Index).BackColor = Source.BackColor Source.BackColor = aEnd IfIf Abs(Source.Index - Index) = 1 Then '被拖放的控件与发生 DragDrop 事件过程的控件相邻 a = Label1(Index).BackColorLabel1(Index).BackColor = Source.BackColorSource.BackColor = aEnd IfEnd IfEnd Sub

( a )移动前 ( b )移动图 7-28 跳棋游戏

Page 62: 7.1  显示图片和图形的控件

7.10.4 OLE拖放使用拖放可以将控件移动到其他地方。而采用 OLE拖放,则可以将数据从一个控件或应用程序移动到另外的控件或应用程序中,如将写字板中的文本拖动到文本框中。

Page 63: 7.1  显示图片和图形的控件

实例 7-17:下面的程序实现如下功能(参见图 7-30):将Word中的文本采用拖动的方法复制到中间文本框中;将文本框的内容逐行拖放到左边 List1列表框中;将文本框的内容一次拖放到下边的 List2列表框中;将下边 List2列表框的内容拖放到右边的 Label1标签上。( 1)界面设计( 2)编写代码 Private Sub List1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer,

Shift As Integer, X As Single, Y As Single) List1.AddItem Data.GetData(vbCFText) ' 系统将拖出的数据放在 Data 对象中,

利用 Data 对象的 GetData 方法获取其中的文本数据,利用 List1 控件的 AddItem 方法将数据添加到其 List 属性中

End SubPrivate Sub List2_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer,

Shift As Integer, X As Single, Y As Single) List2.AddItem Data.GetData(vbCFText)End Sub Private Sub Label1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer,

Shift As Integer, X As Single, Y As Single) Label1.Caption = Data.GetData(vbCFText)End Sub

Page 64: 7.1  显示图片和图形的控件

图 7-29 OLE拖放实例

Page 65: 7.1  显示图片和图形的控件

例 7-18:下面的程序使用手动方式从Windows “ ”的 我的电脑 中选择一个文件或文件夹拖动到窗体上,在窗体上显示文件或文件夹名。

Private Sub form_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)

Print Data.Files(1)End Sub程序运行实例参见图 7-30。

图 7-30 OLE拖放