http://labview360.com/article/info.asp?TID=10152&FID=165

Active X函式库

对使用LabVIEW作为开发环境的开发人员来说,如果能呼叫或引用其他程式所开发的物件如:OCX、DLL…等。不仅能够缩短开发时间,更能随心所欲的设计出所需要的功能。毕竟在LabVIEW的开发环境下或多或少还是会有所限制,例如:如何用LabVIEW制作常注程式,也就是将程式放到System Tray上呢?LabVIEW为了解决这样的问题,针对Active X物件提供了Active X函式库,使用这些函式库里的元件来引用现有的Active X物件。


图1.1 LabVIEW提供的Active X函式库

不单单在Block Diagram函式库上,在Front Panel上也可以利用Active X Container控制元图1.2来引用ActiveX控制项。


图1.2 LabVIEW提供的Active X Container控制元

 

Active X物件的属性方法及事件

在讨论如何使用ActiveX前,我们先来针对元件的属性,方法及事件来做一个简单的说明。属性(Property),就是指该元件的外观,例如元件大小、外观颜色、Label名称…等。要改变元件属性,除了在设计阶段在Front Panel改变之外,还可以利用Property Node 图1.3来指定。


图1.3 Property Node

方法(Methods),取得该元件的某种活动功能,例如:启动或移除DataSocket动作,使用者可利用Invoke Node 图1.4来决定该元件要做何种功能。在最后的制作常驻程式范例中将会针对这个部分再做说明。


图1.4 Invoke Node

事件(Events),每一个物件都会有它自己的动作,最常见的就是Mouse Down,Value Change…等。换句话说,就是该元件现在正在发生的行为。要取得Events的发生,可以利用Events Structure进行事件触发图1.5。但是,这是针对于在


图1.5 Events Structure

Front Panel上的UI(User Interface)元件所进行的,对于Active X就没法使用这种方式取得Events事件,而必须跟Register Event Callback相配合来取得ActiveX的触发事件图1.6


图1.6 Register Event Callback

在了解ActiveX物件的属性方法及事件后,我们再来简单说一下Event事件。在Event事件上我在这里把它分为二种模式,附带说明一下在LabVIEW的Event模式里不单单这二种,为了让大家很清楚的分辨这二种Event的差异性,所以我只针对这二种方式做说明。一种是UI触发的Event事件,另一种是非UI触发的Event事件。UI触发的Event事件,简单的说就是在人机介面上利用滑鼠游标或键盘来改变人机介面上元件的参数,或是Mouse Down、Mouse Up、Key Up…等,状态改变时,所触发的Event事件,这样的Event事件,我把它称为UI触发的Event事件。非UI上的Event触发何谓非UI上的Event触发呢?举例来说,如果我在UI上放置2个Boolean控制元一个是Button(Trigger)另一个是LED(Read Event)。而我所要的功能是当Button按下时,改变LED的参数(True或False)。由LED的Value改变来触发Events Structure,藉由LED的触发去呼叫Dialog视窗。如果使用图1.7的方式是没办法达到上述所需要的功能。因为,Events Structure只能在Front Panel上的元件被使用者改变时,例如使用者按下Front Panel上的按钮或键盘输入Numeric的参数…等,以这样的方式改变参数,才有办法执行Events Structure里的Event程序。


图1.7 无法触发Read Event

而要达到非UI上的Event触发,就必须如图1.8一样利用Register Event Callback及Callback Vi来使Read Event LED改变状态,利用这样的方式来触发Read Event里的Value Change程序。


图1.8 以Register Event Callback方式触发Read Event

也就是在程式一开始执行的时候,会先注册一个Callback Events,在Callback Vi里,先取得Read Event的Reference的Value(Signaling)及Value。


图1.9 Callback Vi

当Trigger Value被改变时,会先执行Callback Vi,然后将参数传给Read Event


图1.10 触发Read Event Value Change程序

Reference的Value(Signaling) 图1.9。透过这样的改变再去触发Event Structure里的Read Event(Value Change)程序图1.10。各位或许会问;为什么要提到非UI触发的Event事件呢?使用ActiveX物件跟Register Event Callback又有什么关系呢?在制作常驻程式的章节里,除了要使用ActiveX元件的属性及方法外,还必须取得滑鼠在System Icon上的触发事件,如果没办法取得滑鼠触发事件,那么常驻程式的功能也就没法完成。

 

 

