1 / 29

14.1 制作 ActiveX 控件

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

Download Presentation

14.1 制作 ActiveX 控件

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

  2. 14.1 制作ActiveX 控件 14.1.1 ActiveX 控件的制作过程 (1)新建工程时选择新建“ActiveX 控件”,打开如图14-1所示的UserControl对象的设计控件界面。 (2)在UserControl1对象上添加可能得到的各种对象。 (3)编写程序代码。 (4)参考类的创建,为控件添加属性、事件和方法。 (5)如果需要,可以为控件建立属性页。 (6)建立一个标准的EXE工程测试所建立的ActiveX 控件。 (7)编译成OCX文件发布。

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

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

  5. 表14-1 UserControl1对象的主要属性

  6. 表14-2 UserControl1对象的主要事件

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

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

  9. 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。

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

  11. 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 PictureDblClick End Sub 这样,关闭ACDSee控件设计窗口后,在测试窗口的TestACDSee控件的事件组合框中可以看到PictureDblClick事件,根据需要,可以在其中加上所需事件代码,如: Private Sub TestACDSee_PictureDblClick() Myanswer = MsgBox("你想放大图片吗?", vbYesNoCancel) End Sub

  12. 6.为控件添加属性 如为控件增加Drive属性的步骤为: (1)打开ActiveX 控件设计窗口的代码窗口。 (2)单击“工具”菜单中的“添加过程”,打开“添加过程”对话框,输入属性名“Drive”,过程类型为“属性”,范围为“公有的”。 这样,VB立即提供如下两个过程模板: Public Property Get Drive() As Variant End Property Public Property Let Drive(ByVal vNewValue As Variant) End Property 在这两个过程中添加所需代码: Public Property Get Drive() As String Drive = Drive1.Drive End Property Public Property Let Drive(ByVal New_Drive As String) Drive1.Drive = New_Drive End Property 这样,就将UserControl对象子控件Drive1的Drive属性显露出来,关闭ActiveX 控件设计窗口,在属性窗口可以看到Drive属性,参见图14-6(Drive的默认值设置为“c:”。在程序运行时,在驱动器列表中选择的驱动器就是ActiveX 控件的Drive属性值。

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

  14. 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

  15. 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。

  16. 图14-7 “连接属性页”窗口 图14-8 标准属性页 图14-9 添加属性页 图14-10 输入属性页名称 图14-11 添加属性 图14-12 MyPropertyPage属性页

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

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

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

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

  21. 14.2 使用其他应用程序中的对象 下面以引用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 Object Set MynewDocument = CreateObject("word.application") 3)使用GetObject函数获取其他应用程序中已经存在的对象 Dim MynewDocument2 As Object Set MynewDocument2 = GetObject(("C:\aaa.doc")) (3)使用新创建的对象的属性、方法和事件编程 (4)释放外部变量 可以单击F2功能键打开对象浏览器来了解引用对象的属性、方法和事件。要了解某个成员,可以选中该属性后单击F1功能键打开“Microsoft Visual Basic参考”帮助文件。

  22. 图14-17 “引用”对话框

  23. 表14-3 Word Document对象的常见属性和方法

  24. 表14-4 Word Application对象的常见属性和方法

  25. 说明: (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).Range End Sub

  26. (2)Shapes 属性 该属性返回 Shapes 集合,该集合代表指定文档、页眉或页脚中的所有 Shape 对象。该集合可以包含图形、形状、图片、OLE 对象、ActiveX 控件、文本对象和标注。 Shapes 属性应用于文档时将返回文档正文中的所有 Shape 对象,不包括页眉和页脚。当 Shapes 属性应用于 HeaderFooter 对象时,Shapes 属性返回文档中所有页眉和页脚中的 Shape 对象。 例:新建一篇文档,为其添加一个矩形,该矩形宽 150 磅,高 50 磅,并设置矩形的左上角距页面左边缘 10 磅,距页面左上角 25 磅。 Set myDoc = Documents.Add myDoc.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 = True End With

  27. 例14-1:下面的实例程序的功能是:单击“检查拼写错误”按钮时打开一个已有Word文件“C:\TestVBWord.doc”,并将文档复制到新建的另一个文档中,检查其中的拼写错误,如果存在拼写错误,则打开图14-18所示“拼写”对话框,关闭该对话框后返回应用程序界面。单击“创建艺术字”按钮时,启动另一个Word应用程序,在其中创建艺术字,并复制到窗口的图片框中。例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")) ' 设置对象变量的值为Word文档"C:\aaa.doc" myNewDocument1.Range.Text = myNewDocument2.Range.Text ' 将文档"C:\aaa.doc"的内容复制到myNewDocument1 ActiveDocument.Paragraphs(1).Range.Style = wdStyleHeading1 ' 将myNewDocument1中的第一段格式设置为“标题1” myNewDocument1.Application.Visible = True ' 显示myNewDocument1界面 myNewDocument1.Range.CheckSpelling ' 开始拼写检查 AppActivate Caption ' 激活本应用程序 End Sub

  28. 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 Sub Private 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, OriginalFormat:=wdWordDocument End If End Sub

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

More Related