29
14.1 制制 ActiveX 制制 14.2 制制制制制制制制制制制制 制 14 制 ActiveX 制制 制制 ActiveX 制制制制 ActiveX 制制制制制 制制制制制制制制制制制 制制制制制制制制制 、一、 制制制制制 制制制制 web 制制制制制制制制制制 OLE 制制制制制制制制制制制制ActiveX 制制制制制 制制制制制制制制制制制制制制制制制制制制 制制制制制制 制 一一。 VB 制制制制 ActiveX 制 制制制制ActiveX 制制ActiveX 制制ActiveX DLL 制 Act iveX EXE 制

14.1 制作 ActiveX 控件

Embed Size (px)

DESCRIPTION

第 14 章 ActiveX 部件. ActiveX 部件是由 ActiveX 技术创建的、一个或多个对象所组成的、可以重复使用的编程代码和数据,是定义从 web 页面到对象链接与嵌入 OLE 控件的所有内容的核心术语, ActiveX 技术提供了一种把所有其他使网络生动起来的技术粘合在一起的粘合剂。在 VB 中使用的 ActiveX 部件有四种: ActiveX 控件、 ActiveX 文档、 ActiveX DLL 和 ActiveX EXE 。. 14.1 制作 ActiveX 控件. 14.2 使用其他应用程序中的对象. 退出. - PowerPoint PPT Presentation

Citation preview

14.1 制作 ActiveX 控件

14.2 使用其他应用程序中的对象

第 14 章 ActiveX 部件

退出

ActiveX 部件是由 ActiveX 技术创建的、一个或多个对象所组成的、可以重复使用的编程代码和数据,是定义从 web 页面到对象链接与嵌入 OLE 控件的所有内容的核心术语, ActiveX 技术提供了一种把所有其他使网络生动起来的技术粘合在一起的粘合剂。在 VB 中使用的 ActiveX 部件有四种: ActiveX 控件、 ActiveX 文档、 ActiveX DLL 和 ActiveX EXE 。

14.1.1 ActiveX 控件的制作过程( 1 )新建工程时选择新建“ ActiveX 控件”,打开如图 14-1 所示的 UserControl 对象的设计控件界面。( 2 )在 UserControl1 对象上添加可能得到的各种对象。

( 3 )编写程序代码。( 4 )参考类的创建,为控件添加属性、事件和方法。( 5 )如果需要,可以为控件建立属性页。( 6 )建立一个标准的 EXE 工程测试所建立的 ActiveX 控件。

( 7 )编译成 OCX 文件发布。

14.1 制作 ActiveX 控件

图 14-1 ActiveX 控件的设计窗口

下面以建立一个“图片浏览器”控件为实例,说明 ActiveX 控件的制作过程。图片浏览器控件由驱动器列表框、目录列表框、文件列表框和图片框四个控件组成。1 、新建 ActiveX 控件工程单击“文件”菜单中的“新建工程”,打开“新建”对话框,双击“ ActiveX 控件”,弹出如图 14-1 所示 ActiveX 控件的设计窗口。根据需要将工程名称换名,如改为“ AcdSystem” ,则“ AcdSystem” 就是在“部件”对话框中显示的新的 ActiveX 控件的名称。在“ AcdSystem” 工程的设计窗口有一个 UserControl1 对象,其功能类似于标准 EXE 工程的窗体,是 ActiveX 控件的设计平台,可以在其中添加各种已有对象以及编写事件过程。通过单击“工程”菜单中的“添加用户控件”可以在一个 ActiveX 控件工程中制作多个 ActiveX 控件,这样在生成的 OCX 文件中就有多个 ActiveX 控件。

• 表 14-1 UserControl1 对象的主要属性属 性 说 明PropertyPages 回或设置字符串,该字符串是与控件关联的属性页的名称Public 决定控件是否可以由其他应用程序共享InvisibleAtRuntime 决定控件是否可以在运行时可见ToolboxBitmap 设置控件在工具箱中的图案

