本节书摘来自异步社区《LabVIEW 虚拟仪器程序设计从入门到精通(第二版)》一书中的第2章,第2.5节,作者 林静 , 林振宇 , 郑福仁,更多章节内容可以访问云栖社区“异步社区”公众号查看
2.5 定制控件
LabVIEW 虚拟仪器程序设计从入门到精通(第二版)
如果控件的设置不能满足使用的要求,也可以在当前控件的基础上自定义控件。对LabVIEW提供的输入控件和显示控件都可以进行个性化自定义,以形成丰富多彩的外观风格和特殊的视觉效果,这种定制又是对现有控件集合的扩展。用户定制好的控件还可以保存下来用于其他VI的前面板。对用户定制的控件也可以创建为一个图标,并添加到LabVIEW系统的控件模板中。
1.自定义控件基本操作
LabVIEW提供的自定义控件面板,类似于VI的前面板,但是没有程序框图。打开自定义控件面板的方法有两种。
在新建菜单中选择“其他文件”>>“自定义控件”,打开自定义控件面板后再由控件面板向里面调用控件。
在VI前面板上放置控件,右键单击该控件,选择快捷菜单中的高级>>自定义…,可以打开该控件的自定义控件面板。
下面以仪表控件为例,自定义该控件。
在VI前面板上放置仪表控件,单击该控件,选择高级>>自定义…,弹出仪表控件的自定义面板,如图2-27所示。
面板上有一个类似扳手1的图标,表示当前处于编辑模式,此时只能进行一般的属性设置。单击这个图标变为镊子形状1,即进入自定义控件模式,如图2-28所示。此时控件的各个部件即成为各自独立的部件,对每个部件进行的修改不会对其他部件造成影响。自定义模式显示了控件的所有部件,包括在编辑模式中隐藏的任何部件,如名称标签或数值控件上的基数。由于控件的各个部件相互脱离,因此在自定义模式下无法对控件的值进行操作或修改。
面板上的每个白色线框是原来控件的一个零件,可以分别进行编辑。
右键单击数字显示件,替换为水平指针滑动杆,并调整到合适的大小,然后移动该滑动杆到底部,如图2-29所示。
单击镊子图标,使之转换为编辑模式,并保存该控件为仪表.ctl。
创建一个新的VI,打开控件选板,单击“选择控件”,在弹出的选框中选择“仪表.ctl”,定义前后的仪表控件如图2-30所示。
2.向自定义输入控件和显示控件添加外观部件
可使用控件编辑器窗口在编辑模式或自定义模式下向自定义控件添加图形、文本或修饰。如从剪贴板粘贴一个图形或一段文本,用标签工具创建一个标签,或从修饰选板选择一个修饰,则该操作对象便成为控件的一个新的修饰部件,并同控件一起出现在前面板上。在控件编辑器窗口中,可移动部件位置、调整部件大小、改变层叠次序或替换新的修饰部件。在前面板上使用自定义控件时,可对任何添加到控件上的修饰部件进行大小调整,但不能改变这些添加的修饰部件的位置。
注
打开菜单栏查看>>工具选板,单击A标识,可以在程序框图或前面板写入注释文字,该工具即为标签工具。
自定义外观部件的模式快捷菜单项。外观部件可在不同场合显示单个或多个各自独立的图形。要自定义外观部件,应把控件编辑器窗口切换至自定义模式并右键单击需自定义的外观部件,外观部件快捷菜单中出现的选项取决于该外观部件的类型。
具有单个图形的外观部件。在部件单元上单击鼠标右键,可以打开单个图形的外观部件快捷菜单,如图2-31所示。
具有单个图形的外观部件的快捷菜单包含以下几个选项。
复制至剪贴板:将部件的图形副本放置到剪贴板上。将一个图形复制到剪贴板后,右键单击一个部件,从快捷菜单中选择从剪贴板导入图片,可将图形导入部件。
从剪贴板导入图片:用剪贴板上的图形替换外观部件当前使用的图形。例如,可为一个布尔开关的打开或关闭状态导入图形。如剪贴板不含有图形,则从剪贴板导入图片选项不可用。
以相同大小从剪贴板导入:用剪贴板上的图形替换外观部件当前使用的图形,缩放导入的图形使之适合部件的大小。如剪贴板不含有图形,则以相同大小从剪贴板导入选项不可用。
从文件导入:从文件对话框中选择图形以替换外观部件当前使用的图形。
以相同大小从文件导入:从文件对话框中选择图形以替换外观部件当前使用的图形,缩放导入的图形使之适合部件的大小。
还原:不改变部件的位置将其还原到原来的外观。如在前面板上打开某个控件的控件编辑器窗口并对其部件进行改动,则从其快捷菜单中选择还原将还原该部件在前面板上的外观。如在控件编辑器窗口中打开自定义的控件,则还原选项不可用。
原始大小:将部件的图形恢复至其原始大小,便于从其他应用程序中导入图形并调整图形大小。有些从其他应用程序导入的图形经大小调整后显示的效果不如其原始图形,此时需要将导入的图形恢复至其原始大小,以提高其显示的质量。如不导入图形,则原始大小选项不可用。
注
也可以剪贴板上的图像替换修饰部件所使用的图形,即选中一个修饰部件,再选择编辑>>粘贴。如需以一个文件中的图像替换修饰部件所使用的图形,可右键单击该修饰部件,然后从快捷菜单中选择从文件导入。
下面举一个布尔控件的例子来说明如何在控件上贴上图片令其更加美观。
从控件选板中选择停止控件放置于前面板上,并进入自定义控件界面,单击扳手图标,进入自定义状态。鼠标右键单击停止图片,在弹出的快捷菜单上选择“以相同大小从文件导入”,如图2-32所示,在弹出的图片选择框中选择所要粘贴的图片,单击“确定”按钮,完成图片导入操作。完成后的停止控件如图2-33所示。
3.具有多个相关图形的外观部件
单击刚才完成的停止控件,会发现停止控件的另一个状态的图片并没有相应修改,这是因为布尔控件的外观部件具有多个相关图形以表示不同的状态,这些不同的图形大小、颜色相同。对外观部件的当前图形进行移动或调整大小时,该部件的其他图形也将随之移动或大小成比例改变。布尔开关有4个不同的图形,第1个图形表示状态为FALSE;第2个图形表示状态为TRUE;第3个图形表示释放时切换的状态,即从TRUE到FALSE的过渡状态;第4个图形表示“释放时触发”的状态,即从FALSE到TRUE的过渡状态。当布尔控件处于“释放时切换”或“释放时触发”的状态时,布尔控件的值将在鼠标按钮被释放时才改变。在单击鼠标按钮和释放鼠标按钮两个动作之间,布尔控件将显示作为过渡状态的第3个或第4个图形。
对于具有多个相关图形的外观部件,其快捷菜单不仅包含了具有单个图形的外观部件的所有菜单选项,还包含了图片项的选项。从快捷菜单中选择图片项可显示一个外观部件名下所有的图形,如图2-34所示,当前图形外部围有深色边框,导入图形仅改变当前图形。如需为其他图形导入图形,应右键单击部件,从快捷菜单中选择图片项,从中选择需导入的新图形后将其导入。
选择下一个图片项,重复以相同大小从文件导入动作,可以编辑布尔控件的4个不同动作的图片,编辑完成后的效果如图2-35所示。
保存该控件,并用鼠标右键单击,可以观察4个不同动作对应的不同图片。
4.自定义类型和严格自定义类型
在VI中使用自定义输入控件或显示控件后,该VI中自定义控件的实例与所保存的控件间的连接将不复存在。自定义输入控件或显示控件的每个实例是一个单独、独立的副本,因此改变自定义控件并不影响正在使用该自定义控件的VI。如需使自定义输入控件或显示控件的实例与自定义输入控件或显示控件文件相连接,可将该自定义输入控件或显示控件另存为一个自定义类型或严格自定义类型。一个自定义类型或严格自定义类型的所有实例与其原始文件相连。
将自定义输入控件或显示控件另存为一个自定义类型或严格自定义类型后,对该自定义类型或严格自定义类型所做的任何数据类型改动将对所有使用这些自定义类型或严格自定义类型的VI实例造成影响。与此同时,对严格自定义类型所做的外观改动也将影响前面板上该严格自定义类型的所有实例。
进入自定义类型和严格自定义类型控件的方式是在自定义控件页面单击输入控件下拉列表,从中选择自定义类型或严格自定义类型,如图2-36所示。
假如有一个控件在程序中会多次使用到,并且如果修改其中一个需要程序中应用到的该控件全部都修改时,应用自定义类型控件或严格自定义类型控件可以令程序编写更加方便。
(1)自定义类型
自定义类型为自定义输入控件或显示控件的每个实例指定了正确的数据类型。如自定义类型的数据类型发生改变,则该自定义类型的所有实例将自动更新。换言之,在使用了该自定义类型的每个VI中,各实例的数据类型将改变。然而,由于自定义类型仅规定了数据类型,仅有数据类型那部分的值被更新,例如,数值控件中的数据范围便不是数据类型的一部分,因此,数值控件的自定义类型并不定义该自定义类型实例的数据范围。同时,由于下拉列表控件各选项的名称没有定义其数据类型,因此在自定义类型中对下拉列表控件中各选项的名称进行改动,将不会改变自定义类型实例中各项的名称。如在一个枚举型控件的自定义类型中改变其选项名称,由于选项名称也是枚举型控件数据类型的一部分,因此其实例将更新。自定义类型实例可拥有其唯一的标签、描述、默认值、大小和颜色等,或设定其风格为输入控件或显示控件,如滑动杆或旋钮。
如果改变一个自定义类型的数据类型,LabVIEW将尽可能把该自定义类型实例的原有默认值转换为新的数据类型。如数据类型被改为一个不兼容的类型,数值控件被替换为字符控件,则LabVIEW将无法保留实例的默认值。如自定义类型的数据类型被改为其先前所无法兼容的数据类型,则LabVIEW将会把新的数据类型设置为实例的默认值。例如,自定义类型从数值改为字符串,则LabVIEW将把与先前数值型数据类型相关的所有默认值替换为空字符串。
(2)严格自定义类型
严格自定义类型将把实例除了标签、描述和默认值外每个方面强制设置为与严格自定义类型相同。对于自定义类型,严格自定义类型的数据类型将在任何使用该严格自定义类型的场合下保持不变。严格自定义类型严格自定义类型可使用的也对其他值进行了定义,如对数值控件及下拉列表控件中控件名称的范围检查。VI服务器属性仅限于对控件外观产生影响的属性,包括可见、禁用、键选中、闪烁、位置和边界等。
将实例与严格自定义类型移除连接,可阻止自定义类型实例进行自动更新。
下面举一个枚举控件的例子来说明严格自定义类型的应用。
假设需要建立一个指令枚举变量,该指令可能有4条,对于枚举变量和发送到端口的指令建立一个连接关系。首先要对枚举变量进行严格自定义。
打开枚举变量的自定义框,按照图2-37编辑枚举变量的项,保存该枚举控件。
打开程序框图,单击选择VI,在弹出的框中选择该控件,可以马上看见已经编辑好的该枚举控件放置于程序框图中,接着建立该枚举控件与指令的关系,按照图2-38编写程序框图。
将该枚举变量与条件结构连接,条件结构会自动产生两个分支,然后单击条件结构边框,添加新的条件分支,直至枚举变量的项目全部编辑完成。
这样处理完之后,当需要输入指令字符串时,就不需要直接输入繁琐的字符串,只要调用该VI,并从枚举变量的项目中选择具体项目,这样即可将复杂的指令字符串转换为简单明了的指令名称。因此,当该枚举变量改动时,程序中所有应用到该枚举变量的实例都会做相应的修改。应用该枚举变量前后程序框图如图2-39所示,从右边的程序框图中可以明显看出该VI的功能是发送端口。
(3)阻止自定义类型实例的自动更新
右键单击实例,取消快捷菜单中勾选的从自定义类型自动更新选项,可阻止当自定义类型的数据类型改变时,自定义类型的某个实例进行自动更新。取消勾选从自定义类型自动更新选项,可阻止实例在自定义类型的数据类型发生改变时自动更新,但仍保留实例与自定义类型的连接。如需断开实例与自定义类型的连接,可右键单击实例,从快捷菜单中选择断开连接自定义类型选项。
如果禁用自定义类型实例的自动更新并改变实例的数据类型,则该实例将模糊显示且运行按钮显示为断开。如需启用该实例,可右键单击该实例,从快捷菜单中选择从自定义类型更新或断开连接自定义类型选项。选择从自定义类型更新选项,将把实例的数据类型改为自定义类型的数据类型;选择断开连接自定义类型选项,将使实例与自定义类型间永久地移除连接。
当自定义类型的数据类型被更改后,打开含有该自定义类型实例的VI,所有自动更新被禁用的实例将模糊显示。同时,运行按钮也以断开显示。如需启用该实例,可右键单击该实例,从快捷菜单中选择从自定义类型更新或断开连接自定义类型选项,如图2-40所示。