




文档简介
摘要I摘要1正文工业生产中经常遇到复杂的数据信息处理问题,需要大运算量的矩阵计算及对分析结果进行实时、直观的图形化显示。MATLAB是集数值分析、矩阵运算、信号处理和图形显示于一体的高性能数学软件,将其强大的计算功能与VB在图形用户界面开发方面的优势结合起来,实现应用系统的无缝集成,对于有效缩短开发周期、优化系统性能是十分有意义的,那将大大地提高编程者的工作效率。本文介绍在VB60中利用ACTIVEX自动化技术使用和操作MATLAB的方法。它以VB作为自动化控制器。MATLAB作为自动化服务器,在使用VB进行WINDOWS编程中,充分发挥MATLAB在系统分析。仿真等方面的优势。2关键词VISUALBASIC60MATLABACTIVEX自动化摘要IIABSTRACT1TEXTTHEPAPERDESCRIBESMAINLYABOUTUSETHETECHNOLOGYOFACTIVEXWHICHISINCLUDEDINVISUALBASIC60TOOPERATETHECALCULATINGENGINEOFMATLAB,MAKEMATLABRUNWITHTHEVBENVIROMENT,REALIZETHECOMBINEDDEVELOPMENTOFVBANDMATLAB2KEYWORDSVISUALBASIC60MATLABCOMBINEDDEVELOPMENT目录1目录前言1第1章绪论211综述212MATLAB被调用程序的发展状况213课题背景2131VISUALBASIC60背景2132MATLAB语言背景3133ACTIVEX控件背景414本文主要研究工作5第2章VISUALBASIC调用MATLAB程序的研究621VISUALBASIC调用MATLAB程序原理6211VISUALBASIC调用MATLAB程序的几种具体实现方法6212MATLAB语言与ACTIVEX技术722创建ACTIVEX控件的步骤8第3章VISUALBASIC借助ACTIVEX部件调用MATLAB的实现1331VISUALBASIC借助ACTIVEX部件调用MATLAB程序简介1332调用程序设计原理13321调用图13322ACTIVEX自动化图13323、创建和获取ACTIVEX自动化对象的过程15324MATLAB对象的一些属性和方法1533VISUALBASIC调用MATLAB程序功能介绍16331初始化界面介绍16332初始化界面实现17333调用程序界面介绍17334用户应用界面的初步实现1734毕业设计调用界面的实现2135调用MATLABE程序的实现2236调用程序的帮助23结论23致谢24附录26开题报告26中期报告28英文翻译281原文282翻译35附件44前言1前言MATLAB自1984年由美国MATHWORKS公司推向市场以来,已成为国际公认的最优秀的科技应用软件。它具有强大的数值、符号计算,离线和在线计算,矩阵计算能力,计算结果和编程可视化,界面友好,语言自然,是功能强大的计算辅助解决具体工程问题的标准软件。MICROSOFT公司推出的VISUALBASIC简称VB是目前被广泛使用的,开发应用程序的可视化开发工具。由于它功能强大,易学易用,越来越多的人将它作为开发WINDOWS应用程序的工具。工业生产中经常遇到复杂的数据信息处理问题,需要大运算量的矩阵计算及对分析结果进行实时、直观的图形化显示。MATLAB是集数值分析、矩阵运算、信号处理和图形显示于一体的高性能数学软件,将其强大的计算功能与VB在图形用户界面开发方面的优势结合起来,实现应用系统的无缝集成,对于有效缩短开发周期、优化系统性能是十分有意义的,那将大大地提高编程者的工作效率;为此,MATHWORKS公司为MATLAB提供了应用程序接口,允许MATLAB和其它应用程序进行数据交换,为在其它程序设计语言调用MATLAB高效算法提供了可能。绪论2第1章绪论11综述MATLAB自1984年由美国MATHWORKS公司推向市场以来,已成为国际公认的最优秀的科技应用软件。它具有强大的数值、符号计算,离线和在线计算,矩阵计算能力,计算结果和编程可视化,界面友好,语言自然,是功能强大的计算辅助解决具体工程问题的标准软件。MICROSOFT公司推出的VISUALBASIC简称VB是目前被广泛使用的,开发应用程序的可视化开发工具。由于它功能强大,易学易用,越来越多的人将它作为开发WINDOWS应用程序的工具。MATLAB也是支持ACTIVEX自动化技术的软件,能够被任何可作为ACTIVEX控件程序的MICROSOFTPROGRAMS所控制,利用这一特性,用户可以非常方便地在自已的程序中使用MATLAB,包括执行MATLAB命令,使用其功能丰富的工具箱TOOLBOX,向MATLAB输入数据,获取结果数据,图形。这样既能用VB编出漂亮的WINDOWS程序,又能同时获得MATLAB在工程辅助设计,仿真等方面的功能。本文主要介绍在VISUALBASIC60中如何调用出MATLAB程序。12MATLAB被调用程序的发展状况1借助ACTIVEX部件调用MATLAB2借助DDE技术调用MATLAB3通过M文件调用MATLAB4引入MATRIXVB调用MATLAB13课题背景131VISUALBASIC60背景1VISUALBASIC60概念VISUALBASIC60是微软公司推出的主流编程语言之一,是一种新型的计算机编程语言。它与传统的程序设计语言相比,最突出的特点是可视化、事件驱动和交互式。VISUALBASIC经过微软公司长期不断的完善、第三方资源的大量加入以及广大爱好者的大力支持,VISUALBASIC60已经成长为功能强大,使用人数西安工业学院学士学位论文3众多的主流编程软件。它提供了向导自动生成代码,支持拖放技术、属性检查、实施与法检查等内置自动化技术,大大降低了编写代码的工作量,同时它还提供极丰富的控件,使得VISUALBASIC60成为最简捷、最有效开发WINDOWS应用程序工具。2VISUALBASIC具体包含以下内容对象面向对象编程(OOP),虽然VISUALBASIC并不是完全的面向对象编程,但也利用了对象编程技术。对象简单地说就是大家经常看到的各种窗口、按钮、文本框甚至打印机等。属性如同电视有黑白、彩色之分一样,作为对象的WINDOWS中的窗口也是有大有小,文本框的位置不可能完全一样,菜单要显示出不同的功能,这些都是由对象的属性决定的。不同对象的属性可能不同。属性一般决定了对象的位置、大小、显示等情况。方法就是对象能够做的事,如打印机对象就有打印(PRINT)方法、窗口对象支持隐藏(HIDE)方法、很多对象支持移动(MOVE)方法等。事件就是对象对用户各种操作的反映情况。如用户用鼠标按一下按钮,就会触发按钮的“按”(CLICK)事件。控件控件就是VISUALBASIC提供的编程用的模块,与对象有直接的联系,如同积木的木块,使用这样的控件,就可以像拼图或堆积木一样“搭”、“拼”你的程序界面。VISUALBASIC中使用控件,简化了WINDOWS中的窗口、按钮等对象的编程设计。每个控件都有各自的属性、事件及方法。只需修改这些特征你就可以随心所欲地编程了。最重要的是,你可以利用成千上万的各种扩充的控件来快速构造几乎能满足你任何要求的程序。例如,如果你不满意WINDOWS简陋的媒体播放器,你就可以使用VB的多媒体控件在1小时以内设计一个完全自己风格的能够播放CD、VCD的多媒体播放器,而功能完全与之相当。3VISUALBASIC语言的特点(1)VB继承了BASIC简单易用的特点;(2)VB适用于WINDOWS环境下快速编程;(3)VB采用可视化技术,操作直观;(4)VB采用面向对象技术,没有复杂的程序流程;(5)VB编程模块化、事件化,程序由许多小程序组成;(6)可以使用大量的VISUALBASIC控件、模块简化编程;(7)VB可以调用WINDOWS中的API函数及DLL库;(8)VB有很好的出错管理机制;(9)VB与其他程序有良好的沟通性,如各种数据库;132MATLAB语言背景1MATLAB语言概述西安工业学院学士学位论文4MATLAB是MATHWORKS公司开发的一种工程计算语言。它是一个交互系统,在MATLAB中的基本数据元素是一个不要求维数的复矩阵。用MATLAB可解决很多工程计算问题,特别是涉及到矩阵和矢量形式的问题。MATLAB是一个高度集成的语言环境,在它的界面下可以编写程序、运行程序并可进行跟踪调试。对于广大的工程技术人员和科学研究人员来说,MATLAB不失为一种很好的工具。MATLAB也有局限性,一般它不能脱离MATLAB集成环境工作;而且编写界面的功能比较弱。2MATLAB的主要特点(1)其强大的计算功能(2)计算结果和编程可视化(3)极高的编程效率。3MATLAB存在的一些问题1运行的速度慢。运行速度是工程设计尤其是控制领域的命脉所在,由于MATLAB的程序世界是运行的,所以其运行速度不可避免地要下降。2无法脱离MATLAB环境运行。MATLAB6X以上的版本对计算机的要求较高,且自身程序所占的空间较大,这就是得些配置较低的机器运行有困难。133ACTIVEX控件背景1ACTIVEX控件概念ACTIVEX是一个MICROSOFT的术语,它指的是一组包括控件,DLL和ACTIVEX文档的组件,它通常是以动态链接库的形式存在,因此必须在一个叫容器的独立执行软件中运行。这样的容器包括AUTHORWARE、DELPHI,VISUALBASIC,VISUALC,INTERNETEXPLORER和ACCESS等等。ACTIVEX控件数据输入和函数功能执行都必须通过容器,因此ACTIVEX控件和容器都必须支持一些特定的接口协议。根据MICROSOFT相应的规格标准,ACTIVEX控件应具备如下的性能机制。属性和方法ACTIVEX控件必须提供属性的名称、方法的名称及参数,通过这项机制容器可以存取和改变ACTIVEX控件的属性参数。事件ACTIVEX控件由这项机制通知容器在ACTIVEX控件中发生的事件,比如属性参数的改变,用户按下鼠标左键等。存储容器由这项机制通知ACTIVEX控件存储和提取有关信息数据等。2认识VB的ACTIVEX控件VB给我们带了9个内置ACTIVEX控件IMAGELIST、TOOLBAR、STATUSBAR、TABSTRIP、SLIDER、PROGRESSBAR、TREEVIEW、LISTVIEW、COOLBAR。RICHTEXTBOX控件西安工业学院学士学位论文5RICHTEXTBOX控件是整个字处理的核心。它提供了文本框的所有功能,能够将不同字体、字号和属性混在一起编辑,能够精确地控制文本边界。在部件窗口选上MICROSOFTRICHTEXTBOXCONTROL60就可把控件引入工具箱。IMAGELIST控件包含一组IMAGELIST对象,要通过索引或键来引用,它作为放置其他图形控件的中央仓库。在程序运行时,可通过TREEVIEW1IMAGELISTIMAGELIST1语句,将TREEVIEW1控件与IMAGELIST1控件相关联,TREEVIEW1控件就可以使用IMAGELIST1控件中的图片。TOOBAR控件包含一组BUTTON对象,用于生成与程序相关的工具条。STATUSBAR控件状态栏就是通过这个控件制作的。这三个控件包含在MICROSOFTWINDOWSCOMMONCONTROL60中,把它引入工具箱,并把这三个控件放入窗体。14本文主要研究工作MATLAB是集数值分析、矩阵运算、信号处理和图形显示于一体的高性能数学软件,将其强大的计算功能与VB在图形用户界面开发方面的优势结合起来,实现应用系统的无缝集成,对于有效缩短开发周期、优化系统性能是十分有意义的,那将大大地提高编程者的工作效率。本文介绍在VB60中利用ACTIVEX自动化技术使用和操作MATLAB的方法。它以VB作为自动化控制器。MATLAB作为自动化服务器,在使用VB进行WINDOWS编程中,充分发挥MATLAB在系统分析仿真等方面的优势。VISUALBASIC调用MATLAB程序的研究6第2章VISUALBASIC调用MATLAB程序的研究21VISUALBASIC调用MATLAB程序原理211VISUALBASIC调用MATLAB程序的几种具体实现方法1借助ACTIVEX部件MICROSOFT把所有以COM为基础的技术统称为ACTIVEX技术。自动化是大多数ACTIVEX技术的基础,它可使解释性的宏语言(如VB)能够在不了解应用程序实现细节的情况下控制自动化对象。MATLAB实现了ACTIVEX自动化服务支持,在VB下通过ACTIVEX自动化接口可将MATLAB作为VISUALBASIC语言的一个ACTIVEX部件调用。2借助DDE技术通过对MATLAB的应用程序接口的分析,可以发现MATLAB提供了客户/服务器功能。利用其中的动态数据交换DDE服务功能和ACTIVEX自动化OLE自动化服务功能,可以实现在VB中对MATLAB函数的调用,DDEDYNAMICDATAEXCHANGE允许MICROSOFTWINDOWS应用程序通过交换数据实现彼此间的通信。应用程序间彼此通信要先建立一个DDE会话,对会话进行初始化的应用程序称为客户端(CLIENT),对CLIENT端作出响应的应用程序称为服务器(SERVER)并通过MAXRRAYSMATLAB中的基本数据类型与MATLAB工作空间交换数据,从而增强VB的数值计算能力和数据的可视化能力。如(图21)所示图21DDE技术调用MATLAB3通过M文件MATLAB产生的M文件不能直接在VB中调用,可利用MCC将M文件直接编译成EXE文件,然后在VB中声明下面三个API函数,最后使用SHELL命令即可实现VB与MATLAB的无缝集成。1用MCC生成独立的外部应用程序。可使用如下两种命令MCCPFILEM或MCCMFILEM2在VB中声明调用的三个API函数DECLAREFUNCTIONWAITFORSINGLEOBJECTLIB“KERNEL32”BYVALHHANDLEASLONG,BYVALDWMILLISECONDSASLONGASLONGDECLAREFUNCTIONCLOSEHANDLELIB“KERNEL32”BYVALHOBJECTASLONGAS西安工业学院学士学位论文7LONGDECLAREFUNCTIONOPENPROCESSLIB“KERNEL32”BYVALDWDESIREDACCESSASLONG,BYVALBINHERITHANDLEASLONG,BYVALDWPROCESSIDASLONGASLONG3示例代码DIMLTASKASLONG,LRETASLONG,LHANDLEASLONG执行FILEEXE文件LTASKSHELL“FILEEXE”,VBNORMALFOCUSLHANDLEOPENPROCESSSYNCHRONIZE,FALSE,LTASK等待进程执行完毕LRETWAITFORSINGLEOBJECTLHANDLE,INFINITELRETCLOSEHANDLELHANDLEFILEEXE文件执行完毕后,继续执行应用程序通过以上编码,应用程序可以在执行过程中调用EXE完成特定的计算或图形功能后,再继续其执行过程,从而实现与MATLAB的调用。4引入MATRIXVBMATRIXVB是MATHWORKS针对VB提供的一个MATLAB库,它提供了600多个函数,包括基本的数学运算和功能强大的信号处理、线性代数、串运算及图形图像处理功能等,为VB提供了强大的功能扩展。在VB中使用该数学工具包可避免重复性劳动,从而减少开发人员实现算法和界面设计的困难。MATRIXVB是一个独立的产品,其使用十分方便。MATRIXVB安装完成后,只需在VB工程中引用MMATRIX即可。212MATLAB语言与ACTIVEX技术VISUALBASICACTIVEX部件是MICROSOFT公司提供的一种用于模块继承的新协议,它是工具箱的扩充部分。在程序中加入ACTIVEX部件后,它将成为开发和运行环境的一部分,并为应用程序提供新的功能。ACTIVEX部件保留了一些普通VB控件的属性、事件和方法。ACTIVEX部件特有的方法和属性大大增强了程序设计者的能力和灵活性。虽然MATLAB是一个安全独立的编程和数据运算的集成环境,使他可以方便的做很多工作。但是,很多时候仅仅靠MATLAB环境还不能很好的完成任务,比如说1MATLAB程序中出现循环时,MATLAB运行起来非常吃力,速度很慢。2以前去多用其他语言编写的算法程序如果要移植到MATLAB环境中运行就需要编写为M文件,还需要浪费许多人力物力。别的编程环境需要使用MATLAB的某些优秀的功能时找不到合适的办法。因此,MATLAB与外部的数据和程序交互是很有意义的。MATLAB程序接口的出现,正是为了处理这些问题,用过它可以完成于其他编程环境的交互,各取所长,充分西安工业学院学士学位论文8发挥。MATLAB接口包括1在MATLAB环境中调用别的语言编写的程序和算法,它通过MEX文件来实现。2MATLAB于别的编程环境的数据交互,它通过MAT文件来实现。3别的编程环境使用MATLAB的计算功能,它通过MATLAB计算引擎来实现。MATLAB支持的ACTIVEX有两方面含义(1)在其他程序下运行MATLAB的ACTIVEX部件。(2)在MATLAB下运行其它ACTIVEX部件。从某种意义上来说,ACTIVEX技术的应用有些像DDE链接,但比DDE链接更强大,所以ACTIVEX出现后,链接DDE的方法就不再那么吸引人了。与ACTIVEX的链接将成为主要的链接方式。ACTIVEX实际上是在调用一种部件,而无需要求该部件对应的程序正在运行,这会使得其功能更加强大。22创建ACTIVEX控件的步骤A使用VISUALBASIC编程语言编写过应用程序,一定要非常熟悉诸如TEXTBOX、LABEL和DATA等控件。要利用这些控件,可以将它们绘制在窗体中,通过属性,方法和事件控制它们的行为。当用户创建自己的ACTIVEX控件时,除了确定属性、方法和事件以外,用户是在创建一个相似的对象。当创建了自己的ACTIVEX控件以后,就可以在其他VISUALBASIC工程中使用它,就像使用TEXTBOX控件一样。可以在能使用ACTIVEX控件的任何应用程序或开发工具(包括其他VISUALBASIC工程、AUTHORWARE或者MICROSOFTINTERNETEXPLORER)中使用自己的控件。在VISUALBASIC中创建一个ACTIVEX控件不同于创建一个STANDARDEXE应用程序。因此当创建一个新控件时,一般应遵循的步骤是1确定控件将要提供的功能。因为ACTIVEX控件类似于一个独立的对象,所以需要明确这个对象的目的,希望它在屏幕上有什么样的外观使用此控件时,需要什么属性、方法以及事件用于应用程序中2设计控件的外观。3设计控件的接口,即属性、事件和方法。4创建由控件工程和测试工程组成的工程组。5通过把控件和或代码添加到USERCONTROL对象中来实现控件的外观。6实现控件的接口和功能。7编译控件部件(OCX文件)。B具体实现方法(1)确定DATALISTVIEW控件的功能标准的LISTVIEW控件在显示数据库记录时还存在一些不足,如必须编写大量的代码等,DATALISTVIEW通过在LISTVIEW的基础上添加部分功能而弥补了LISTVIEW的不足,因此它除了本身固有的属性、方法和事件外,添加了如下成员1DATASERVERNAME属性确定所操作的数据库服务器。2)DATABASENAME属性确定所操作的数据库。西安工业学院学士学位论文93ADMINISTRATORNAME属性确定操作数据库的管理员名称。4PASSWORDNAME属性确定操作数据库的管理员口令。5)SHOWDATABASE方法显示SELECT命令所执行的数据库操作结果。6)ERRORDATABASE事件当遇到错误的数据库操作时引发该事件。(2)设计控件的外观DATALISTVIEW由于仅包含一个LISTVIEW控件,所以其外观没有太多需要考虑的问题。如果要创建的控件是多个控件构成,或新控件不包括任何现存控件即完全从头开始创建一个全新的控件的话,则外观问题是一个很重要的问题。(3)设计控件的接口,即属性、事件和方法对LISTVIEW控件所作的改进是为了让LISTVIEW控件支持数据库的内容显示,以便在所有能支持ACTIVEX控件的应用程序中使用。通过添加用户自己的属性DATASERVERNAME、DATABASENAME、ADMINISTRATORNAME、PASSEORDNAME和方法SHOWDATABASE等可以实现这项功能。DATALISTVIEW的其他属性、事件和方法都和标准LISTVIEW一样。(4)创建由控件工程和测试工程组成的工程组1)启动一个新的ACTIVEX控件工程。2按下CTRLT组合键或者选择(工程)|(部件)菜单选项,显示(部件)对话框,在(控件)选择框中选择MICROSOFTWINDOWSCOMMONCONTROLS60。3选择(工程)|(引用)菜单选项,显示(引用)对话框,在(可用的引用)选择框中选择MICROSOFTACTIVEXDATAOBJECTS20LIBRARY。4在USERCONTROL窗口中添加一个LISTVIEW控件,LISTVIEW控件的左上角位置为00。5设置ACTIVEX工程和USERCONTROL控件属性值,如(表22)所示。条目设置工程类型ACTIVEX控件工程名称DATALV工程描述通过ADO,使得LISTVIEW控件能够直接操作数据库USERCONTROL的NAME属性DATALISTVIEWUSERCONTROL的PUBLIC属性TRUE表22ACTIVEX工程和USERCONTROL控件属性值6)保存这个工程。7)选择(文件)|(添加工程)菜单选项。然后添加一个标准EXE工程。建立该工程的目的是为了在创建ACTIVEX控件时不断地进行测试。西安工业学院学士学位论文10此时已建立了一个由控件工程和测试工程组成的工程组,下面就可以正式开始创建DATALISTVIEW控件。(5)实现控件的外观确定控件外观的方式取决于当前控件的创建模型。如果要创建一个用户绘制控件,那么必须自己在USERCONTROL_PAINT事件过程编写代码来完成所有的绘工作,同时还需要确定何时绘制控件,以便在需要的时候调用USERCONTROL的REFRESH方法来产生PAINT事件。如果是改进一个现有控件,那么只需正确地将组成控件放置在USERCONTROL上即可。由于DATALISTVIEW控件仅包含LISTVIEW一个组成控件,那么只需简单地在USERCONTROL1上绘出一个标准LISTVIEW控件,控件名为缺省的LISTVIEW1,即可完成外观绘制工作。为了在使用控件时,使LISTVIEW控件和自己绘制的空间相匹配,必须建立USERCONTROL的RESIZE事件过程。RESIZE事件过程的代码见附录(1)。仅四行代码的RESIZE事件过程是简单控件的用户界面的所有必须的代码,其目的是使LISTVIEW控件和USERCONTROL对象有相同的尺寸。(6)实现控件的接口和功能这是整个创建过程中最核心、最重要也是最复杂的步骤。对于创建控件的每一属性、事件和方法均需逐一实现。1)创建DATASERVERNAME属性要创建DATASERVERNAME属性值,首先需要添加一个在内部存贮属性值的局部变量。要做到这一点,在USERCONTROL对象的GENARALDECLARATIONS通用声明语句中创建此变量。如下所示DIMM_DATASERVERNAMEASSTRING接着需要创建称为DATASERVERNAME的新属性,可以通过手工输入GET和LET过程,或者选择(工具)|添加过程|类型创建这个新属性。DATASERVERNAME属性的代码相当容易理解。当置DATASERVERNAME属性的值时,PROPERTYGET过程仅将局部变量的存贮内容取出来。当设置DATASERVERNAME属性值时,PROPERTYLET过程将为局部变量赋予一个有效值。两个PROPERTY过程的代码见附录(3)需要注意的是在PROPERTYLET过程中,有一个PROPERTYCHANGED方法,它的功能是通知容器(可以理解为存放所有属性的单元)属性值已变更,需产生一个WRITEPROPERTIES事件,来保存新属性值。事实上不仅在PROPERTYLET过程需要调用PROPERTYCHANGED方法,在USERCONTROL的代码模块中无论何时改变了ACTIVEX控件的某个属性值,均需调用该过程,以保存属性的变化。注意PROPERTYDATASERVERNAME方法的用法,此方法与READPROPERTIES和WRITEPROPERTIES事件在一起使用。此时需要使用用户控件的INITPROPERTIES事件指定此属性的初始值PRIVATESUBUSERCONTROL_INITPROPERTIESM_DATASERVERNAMEM_DEF_DATASERVERNAMEENDSUB即使用户没有设置初始值,这些代码也会确保设置了一个初始值。至西安工业学院学士学位论文11DATABASENAME、ADMINISTRATORNAME、PASSEORDNAME属性的创建过程跟DATASERVERNAME属性的创建过程完全一样,这里就不再重复叙述。2)使用PROPERTYBAG对象用户还需要为WRITEPROPERTIES和READPROPERTIES事件创建代码,从而保护DATASERVERNAME、DATABASENAME、ADMINISTRATORNAME、PASSEORDNAME属性在设计阶段的属性值。这两个事件都使用PROPERTYBAG对象保存和检索DATASERVERNAME、DATABASENAME、ADMINISTRATORNAME、PASSEORDNAME属性的值。PROPERTYBAG对象能够保持DATASERVERNAME、DATABASENAME、ADMINISTRATORNAME、PASSEORDNAME的设计值。具体实现代码在附件(2)。由于这两个过程是针对“容器“对象的,因此所有属性值的保存和读取都通过这两个过程来实现,而不是每个属性都需要单独的两个过程。其中,PROPERTYBAG就是“容器对象“的名称。WRITEPROPERTY方法有三个参数第一个字符串标识需要保存的属性,第二个参数是需要保存的值,最后的参数是属性的缺省值。READPROPERTY方法需要两个参数一个字符串用来保存属性的名称,另一个为缺省值。在窗体上绘制ACTIVEX控件的那一刻,就会开始执行ACTIVEX控件的代码。在控件设计过程中,将DATASERVERNAME、DATABASENAME、ADMINISTRATORNAME、PASSEORDNAME属性的默认值设置为CONSTM_DEF_DATASERVERNAME“LYC“CONSTM_DEF_DATABASENAME“PUBS“CONSTM_DEF_ADMINISTRATORNAME“SA“CONSTM_DEF_PASSWORDNAME“当然,也可以在程序运行时多次修改它。控件的正常行为是当程序终止时恢复其默认值,这样增加了保持属性的两种独立状态的要求。简言之,如果在设计阶段改变了一个属性值,那么控件必须得到这个新值,而不是使用默认值。相反,如果在程序运行时改变属性值,那么当返回设计状态时,控件必须检索此属性值。PROPERTYBAG对象允许ACTIVEX控件存贮有关它自己的属性值,使它能执行这个动作。PROPERTYCHANGED方法会通知用户已经改变了一个属性。通过了解程序的状态以及是否调用了PROPERTYCHANGED方法,VB就可以激发WRITEPROPERTIES和READPROPERTIES事件。3)为SHOWDATABASE方法编写代码SHOWDATABASE方法实现在LISTVIEW控件中显示SELECT命令所执行的数据库操作结果。在其具体实现过程中采用了ADO(ACTIVEXDATAOBJECTS)的数据存取方法。ADO的主要特点是使用更加容易,访问速度更快,而对磁盘和存储容量的要求更小,ADO支持建立各种客户/服务器模式与基于WEB的应用程序,具有远程数据服务RDS(REMOTEDATASERVICE)的特性,通过RDS能够在一次往返中将服务器端的数据传送到客户端的应用程序或WEB页面中,并在客户端对数据进行处理后,立即更新服务器端的数据。采用ADO所基于的OLEDB技术,可以对电子邮件、西安工业学院学士学位论文12文本文件、数据表格等各类数据通过统一的接口API接口进行存取,是远程数据存取的一个主要发展方向。SHOWDATABASE方法具有一个字符串参数,但无任何返回值,具体代码见附录(4)当对数据库的操作发生错误后,除了不能正常显示以外,还应通知宿主程序用户。可以通过创建一个叫做ERRORDATABASE的事件实现上述功能。要创建这个事件,把下述代码添加到USERCONTROL对象的GENERALDECLARATIONS段中。PUBLICEVENTERRORDATABASE此事件的工作像其他控件的事件一样。使用控件的用户可以将代码放到这个事件中,用户要做的唯一的事情就是用RAISEEVENT方法激发此事件。(7)编译控件部件(OCX文件)。现在已经完成了DATALISTVIEW控件的创建工作,为了在DATALV工程外也可以使用该控件,只需将DATALV工程编译OCX控件部件即可。在(工程组)窗口单击DATALV以选择该工程,在文件菜单上单击生成DATALVOCX,在生成工程对话框中选择控件存放的目录后,单击确定即可创建OCX文件。一旦生成了OCX文件的控件,就可以象使用其它控件一样来随心所欲地使用它了。ACTIVEX技术可以灵活、高效的实现可交互、重入、重用、完全分布式、与语言无关的各种应用。随着ACTIVEX技术的发展,ACTIVEX控件在应用程序中的作用将会显得越来越重要,那么创建一个功能完善、具有自己特色的ACTIVEX控件就非常具有现实意义。但是,ACTIVEX技术也有一些明显缺点,ACTIVEX技术依赖于WINDOWS平台,对广泛应用的UNIX平台目前仍不兼容,另外ACTIVEX在许多方面的性能还较弱,ACTIVEX技术仍需要不断完善和发展VISUALBASIC借助ACTIVEX部件调用MATLAB的实现13第3章VISUALBASIC借助ACTIVEX部件调用MATLAB的实现31VISUALBASIC借助ACTIVEX部件调用MATLAB程序简介MATLAB对计算机配置要求高,在运行时会占用系统的很多资源,不仅浪费了时间也受到了很大的约束性。但是,MATLAB也支持ACTIVEX自动化技术的软件,能够被任何可作为ACTIVEX程序的MICROSOFTPROGRAMS所控制,包括EXCELACCESS,VISUALBASIC,VISUALC利用这一特性,用户可以非常方便地在自已的程序中使用MATLAB,包括执行MATLAB命令,使用其功能丰富的工具箱TOOLBOX,向MATLAB输入数据,获取结果数据,图形。这样既能用VB编出漂亮的WINDOWS程序,又能同时获得MATLAB在工程辅助设计,仿真等方面的功能。本设计是采用VISUALBASIC制作界面,工作时进入VISUALBASIC编辑的界面,通过后台算法处理信息,存储数据,共享资源,以保证调用文件的可靠性,实时性和准确性。以VISUALBASIC60为其支持环境。32调用程序设计原理321调用图31调用示意图322ACTIVEX自动化图ACTIVEX自动化是ACTIVEX的一个协议,它允许应有用程序或组件控制另一个应用程序或组件的运行。它包括自动化服务器和自动化控制器。MATLAB可以认为是自动化服务器,可以由其它应用程序编程驱动,自动化服务器定义的特定的类,而类的实例即自动化对象。MATLAB提供了一个自动化对象,其外部名称是MATLAB,APPLICATION。它支持COM技术。其它程序通过COM技术提供的函数得到自动化对象支持的接口指针,通过调用接口函数便可控制和使用自动化对象。VBACTIVEXMATLABACTIVEX西安工业学院学士学位论文15这里采用VB60作为自动化控制器,控制和使用自动化对象MATLAB,并通过编程可以生成,使用和消除自动化控制器。323、创建和获取ACTIVEX自动化对象的过程1在控制器中创建和获取自动化对象的一般过程1初始化并创建一个自动化对象创建后,可以在代码中使用对象变量引用的对象。2操作方法和属性;获取对象方法和信息,激活属性和方法。3完成代码编写后释放对象。2程序实现VB能通过不同的方式实现对自动化对象的使用和操作。要创建一个ACTIVEX对象,只需将CREATOBJECT函数返回的对象引用值赋给一个对象变量。在声明对象变量时使用ASOBJECT子句,可创建一个能包含任何类型的变量。不过,经变量访问的对象是后期绑定的,即绑定在程序运行时执行。这就是所谓后期绑定技术。1声明一个对象变量,然后创建并返回一个对ACTIVEX对象的引用。DIMOBJECTVARASOBJECTSETOBIECTVARCREATOBJECTPROGID其中,PROGID即类型库信息的字符串标识,就是前述的外部名称MATLAB,APPLICARION,形式为APPNAME,OBJECTNAME,含义是参数描述APPNAME必要,为VARIANTSTRING类型,用于提供对象的服务器应用程序OBJECTNAME必要,为VARIANTSTRING类型,用于指定创建的对象类成员2操作对象,一旦得到对一个ACTIVEX对象引用的变量,就可以对此变量进行操作,如同对VB中其它对象的操作即获取,设置,方法和属性一样,语法是OBJECTVAR,PROPERTY,OBJECTVAR,METHOD3释放对象,操作完成后,用自动化对象提供的CLOSE或QUIT函数来结束并释放对象。324MATLAB对象的一些属性和方法1BSTREXECUTEINBSTRCOMMAND此函数以命令字符串为MATLAB参数,将其运行结果以字符串返回。所有在MATLAB命令窗口键入的可执行的命令行都可在此使用,这样,我们就能在代码中使用命令行,象在MATLAB窗口中一样自如。2VOIDGETFULLMATIXINBSTRNAME,INBSTRWORKSPACE,INOUTSAFEARRAYDOUBLEPR,西安工业学院学士学位论文16INOUTSAFEARRAYDOUBLEPI该函数从指定的MATLAB工作空间中获取一维或二维数组。其中,NAME是提取数组的名称,WORKSPACE表示包含数组的工作空间,一般指定为“BASE”,即MATLAB默认工作空间。PR和PI分别是包含所提取数组的实部和虚部。3VOIDGETFULLMATRIXINBSTRNAME,INBSTRWORKSPACE,INOUTSAFEARRAYDOUBLEPRINOUTSAFEAPRAYDOUBLEPI该函数向指定的MATLAB工作空间中设置一维或二维数组。其中,NAME是设置输入数组的名称,其它同前。4VOIDMINIMIZECONNANDWINDOW该函数将未最小化的MATLAB窗口最小化。5VOIDMAXIMIZECONNANDWINDOW该函数将未最大化的MATLAB窗口最大化。6VOIDQUIT该函数关闭并退出MATLAB。33VISUALBASIC调用MATLAB程序功能介绍331初始化界面介绍此界面如(图241)所示,为进入VISUALBASIC调用MATLAB程序的初始界面。当打开程序时,此界面会以全屏出现,上面出现“欢迎进入VB调用MATLAB开发程”序字样。此行自将从左至右在屏幕上方划过。界面设置出现时间为5秒钟,5秒钟后将出现调用程序的主界面。图32初始化界面西安工业学院学士学位论文17332初始化界面实现首先在设计窗口上设置一个图像控件,即PICTURE控件。然后再添加三个标签控件即,LABEL1,LABEL2,LABEL3。最后添加三个TIMER控件,即TIMER1,TIMER2,TIMER3ENABLE属性为TURE,TIMER1的INTERVAL为7000。TIMER3的INTERVAL为65TIMER1的功能为启动下一个窗体,并且控制初始页面的出现时间。TIMER3的功能为使字体从左到右划过页面顶端。333调用程序界面介绍初始化界面结束后紧接着进入调用程序主界面(图242)。本界面失调用程序的主要界面,在屏幕上方有一个输入程序的窗口,在其下方由显示结果的透明窗口。在工具栏中有新建,保存,打开,查找,运行按钮在工具栏中设有下拉菜单和快捷键,使用户方便的掌握该程序的使用。在调用界面显示屏幕的下方和右侧都有滚动条的设置在程序过长有可能运行到屏幕下方,这时它极大的方便了用户的使用。334用户应用界面的初步实现我来说明一下在MICROSOFTVISUALBASIC下,通过ACTIVEX自动化接口将MATLAB作为VISUALBASIC语言的一个ACTIVEX部件调用的方法与应用。1VB下建立一个新窗口,其上有3个控件,其中一个是按钮,其VB名称为COMMAND1,且其标注为RUNMATLAB一个是编辑框,用来接收MATLAB命令,其VB名称为TEXT1另一个为文本控件,其VB名称为LABEL1。我们的目的是在用户按下RUNMATLAB按钮时,该程序中运行编辑框中给出的MATLAB语句,并将其结果在LABEL1控件中显示出来。建立一个VB窗口,在其变量声明部分申明要调用MATLAB的ACTIVEXDIMMATLABASOBJECT并在其FORM_LOAD中给出下面命令来链接MATLAB的ACTIVEX部件。给按钮给出下面的响应命令,整个问题就坚决了PRIVATESUBCOMMAND1_CLICKSETMATLABCREATEOBJECT“MATLABAPPLICATION“LABEL1CAPTIONMATLABEXECUTETEXT1TEXTENDSUB值得指出的时,这个程序段不只可以解决计算与文字显示的MATLAB语句,还可以解决图形绘制等问题。例如在编辑框中给出下面带有绘图的命令,AMAGIC5AINVA,X,YMESHGRID3013,2012ZX22XEXPX2Y2XYSURFX,Y,ZCOLORBARSHADINGINTERP西安工业学院学士学位论文18则将得出如图33所示的效果窗口中框原来应该有白色背景,作透明处理后变成了这样。图33调用MATLAB效果图可见,调用ACTIVEX还是比较简单的。我们还可以将其中生成的MATLAB变量调至VB环境中,由VB程序直接使用,或将VB中的变量写入MATLAB的工作空间。能解决这样问题的MATLAB函数为GETFULLMATRIX和PUTFULLMATRIX。例如我们可以在变量声明程序段中给出DIMMATLABASOBJECTDIMRESULTASSTRINGDIMMREAL10,10ASDOUBLEDIMMIMAGASDOUBLEDIMMREAL15,5ASDOUBLEDIMI,J,I0,J0ASINTEGERDIMB0ASDOUBLE并在按钮响应区内写出PRIVATESUBCOMMAND1_CLICKSETMATLABCREATEOBJECT“MATLABAPPLICATION“MATLABEXECUTE“AHILB11“CALLMATLABGETFULLMATRIX“A“,“BASE“,MREAL,MIMAGB00FORI0TO10B0B0MREALI,INEXTILABEL1CAPTIONB0西安工业学院学士学位论文19I00J00FORI0TO10STEP2FORJ0TO10STEP2MREAL1I0,J0MREALI,JJ0J01NEXTJI0I01J00NEXTICALLMATLABPUTFULLMATRIX“BMAT“,“BASE“,MREAL1,MIMAGENDSUB则可以生成一个11X11HILBERT矩阵,调入VB空间,由VB提取其子矩阵,显示迹并将子矩阵返回到MATLAB工作空间。2MATLAB还可以调用其他ACTIVEX部件,这可以通过ACTXCONTROL函数来设置,该函数的调用格式为HACTXCONTROLPROGID,POSITION,PARENT,EVENTCALL其中,PROGID为ACTIVEX部件的标识;POSITION为部件的位置;PARENT为父窗口句柄;而EVENTCALL为事件与回调函数对,它应该由单元字符串数据表示。在一般应用中,PROGID应该由开发者提供。GLOBALMAJICSOFTWARE公司为SIMULINK提供了一些用于表盘显示的ACTIVEX部件,已知其中一个ACTIVEX部件标识为MWAGAUGEAGAUGECTRL1,这样我们可以使用它演示MATLAB对ACTIVEX部件的调用。假设我们想建立一个窗口界面,在窗口上画出一个ACTIVEX表盘,同时在它的旁边画一个垂直滚动杆,在滚动杆的位置发生变化时,在表盘上自动显示滚动杆的当前位置。HFFIGUREPOSITION,120370316140HACTXCONTROLMWAGAUGEAGAUGECTRL1,50,10,130,110,GCFH1UICONTROLPOSITION,2501020120,STYLE,SLIDER,MIN,0,MAX,10,TAG,MYSLD,CALLBACK,SETH,_NEEDLEVALUE,GETGCO,VALUE还可以用下面的命令选择一个新的,更美观的表盘SETH,CONFIGURATION,ANGULARGAUGEGENERALMETERSVACUUMPRESSURESETH1,MAX,GETH,SCALEMAXVALUE,MIN,GETH,SCALEMINVALUE西安工业学院学士学位论文20图34ACTIVEX表盘PROG_ID获取有时是个难点。有的程序不直接提供其PROG_ID,而用户需要从WINDOWS注册表中获得。例如我们想得出WINDOWSMEDIAPLAYER的ACTIVEX部件PROG_ID,则需要首先运行WINDOWS下的REGEDIT程序,从其下庞大的注册表中找出HKEY_LOCAL_MACHINESOFTWARECLASSES栏目,并从中找出该程序的代号为MEDIAPLAYERMEDIAPLAYER1。我们可以给出下面的语句HFFIGUREPOSITION,120370316100HACTXCONTROLMEDIAPLAYERMEDIAPLAYER1,20,10,260,80,GCFSETH,FILENAME,DADAOAU在MAT
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 城市交通规划合同管理知识产权咨询重点基础知识点
- 车辆质押合同和借款协议
- 转让京东店铺合同协议
- 道路绿化树木合同协议
- 涂改离婚协议书
- 进口食品代理合同协议
- 车位物业服务合同协议
- 民生保险协议书
- 品牌市场推广战略合作合同书及保密条款
- 常用夫妻离婚协议
- 金属非金属矿山尾矿库安全生产标准化定级评分标准2023版
- DB13-T 5722-2023 医院感染应对策略与质量控制
- 2《归去来兮辞并序》公开课一等奖创新教案统编版高中语文选择性必修下册
- 道路交通设施红绿灯运维投标方案(技术方案)
- 《人工智能基础》课件-AI的前世今生:她从哪里来
- 中国矿业大学《自然辩证法》2022-2023学年期末试卷
- 数独题目高级50题(后附答案)
- 西方经济学考试题库(含参考答案)
- 口腔诊所消防安全工作管理制度
- 不定代词知识点综合讲解及习题专练(附答案)
- 2024届高考英语读后续写微专题 情感描写 教学设计
评论
0/150
提交评论