• 表 14-2 UserControl1 对象的主要事件事 件 说 明Initialize 当控件被建立时触发Terminate 当控件被从内存删除时触发InitProperties 创建对象的新实例时,发生该事件,一般在该事件过程中设置界面属性的初始值ReadProperties 当加载具有保存状态的对象的旧实例时,发生该事件WriteProperties 当保存对象的实例时,发生该事件。该事件通知对象此时需要保存对象的状态,以便将来可恢复该状态。大多数情况下,对象的状态仅包括属性值EnterFocus 当焦点进入控件时,发生该事件ExitFocus 当焦点离开控件时,发生该事件

2. 设计 ActiveX 控件界面按图 14-2 设计界面,即添加四个控件:驱动器列表框 Drive1 、目录列表框 Dir1 、文件列表框 File1 和图片框 Picture1 ,将 UserControl1 对象的 Name 属性设置为 ACDSee ,以后在其他窗体上添加该控件时,控件的默认名称将以 ACDSee 开头。如需要可以为 UserControl1 对象的 ToolboxBitmap 属性任意指定一个图形文件。

图 14-2 “ ”图片浏览器 控件

3. 编写代码Private Sub Drive1_Change() ' 当在驱动器列表框选择新的驱动器时 Dir1.Path = Drive1.Drive ' 目录列表框的路径改变End SubPrivate Sub Dir1_Change() ' 目录列表框的路径改变时 File1.Path = Dir1.Path ' 文件列表框的路径改变End SubPrivate Sub Combo1_Click() File1.Pattern = Trim(Right(Combo1.Text, 5)) ' 文件类型为列表框的后 5 个字符End SubPrivate Sub File1_Click() Picture1.Picture = LoadPicture(File1.Path + "\" + File1.FileName)End SubPrivate Sub UserControl_Initialize() File1.Pattern = "*.bmp;*.tif;*.tiff;*.jmp;*.jpg;*.jpeg;*.gif" End Sub

4.建立测试工程( 1 “ ” “ ”)单击 文件 菜单中的 新建工程 ,新建一个标准 EXE工程,将新建的工程改名为 TextAcdPRJ。( 2 “ ” “)单击 工程资源管理器 中的 TextAcdPRJ”工程名称,在弹出“ ”的快捷菜单中选择 设置为启动 ,将 TextAcdPRJ工程设置为启动工程。参见图 14-3。( 3)必须关闭 ActiveX 控件设计窗口,才能在工具箱中可以看到如图 14-4所示新建的 ActiveX 控件图标(右下角),这样才能在测试窗口添加该 ActiveX 控件。( 4)在 TextAcdPRJ工程的窗口添加 ACDSee控件,可以将该控件的默认名称 ACDSee1改为 TestACDSee。此时如果打开 ACDSee控件的设计窗口,意味着 ACDSee控件处于设计阶段, TextAcdPRJ工程的窗口将布满斜线,参见图 14-5。

图 14-3 设置启动窗体 图 14-4 ACDSee 控件图标 图 14-5 布满斜线的测试窗体

5. 为控件添加事件对使用 ActiveX 控件的用户来说,其中的 UserControl1 对象和该对象上的子控件的事件、属性是不可见的,而 ActiveX 控件的事件和属性对用户是可见的。 VB 自动为 ActiveX 控件提供了 GotFocus 、 LostFocus 、 DragDrop 、 DragOver 和 Validate 事件。另外,ActiveX 控件的设计者可以为 ActiveX 控件自定义事件。以为 ACDSee 控件设计一个 PictureDblClick 事件为例(该事件在双击 ACDSee 对象上的图片框时发生),说明自定义事件的过程。( 1 )声明事件打开 ACDSee 控件的设计窗口,在代码窗口的通用声明部分加上如下声明:Event PictureDblClick()( 2 )在 ACDSee 对象上的图片框双击事件过程中适当位置加上触发事件的代码:Private Sub Picture1_DblClick() '...... 其他代码 RaiseEvent PictureDblClickEnd Sub这样,关闭 ACDSee 控件设计窗口后,在测试窗口的 TestACDSee 控件的事件组合框中可以看到 PictureDblClick 事件,根据需要,可以在其中加上所需事件代码,如:Private Sub TestACDSee_PictureDblClick() Myanswer = MsgBox(" 你想放大图片吗? ", vbYesNoCancel)End Sub