开始之前

在ActiveX物件之一的章节里,我们针对ActiveX及Event部分做了些许说明。接下来,利用实际的ActiveX元件及上一章节所书的部分作一个结合,来设计一个常驻程式。所谓常驻程式就是在各位电脑萤幕右下角出现的小图示图2.1,当你游标移到该位置的某一个Icon并且按下滑鼠上的按钮时,相对应的程式会显示画面或是进行其他动作。


图2.1 System Tray Icon

而我们就利用STI Control这个ocx元件,来设计一个类似这样一个功能的程式。在这开始之前,你必须先复制STI.ocx 图2.2并进行注册在你的电脑里。


图2.2 STI.ocx

完成以上步骤后,就可以开始进行常驻程式的制作了。

 

如何引用STI Control元件

引用ActiveX的方式除了在Block Diagram上使用ActiveX物件外也可以直接在Front Panel上直接指定STI Control元件。步骤一,在Control控制面板上图2.3,建立一个ActiveX Container元件并在


图2.3 ActiveX Container

ActiveX Container上按滑鼠右键,选择Insert ActiveX Object选项图2.4。


图2.4 Insert ActiveX Object选项

步骤二,在Select ActiveX Object视窗里,选择STI Control元件图2.5。当然,你也可以利用这种方式引用其他ocx元件。步骤三,完成后,按下OK按钮。在Front Panel及Block Diagram上就会出现STI Control元件图2.6。


图2.5 Select ActiveX Object


图2.6 STI Control元件

 

设定属性及方法

在之前的讨论中,可以利用Property Node及Invoke Node分别指定该元件的属性及方法。步骤一,在这个范例中,分别指定出现在右下角图示的方式,图示的位置及由标移动到图示上所出现的文字。

步骤二,完成属性设定后,在程式一开始执行时,我们利用Invoke Node的Appear方式,将图示放到System Tray上。

步骤三,在程式结束时,增加一个Invoke Node的Remove在程式的最后,这个Remove作用是将出现在System Tray上的图示移除。如果没有这个步骤,当程式停止执行后,图示将不会被移除。

完成上述步骤后,执行程式。查看在System Tray上出现ROCKET的Icon,将游标指向​​ROCKET Icon,则出现STI System tray Test的提示文字。

当然,这样的结果还不能说是完成,因为光是把Icon放到System Tray上是不够的,还必须搭配滑鼠的按钮动作来取得事件。

 

利用Callback Vi取得Events事件

步骤一,在Block Diagram上新增一个Register Event Callback Node,并且将STI的ActiveX Object指向Event。

步骤二,选择STI的DbClick作为Event的触发条件。

步骤三,新增一个名为Event的Boolean Indicator。建立一个Boolean的Reference并指向User Parameter接点上。

步骤四,在Register Event Callback Node的VI Ref接点上,按滑鼠右键。在

选单上选择Create Callback Vi选项,建立Callback Vi。

步骤五,在Callback Vi的Block Diagram里,产生Event的Property Node,Value及Value(Signaling),并且用NOT作反向。需要这样做是要让Boolean有ON及OFF的参数变化。

步骤六,接下来就是试试看程式执行的结果,当滑鼠游标在ROCKET Icon上按下Double Click时,Event的LED会做ON(OFF)变化。当你停止程式时,ROCKET Icon会消失不见。结论这里所讨论的都是比较基本的用法,在实际的使用上你也可以引用不同的ocx

物件来设计你的程式。在Register Event Callback Node的使用上不单单在ActiveX的物件上使用,你也可以利用它来进行视窗呼叫。

