LabVIEW中如何实现任意形状的不规则按键



主要软件: LabVIEW Development Systems>>LabVIEW Full Development System
主要软件版本: 2013
主要软件修正版本: N/A
次要软件: N/A

问题:
在C#等其他编程语言实现的程序中,我们经常可以看到各种非矩形的不规则按键,而LabVIEW中的自定义控件只能够实现不规则的外观,而按键行为响应范围依然是矩形的,对于UI界面要求较高的用户,自定义控件往往无法满足用户的需求,那么LabVIEW中是否可以实现任意形状的不规则按键呢?


解答: 可以很确定的是,LabVIEW中是可以实现任意形状的不规则控件的。

实际上,LabVIEW中的圆形指示灯本身就是一个典型的非矩形控件。如下图,注意,点击圆形之外的区域控件是没有任何响应的,只有鼠标点击圆形内部的区域,指示灯才会改变状态。

那么我们该如何实现这样的圆形按键呢,甚至是任意形状的不规则按键呢?

下面我们以Simon游戏中的按键为例(如下图),一步步讲解如何在LabVIEW中实现不规则按键。

1.首先,我们必须通过图像处理软件制作好带透明通道的按键图片,图片可以保存成32位的PNG格式的图像,注意不要保存成BMP格式的图片,否则透明通道无效。下图是两张已经处理好的PNG格式的按键图片。注意,经过处理后,两张图片虽是矩形,但是按键以外的部分是透明的,即图像数据的alpha通道值为255。

2.其次,我们需要将这两张图片做成自定义按键,自定义控件的制作比较简单,这里不再赘述。请参考:http://zone.ni.com/reference/zhs-XX/help/371361L-0118/lvhowto/custmzng_cont_ind_newbx/

3.最后,我们需要该自定义控件实现不规则按键的功能,即:鼠标点击透明区域控件不响应,只有当鼠标点击不透明的按键区域,控件才改变相应的状态。这样的功能我们可以考虑用鼠标按下过滤事件来实现。即在鼠标按下时判断鼠标当前位置的控件的颜色是否为透明色,若是则放弃该事件,否则响应该事件。

以上我们已经通过过滤事件实现了在运行状态下的不规则按键的功能,下面我们把这个按键封装成XControl以便后续调用。

在XControl中,我们将上述过滤事件中的代码封装成一个子VI,并添加一个“鼠标按下?”过滤事件,最终代码如下图。注意其中编辑状态和运行状态、输入控件和显示控件、鼠标左键单击和鼠标右键单击的区别以及相应的处理代码。

XControl设计完成后,其代码可以复用,对于第2步中已经做好的任意形状的不规则控件,只需把XControl中外观VI的前面板上的控件替换掉并将新控件匹配窗格,然后把新的XControl添加进自己的项目内即可。注意,本例中的XControl仅适用于机械动作为“单击时转换”的按键。

相关链接: 创建自定义控件:http://zone.ni.com/reference/zhs-XX/help/371361L-0118/lvhowto/custmzng_cont_ind_newbx/

附件:
不规则控件不规则控件.zip




报告日期: 08/26/2014
最近更新: 08/28/2014
文档编号: 6OPTE27