6.为控件添加属性如为控件增加 Drive属性的步骤为:( 1)打开 ActiveX 控件设计窗口的代码窗口。( 2 “ ” “ ” “ ” “)单击 工具 菜单中的 添加过程 ,打开 添加过程 对话框,输入属性名 Drive”“ ” “ ”,过程类型为 属性 ,范围为 公有的 。这样, VB立即提供如下两个过程模板:

Public Property Get Drive() As VariantEnd PropertyPublic Property Let Drive(ByVal vNewValue As Variant)End Property在这两个过程中添加所需代码:Public Property Get Drive() As StringDrive = Drive1.DriveEnd PropertyPublic Property Let Drive(ByVal New_Drive As String)Drive1.Drive = New_DriveEnd Property这样,就将 UserControl对象子控件 Drive1的 Drive属性显露出来,关闭 ActiveX 控件设计窗口,在属性窗口可以看到 Drive属性,参见图 14-6( Drive “的默认值设置为 c:”。在程序运行时,在驱动器列表中选择的驱动器就是 ActiveX 控件的 Drive属性值。

采用类似的方法可以将 UserControl对象子控件 Dir1的 Path属性和子控件 File1的 FileName属性显露出来。参见图 14-6(已将 Path“的默认值设置为 c:\ ”效果图 )。

图 14-6 ActiveX 控件的属性

7. 保存属性值在 UserControl 对象中有三个与属性访问密切相关的事件: InitProperties 事件、 ReadProperties 事件和 WriteProperties 事件。属性保存在称为“属性包”、类型为 PropertyBag 的对象中,可以通过调用“属性包”的WriteProperties 方法和 ReadProperties 方法来保存和读取属性值。如读取 Drive 、 Path 、 FileName 属性的过程代码为:Private Sub UserControl_ReadProperties(PropBag As PropertyBag) Drive1.Drive = PropBag.ReadProperty("Drive", "c:") Dir1.Path = PropBag.ReadProperty("Path", "c:\效果图 ") File1.FileName = PropBag.ReadProperty("FileName", "")End Sub保存 Drive 、 Path 、 FileName 属性的过程代码为:Private Sub UserControl_WriteProperties(PropBag As PropertyBag) Call PropBag.WriteProperty("Drive", Drive1.Drive) Call PropBag.WriteProperty("Path", Dir1.Path) Call PropBag.WriteProperty("FileName", File1.FileName)End Sub虽然在 WriteProperties 事件中加上了保存属性的代码,但WriteProperties 事件并不知道属性值何时发生了改变,可以调用 PropertyChanged 方法来通知 VB 控件的某个属性值发生了改变,然后通知 WriteProperties 事件保存新的属性值。如:Public Property Let Drive(ByVal New_Drive As String) Drive1.Drive = New_Drive PropertyChanged "Drive"End Property

8. 设计属性页下面以为 AcdSee 控件建立 MyPropertiesPage 属性页为例,说明建立新属性页的步骤:( 1 )按照前面的介绍为 AcdSee 控件添加新的属性,这些属性要对应到新的属性页 MyPropertiesPage 中。这里不添加新的属性,只将现有属性 Drive 、 Path对应到 MyPropertiesPage 属性页中。( 2 )单击“工程”菜单中的“添加属性页”,打开“添加属性页”对话框,可利用“ VB 属性页向导”方便地创建属性页,双击“ VB 属性页向导”打开“属性页向导”对话框。( 3 )单击“下一步”按钮,当出现图 14-9 所示对话框时,单击“添加”按钮,打开图 14-10 所示“属性页名称”对话框,输入属性页名称“ MyPropertyPage” ,单击“确定”按钮返回。( 4 )单击“下一步”按钮,出现图 14-11 所示“属性页向导 - 添加属性”对话框,在“可用属性”框中显示可以在新的属性页中添加的属性名称,依次双击“ Drive” 和“ Path” ,将其添加到右边的“ MyPropertyPage” 属性页中。( 5 )单击“完成”按钮完成属性页的创建。此时在工程资源管理器窗口可以看到新的属性页图标。关闭控件设计窗口,在测试窗口打开控件的属性页,参见图 14-12 。

图 14-7 “ ” 连接属性页 窗口 图 14-8 标准属性页

图 14-9 添加属性页 图 14-10 输入属性页名称

图 14-11 添加属性 图 14-12 MyPropertyPage属性页

9. 发布 ActiveX 控件制作 ActiveX 控件的设计和测试完毕后,应发布 ActiveX 控件,以便在其他 VB 应用程序方便地使用。在控件设计窗口下单击“文件”菜单中的“生成 MyAcdSystem.ocx” ,即可生成相应的 OCX 文件以供发布。由于 VB 创建的 ActiveX 控件需要 VB 运行时的 DLL 文件以及 ActiveX 控件中子控件的支持文件,最好使用安装向导来生成 ActiveX 控件的安装程序,以确保发布所有必须的支持文件。

14.1.2 使用向导创建 ActiveX 控件步骤为:

( 1 )按照上面介绍的方法创建用户界面,编写用户代码。( 2 )选择“外界程序”菜单中的“外界程序管理器”,打开“外界程序管理器”对话框,选中“ VB 6 ActiveX 控件接口向导”,选中“加载行为”的“在启动中加载”项加载“ ActiveX 控件接口向导”。( 3 )选择“外界程序”菜单中的“ ActiveX 控件接口向导”,开始运行 ActiveX 控件接口向导。在图 14-13 中将“可用名称”中的 Drive 、 Path 和 FileName 属性移到右边的“选定名称”中。单击图 14-14 中的“新建”按钮,打开“添加自定义成员”对话框,输入所要自定义事件的名称 PictureDblClick ,选中“事件”类型。

图 14-13 “ ” 选定接口成员 对话框 图 14-14 “ ”创建自定义接口成员 对话框

在图 14-15 所示“设置映射”对话框中,在“公有名称”栏内依次选择需要映射到控件的成员(属性、事件或方法),然后在“映射”栏内选择映射到的控件和控件的成员。如将 PictureDblClick 事件映射到 Picture1 的 DblClick 双击事件。如果存在没有设置映射关系去的成员,则单击“下一步”按钮时会出现“设置属性”对话框,要求用户设置属性值。图 14-16 中的“ TestProperty” 属性即在图 14-14 中添加的属性,没有设置映射对象,在该对话框可以为其设置属性默认值。

图 14-15 “ ” 设置映射属性 对话框 图 14-16“ ”设置属性 对话框

下面以引用 Microsoft Word 对象库为例说明在 VB 中使用外部应用程序中的对象的步骤为:( 1 )单击“工程 | 引用”,打开如图 14-15 所示的“引用”对话框,设置对要使用的对象所在的对象库的引用,即选中“ Microsoft Word 10.0 Object Library” 。( 2 )使用下列方法之一创建新的对象1 )使用 New 关键字Dim MynewDocument As New Document ' 定义对象变量并创建新的 Word 文档2 )使用 CreateObject函数Dim MynewDocument As ObjectSet MynewDocument = CreateObject("word.application")3 )使用 GetObject函数获取其他应用程序中已经存在的对象Dim MynewDocument2 As ObjectSet MynewDocument2 = GetObject(("C:\aaa.doc"))( 3 )使用新创建的对象的属性、方法和事件编程( 4 )释放外部变量可以单击 F2 功能键打开对象浏览器来了解引用对象的属性、方法和事件。要了解某个成员,可以选中该属性后单击 F1 功能键打开“ Microsoft Visual Basic 参考”帮助文件。

