查看: 1548|回复: 0

Dynamic Event简介,含程序图和相关代码

[复制链接]
  • TA的每日心情
    开心
    2015-7-14 09:10
  • 签到天数: 9 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2017-3-24 10:27:39 | 显示全部楼层 |阅读模式
    分享到:
    众所周知,Event是LabVIEW中常用的结构,其采用中断查询方法运行,可以大大的节省CPU的利用率,提高软件的执行效率。Event的用法我想大部分资料中已经有较详细的介绍,其可响应Application、Dynamic、Panes、Splitters、Controls事件,如下图,这里不再一一赘述,而只对其中的Dynamic做简要的介绍。
    1.jpg

        Dynamic Event与其它Event Sources不同之处在于,其不是必须要响应前面板object,这样就给我们实现事件触发另外的一种独特途径,为程序的设计提供了更广的思路。我们可以在适当的时候触发事件而不需要通改变前面板的显示,这样无疑进一步的减小了程序的内存使用。
        动态注册事件函数位于Dialog& User Interface--Event面板下,如下图:
       2.jpg

        由于网上可以经常下载到的一个动态事件的程序版本较早,因此对于编写有很多不方便的地方,当把vi reference链接至event register时已无法注册鼠标的各个事件,这里我重新编写了一个动态注册事件的实例,以下是该实例的前面板与后面板截图,下面我们通过该实例来简要的解释动态注册事件:
    3.jpg
       4.jpg
        该实例实现的功能为:
    点击前面板任意控件,并拖动鼠标,控件将跟随鼠标的移动而移动;
    拖动时鼠标相对控件的位置不变,这样更符合操作的习惯;
    当鼠标未点击在控件上时,程序不响应任何事件;
    放置任意控件在前面板,可拖动该控件随鼠标移动。
        针对vi reference无法注册鼠标事件的问题,这里用pane reference代替,之所以是数组是因为当前面板有splitter时,将有多个pane,因此此处用数组注册,同时也与属性节点输出一致。Pane reference可首先在后面板放置一个class specifier constant,然后右键点击,在列表中将其连接至panereference,如下图。当然,大家也可以通过属性节点创建常量的方法得到该reference数组。
       5.jpg

        大家可能要问,为什么不直接在事件里添加对应控件的Mouse Down、Mouse Move以及Mouse Up事件呢?这样更直接明了,更通熟易懂。之所以利用Dynamic Event,其原因有如下几点:
    利用属性节点panel-controls,可以直接获取前面板所有控件的引用,这样点击任何一个前面板控件,都可以得到该控件对应的引用,方便对其位置进行修改。该目的主要是为了实现该实例特定功能;
    利用Dynamic Event,动态的注册mouse move事件,只有当mouse点击在某个控件上时,mouse move事件才有效,而当mouse up触发时,将mouse move事件注册为非法事件不响应,这样可以减小程序不必要的鼠标移动响应,无疑大大减小了程序的执行效率,这也是该实例的核心所在。
        以上是对dynamic event实例的简单介绍,其可以方便的扩展到其他鼠标操作中,下图是利用动态注册事件拖动图片在picture中移动,供大家参考。这里直接用控件的MouseDown事件代替了动态注册事件MouseDown,因为这里只要对一个控件进行控制,无需监控所有前面板控件。
    6.jpg
    7.jpg
    mouse down
    8.jpg
    mouse move
    9.jpg   
    mouse up


    游客,如果您要查看本帖隐藏内容请回复

    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-11-26 18:48 , Processed in 0.121586 second(s), 18 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.