ActiveX控件的Events事件的更多相关文章

  1. 【VS开发】动态添加的ActiveX控件如何响应事件

    http://blog.csdn.net/xiaoqiqixiao/article/details/574542 今天在csdn上看到一朋友问如何响应动态添加的控件的事件,搜索资料,发现对于一般的应用 ...

  2. Delphi不注册COM直接使用ActiveX控件并绑定事件

    文笔不行,直接上源码: 主窗口: unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System ...

  3. ActiveX控件的基本操作方法以及如何在VS2010下使用控件

    在此,小编就介绍下ActiveX控件的基本操作方法以及如何在VS2010下使用控件,我们以一个程序为例, (1)      打开VS2010编译器(右键以管理员身份运行,因为ActiveX需要注册), ...

  4. 如何给ActiveX控件添加“事件”“属性”“标准事件”“自定义事件”等一些相关操作

    上一篇小编带大家熟悉了一下ActiveX的建立以及相关的概念,(http://blog.csdn.net/u014028070/article/details/38424611) 本文介绍下如何给控件 ...

  5. Win32编程点滴5 - 响应ActiveX控件的事件

    在最近的一篇文章中说到了,如何创建ActiveX,这次我们来响应事件.这次,我们将创建一个类:CGeneralEventSink,它能够响应任何Dispatch事件(事件的接口继承与IDispatch ...

  6. c# 开发ActiveX控件,添加事件,QT调用事件

    c# 开发 ActiveX 的过程参考我的另一篇文章 :  https://www.cnblogs.com/baqifanye/p/10414004.html 本篇讲如何 在C# 开发的ActiveX ...

  7. ActiveX控件dsoFramer的使用(word、excel、PPT)

    dsoframer是微软提供一款开源的用于在线编辑.调用Word. Excel .PowerPoint等的ActiveX控件.国内很多著名的OA中间件,电子印章,签名留痕等大多数是依此改进而来的. 一 ...

  8. [转]C#开发ActiveX控件,.NET开发OCX控件案例

    引自:百度   http://hi.baidu.com/yanzuoguang/blog/item/fe11974edf52873aaec3ab42.html 讲下什么是ActiveX控件,到底有什么 ...

  9. ActiveX控件(ATL篇)

    目录 第1章 VC++6.0创建    2 1.1 目标    2 1.2 创建项目    2 1.3 增加COM类    4 1.4 属性    7 1.5 事件    8 1.6 实现连接点    ...

随机推荐

  1. Jquery的.post说解

    Jquery的.post说解(一) 准备工作 ·Customer类   public class Customer {     public int Unid { get; set; }     pu ...

  2. OGG-00782 - OGG 11.2.1.0.2 FOR Windows x64 Microsoft SQL Server

    OS ENV:主机名:           WIN-NO42QRNPMFAOS 名称:          Microsoft Windows Server 2008 R2 Datacenter OS ...

  3. mysql备份恢复数据库据/表

    备份单个数据库,只备份表,如要恢复,必须先创建一个数据库[root@s]# mysqldump -u root -p dbname1 > dbname1.sql[root@s]# mysql - ...

  4. RAPIDXML 中文手册,根据官方文档完整翻译!

    简介:这个号称是最快的DOM模型XML分析器,在使用它之前我都是用TinyXML的,因为它小巧和容易上手,但真正在项目中使用时才发现如果分析一个比较大的XML时TinyXML还是表现一般,所以我们决定 ...

  5. Asp.net正则获取html内容

    1.获取div内容 string str = "tt<u>ss</u><div id=\"test\"><div>< ...

  6. 图形数据库、NOSQL和Neo4j

    简介 在众多不同的数据模型里,关系数据模型自80年代就处于统治地位,而且有不少实现,如Oracle.MySQL和MSSQL,它们也被称为关系数据库管理系统(RDBMS).然而,最近随着关系数据库使用案 ...

  7. I.MX6 show battery states in commandLine

    #/bin/sh # I.MX6 show battery states in commandLine # 声明: # 在命令行下自动显示电池状态的信息. # # -- # set battery r ...

  8. 01day1

    最大音量 动态规划 题意:给出一个初始值和一个变化序列 c,在第 i 步可以加上或减去 c[i],求 n 步之后能达到的最大值.有一个限定值 maxlevel,在变化过程中值不能超过 maxlevel ...

  9. 在stm32上移植wpa_supplicant(二)

    第一层调用的移植和裁剪. wpa_supplicant_init 照论文的指示,删除wpa_params和wpa_global相关的东西.初始化流程也相当简单,driver初始化,eap_regist ...

  10. BaseAdapter中重写getview的心得以及发现convertView回收的机制

    以前一直在用BaseAdapter,对于其中的getview方法的重写一直不太清楚.今天终于得以有空来探究它的详细机制. 下面先讲讲我遇到的几个问题: 一.View getview(int posit ...