14.2 使用其他应用程序中的对象

图 14-17 “ ”引用 对话框

• 表 14-3 Word Document 对象的常见属性和方法属性 说明 示例Range 属性 返回一个 Range 对象,该对象代表指定对象所含的部分文档 ActiveDocument.Paragraphs(1).Range.Style

= wdStyleHeading1

Text 属性 可用于 Range 或 Selection 对象,返回或设置指定区域或所选内容中的文本。 ActiveDocument. Range .Text = " 第一章 "

Visible 属性 决定是否显示对象或对象的格式 ActiveDocument.Application.Visible = True

Application 属性 返回一个 Application 对象,该对象代表 Microsoft Word 应用程序 ActiveDocument.Application.Visible = True

CheckSpelling 方法开始对指定的文档或区域进行拼写检查。如果该文档或区域中包含错误,则本方法显示“拼写和语法”对话框

ActiveDocument.Range.CheckSpelling

Close 方法 本示例在关闭活动文档前提示用户保存该文档 ActiveDocument.Close

Quit 方法 退出 Microsoft Word ,并可选择保存或传送打开的文档 ActiveDocument.Application.Quit

• 表 14-4 Word Application 对象的常见属性和方法属性 说明 示例或格式Documents 属性 返回一个 Documents 集合,该集合代表所有打开的文档 Documents.Open FileName:="C:\Files\Doc.doc", ReadOnly:=True

