硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4250|回复: 9
收起左侧

[emWin] 关于EMWIN长按触发 时间

[复制链接]

11

主题

103

回帖

31

积分

初级会员

积分
31
发表于 2015-10-16 17:18:44 | 显示全部楼层 |阅读模式
最近 在做一个项目 ,做UI这一块,想要 实现按钮BUTTOM 长按 弹框,(其实我是用ICON,但原理通用),
现在发现 长按 这个官方 没有功能,
我就有 2个思路,如下:
1.用软件定时器触发

WM定时器代码

WM定时器代码

CLICKED按下时启动,时间够开启 FLAG=1,RELEASE 放开按钮判断
但这里问题 是 ,WM定时器也是触发回调函数的,从 CLICKED到 RELEASE之间,都没退出过回调函数 ,
故WM定时器 无法触发 TIME了

2.  软件定时器/
这里 用UCOSII的定时器,‘

软件定时器

软件定时器

我 想的过程是这样 的:CLICK开启 定时器 ,定时器 够1.5S进入中断令FLAG=1,然后退出中断回到 回调函数,判断RELEASE。
我觉得第二个比较对路 ,但是 试了下没有 什么效果。
同学们还有什么其他好的方法 ,还有就是希望有 渠道的向官方反馈 一下这个 ,新增 一下 这个这么时尚智能的功能。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115694
QQ
发表于 2015-10-16 18:50:39 | 显示全部楼层
case WM_NOTIFICATION_CLICKED:
      a = GUI_GetTime();
      break;
                    
/* ICON控件释放消息 */
case WM_NOTIFICATION_RELEASED:
    b = GUI_GetTime() - a;

判断时间b是否满足条件就行。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115694
QQ
发表于 2015-10-16 18:54:37 | 显示全部楼层
向官方反应问题,可以在官方论坛发:http://forum.segger.com/
回复

使用道具 举报

11

主题

103

回帖

31

积分

初级会员

积分
31
 楼主| 发表于 2015-10-17 10:33:29 | 显示全部楼层

回 eric2013 的帖子

eric2013:
case WM_NOTIFICATION_CLICKED:
      a = GUI_GetTime();
      break;
                    
/* ICON控件释放消息 */
.......
经过昨晚的摸索,长按已经解决 ,详细请看程序:
1.png

2.png

按下时,开启UCOS的软件定时器(单次模式),计时time后进入中断,把flag置1。
松开时,判断flag是否为1.
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115694
QQ
发表于 2015-10-17 10:36:32 | 显示全部楼层

回 qq27488 的帖子

qq27488:经过昨晚的摸索,长按已经解决 ,详细请看程序:



....... (2015-10-17 10:33) 
用我在上面提供的那个方法就行的,这么搞也可以,就是有些复杂了。
回复

使用道具 举报

11

主题

103

回帖

31

积分

初级会员

积分
31
 楼主| 发表于 2015-10-19 09:52:41 | 显示全部楼层

回 eric2013 的帖子

eric2013:case WM_NOTIFICATION_CLICKED:
      a = GUI_GetTime();
      break;
                    
/* ICON控件 .. (2015-10-16 18:50) 
好的,非常感谢,但是这里有个缺陷:非得到RELEASED松开时才能得到效果。 我想做到按住  够时间自动 弹框。而不是松手才检测,斑竹有什么方法?
回复

使用道具 举报

11

主题

103

回帖

31

积分

初级会员

积分
31
 楼主| 发表于 2015-10-19 15:27:17 | 显示全部楼层

回 qq27488 的帖子

qq27488:好的,非常感谢,但是这里有个缺陷:非得到RELEASED松开时才能得到效果。 我想做到按住  够时间自动 弹框。而不是松手才检测,斑竹有什么方法?  (2015-10-19 09:52) 
5楼的解决方案我 也找出来了, 长按 的正确用法:
1.CLICKED  时 创建一GUI定时器(只有周期模式,周期时间可设,我 选1s)
2.在case WM_TIMER  里处理定时器(够1s才进这里)
3.在 RELEASE 中  DELETETIMER定时器 (如果不够 1s松手,定时器在起作用前被删除了)
回复

使用道具 举报

11

主题

103

回帖

31

积分

初级会员

积分
31
 楼主| 发表于 2015-10-30 11:42:02 | 显示全部楼层
现在这个长按方法用久了,发现个BUG,多次长按经常死机,搞了几天,
认为主要出错在这 两方面:
1.定时器被再创建(本来已经存在),
2.定时器未创建 而被删除

快速多次长按就会死机,在针对上面两个方面搞了挺久,还是没什么效果
难道我思路是错的?
但是只有用到长按(WM定时器触发 )功能才死机,
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115694
QQ
发表于 2015-10-30 12:08:15 | 显示全部楼层

回 qq27488 的帖子

qq27488:现在这个长按方法用久了,发现个BUG,多次长按经常死机,搞了几天,
认为主要出错在这 两方面:
1.定时器被再创建(本来已经存在),
2.定时器未创建 而被删除

....... (2015-10-30 11:42) 
如果emWin官方对控件加上长按支持是最好的,
emWin里面有一个控件spinbox是支持长按的。
回复

使用道具 举报

11

主题

103

回帖

31

积分

初级会员

积分
31
 楼主| 发表于 2015-11-26 11:05:00 | 显示全部楼层
关于emwin 长按控件触发,我的体会是用UCOS定时器,稳定(用了一个月没见什么问题)。当然其他RTOS也类似。
因为以前帖子都是我探讨过程,可以直接不看,看这层楼来了解如何使用 长按触发这个功能:
先上代码:
点击时
QQ截图20151126105818_看图王.jpg
松开始
QQ截图20151126110127_看图王.jpg
其实注释里面都解释很清楚了,顺便一提,长按里面用GUI的定时器不稳定。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-13 01:41 , Processed in 0.258262 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表