control是LABVIEW8.x新增的功用,LV中的CONTROL咱们是再了解不过了,这个"X"究竟代表什么那,到NI网站上也没找到它的英文界说,或许适当与ACTIVEX中的"X"?尽管无法弄清楚它的界说,可是它的作用是清楚的,我个人了解它更象VC中MFC的控件自画,也具有了一些ACTIVEX的才能,与ACTIVEX的最大差异是ACTIVEX是独立于渠道的,可用于各种编程环境,从这点来说,能够把它看做LV内部的 activex,MFC中的控件自画是这样的,当咱们要做一个特别形状的控件时,能够设置它的一个特点是自画,own draw,也便是说,这个控件是用户自己画出来的,比方一个按钮,当鼠标进入它的操控区域,会主动显现凸起状况,还能够主动改动色彩,IE菜单便是这样,当鼠标移入的时分,背景色主动变成兰色,脱离后,又主动康复,实际上,它是在呼应两个事情,MOUSE_ENTER 和MOUSE_LEAVE事情.
在xcontrol呈现曾经,咱们也能够对一个控件经过特点节点和事情结构完结这种动态改动,可是有着实质的差异,xcontrol经过事情结构判别事情,使用特点节点改动其显现办法是彻底在内部完结的,因而它是能够重用的,从使用办法上它和LV一般的控件没有任何差异,咱们彻底能够把它当作LV又给咱们供给了新的控件,我的文章里屡次说到AE的概念,有了XCONTROL,咱们不光能够保存数据,并且有了显现的才能,所以说,关于依据组件编程的LV,才能有了很大的进步.
尽管xcontrol是一个新增的特性,可是它的制造办法实际上咱们或多或少地都触及到了,这就使得制造XCONTROL变得相对简略了.
能够看出,咱们经过事情结构编程完结了当鼠标移入BOOLEAN控件区域时,BOOLEAN控件的CAPTION和COLOR主动产生了改动,可是全部的操控代码都是在主循环里完结了,是经过控件外部改动的,因而,咱们无法重用这个控件,假设咱们需求100个这样的控件,咱们需求在事情结构平分别对 100个控件做相似的编程,这显然是十分费事的.
最好的办法是让这段代码在控件内部完结,这样关于使用者来说,这和一般的控件没有差异,这样有效地完结了封装,全部的全部从用户的视点看,就象调用一个ACTIVEX.
XCONTROL能够轻松完结这个功用
咱们知道LV的控件是面向对象的层次承继结构,每个控件都承继了它的父类的特点和办法,可是关于一个详细的控件,它的特点和办法都是固定的咱们无法删去或许添加这个控件的特点和办法.关于XCONTROL,咱们能够简略地了解成承继了一个根本控件,并在此基础上,用户添加的自己的特点和办法,是一个从头界说的,添加的很多功用的新的控件.
下面看看制造XCONTROL的详细进程.
这样一个根本的XCONTROL的结构就建立起来了,存储并从头命名
lv主动生成两个自界说控件,分别是data.ctl和state.ctl,两个VI,分别是Facade.vi和Init.vi
这四个部分是任何XCONTROL都有必要包括的根本构件。LV帮助文件中称为required abilities,有必要的才能(直译),
data.ctl代表该XCONTROL表明的数据类型,一般的控件也都代表一种数据类型,比方DOUBLE,BOOLEAN,ARRAY等等
data.ctl是自界说控件,能够依据需求修正成您需求的数据类型,比方关于一个学生的个人信息,咱们应该生成一个簇,包括名字,性别,年纪,班级等。
state.ctrl代表XCONTROL的显现状况,它和DATA.CTL相同,都是严厉类型界说。它包括的信息是咱们想操控XCONTROL的特点。
依据咱们上面的比方,咱们界说四种特点,1:鼠标进入标题 2:鼠标脱离标题 3:鼠标进入色彩 4:鼠标脱离色彩。
xcontrol中最杂乱的便是facade.vi,facade英文意思是一个物体的正面,这儿翻译成外观比较适宜。
当xcontrol被加载到前面板或许一个包括XCONTROL的VI调入内存的时分,该VI主动被调用,以便在显现之前做一些必要的初始化作业。
咱们仍是用上面的比方制造一个简略的XCONTOL来阐明一下,首要咱们修正DATA.CTL,用一个BOOLEAN 类型代替它。
然后修正STATE.CTL,参加必要的特点。
INIT是你在前面板生成控件时主动调用了,一起它内部存储了版别信息,当检查到当时版别产生改动,主动更新。
INIT一般不需求更改。
要点看一下FACADE.VI,它主动生成几个事情。
1:TIMEOUT事情。
在事情结构中,假如没有任何事情产生,TIMEOUT假如位衔接,默认值是-1,表明永久不产生超时事情,假如衔接一个固定的数值,比方100,单位是毫秒,假如没有事情产生,则每100MS触发一次超时事情,需求留意的是上面的超时事情衔接的是0,表明无事情时当即超时,一起循环条件端子挑选的是 STOP IF TRUE,因而,一旦超时产生,将当即退出循环。