Add 方法 将一个新的空文档添加到一个已经打开的文档集合中 Documents.Add

Select 方法 选定指定对象 Documents.Add .Select

Visible 属性 决定是否显示对象或对象的格式 ActiveDocument.Application.Visible = True

ActiveDocument 属性 返回一个 Document 对象,该对象代表活动文档。如果没有打开的文档,就会导致出错 ActiveDocument.PrintOut

Shapes 属性 该属性返回 Shapes 集合,该集合代表指定文档、页眉或页脚中的所有 Shape 对象 Set myDoc = Documents.AddmyDoc.Shapes.AddShape msoShapeRectangle, 5, 25, 100, 50

AddTextEffect 方法 创建一个“艺术字”对象,并返回表示新的“艺术字”对象的形状对象 expression.AddTextEffect(PresetTextEffect, Text, FontName, FontSize, FontBold, FontItalic, Left, Top[, Anchor])

Selection 属性 返回一个 Selection 对象,该对象代表一选定的范围或插入点 If Selection.Type = wdSelectionNormal _Then MsgBox Selection.Text

ShapeRange 属性 该属性返回 ShapeRange 集合,该集合代表所选内容或区域中的所有 Shape 对象 selection.ShapeRange.Shadow.Type = msoShadow6

TextEffect 属性 该属性返回一个 TextEffectFormat 对象,该对象包含指定图形的文本效果格式属性PresetTextEffect 属性 返回或设置指定“艺术字”的样式Copy 方法 将指定对象拷贝到剪贴板 Selection.Copy

Quit 方法 退出 Microsoft Word ,并可选择保存或传送打开的文档 ActiveDocument.Application.Quit

说明:( 1 ) AddTextEffect 方法在 AddTextEffect 方法的语法格式中, expression 表达式返回一个 Shapes 对象。PresetTextEffect  预设的文本效果,为 MsoPresetTextEffect 常量,其值对应于“艺术字库”对话框中所列的格式。 Text 为“艺术字”中的文字。 Left  和 Top 分别 为“艺术字”图形左边缘和上边缘相对于锁定标记的位置,以磅为单位。 Anchor 为锁定标记。向文档添加“艺术字”时,“艺术字”的宽度和高度将根据指定文字的大小和数量自动地进行设置。例:在活动文档中添加包含文字“艺术字体”的“艺术字”,然后将该“艺术字”锁定到第一段。Private Sub NewTextEffect() ActiveDocument.Shapes.AddTextEffect PresetTextEffect:=msoTextEffect11, Text:=_"艺术字体 ", FontName:="Arial Black", FontSize:=36, FontBold:=msoTrue, _ FontItalic:=msoFalse, Left:=1, Top:=1, Anchor:=ActiveDocument.Paragraphs(1).RangeEnd Sub

( 2 ) Shapes 属性该属性返回 Shapes 集合,该集合代表指定文档、页眉或页脚中的所有 Shape 对象。该集合可以包含图形、形状、图片、 OLE 对象、 ActiveX 控件、文本对象和标注。Shapes 属性应用于文档时将返回文档正文中的所有 Shape 对象,不包括页眉和页脚。当 Shapes 属性应用于 HeaderFooter 对象时, Shapes 属性返回文档中所有页眉和页脚中的 Shape 对象。例:新建一篇文档,为其添加一个矩形,该矩形宽 150 磅,高 50 磅,并设置矩形的左上角距页面左边缘 10 磅,距页面左上角 25 磅。Set myDoc = Documents.AddmyDoc.Shapes.AddShape msoShapeRectangle, 10, 25, 150, 50( 3 ) TextEffect 属性该属性返回一个 TextEffectFormat 对象,该对象包含指定图形的文本效果格式属性。应用于代表“艺术字”的 Shape 或 ShapeRange 对象以及 InlineShape 对象。例: myDocument 文档中的图形 1 为“艺术字”,将图形 1 的字体样式设为粗体。Private Set myDocument = ActiveDocument With myDocument.Shapes(3)    If .Type = msoTextEffect Then   .TextEffect.FontBold = TrueEnd With

例 14-1 :下面的实例程序的功能是:单击“检查拼写错误”按钮时打开一个已有 Word 文件“ C:\TestVBWord.doc” ,并将文档复制到新建的另一个文档中,检查其中的拼写错误,如果存在拼写错误,则打开图 14-18 所示“拼写”对话框,关闭该对话框后返回应用程序界面。单击“创建艺术字”按钮时,启动另一个 Word 应用程序,在其中创建艺术字,并复制到窗口的图片框中。Dim myNewDocument1 As New Document ' 定义一个 Word Document 对象Private Sub Command1_Click() ' 单击“检查拼写错误”按钮 Dim myNewDocument2 As Object ' 定义一个对象变量 Set myNewDocument2 = GetObject(("C:\aaa.doc")) ' 设置对象变量的值为 Wor

d 文档 "C:\aaa.doc" myNewDocument1.Range.Text = myNewDocument2.Range.Text ' 将文档 "C:\a

aa.doc" 的内容复制到 myNewDocument1 ActiveDocument.Paragraphs(1).Range.Style = wdStyleHeading1 ' 将 myNewDo

cument1 中的第一段格式设置为“标题 1” myNewDocument1.Application.Visible = True ' 显示 myNewDocument1 界面 myNewDocument1.Range.CheckSpelling ' 开始拼写检查 AppActivate Caption ' 激活本应用程序End Sub

Private Sub Command2_Click() ' 单击“创建艺术字”按钮 Dim myNewWord As Object Set myNewWord = CreateObject("word.application") ' myNewWord 设置为 Word应用程序对象 myNewWord.Documents.Add.Select ' 选定 myNewWord 的文档中的内容 myNewWord.ActiveDocument.Shapes.AddTextEffect(15, "艺术设计 ", "华文彩云 ",

22#, -1, 0, 180, 50).Select ' 设置艺术字体 myNewWord.Selection.ShapeRange.TextEffect.FontName = "华文彩云 " ' 重置艺术字字体 myNewWord.Selection.ShapeRange.TextEffect.PresetTextEffect = 6 ' 重置艺术字样式 myNewWord.Visible = True ' 显示应用程序界面 myNewWord.Selection.Copy ' 复制艺术字至剪贴板 Picture1 = Clipboard.GetData() ' 将艺术字粘贴到图片框中End SubPrivate Sub Form_Unload(Cancel As Integer) ' 关闭应用程序窗口 Dim intResponse As Integer intResponse = MsgBox("Do you want to save all documents?", vbYesNo) ' 显示消息对话框 If intResponse = vbYes Then ' 退出 Word前以 Word格式保存文档 ActiveDocument.Application.Quit SaveChanges:=wdSaveChanges, OriginalForm

at:=wdWordDocument End IfEnd Sub

图 14-18 拼写对话框 图 14-19 “ ”单击 创建艺术字 按钮后的界面