aardio 官方社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 10578|回复: 5

plus控件的双击事件如何写?

[复制链接]

2

主题

10

回帖

199

积分

一级会员

积分
199
发表于 2016-6-1 19:17:15 | 显示全部楼层 |阅读模式
请教如何写plus高级图像控件的双击事件,picturebox控件到可以用:
mainForm.picturebox.wndproc = function(hwnd,message,wParam,lParam){
        select(message) {
                 case(0x203/*_WM_LBUTTONDBLCLK*/ ){
                        //执行代码                        
            }
}
但plus控件却不行,请指点。

0

主题

5

回帖

46

积分

培训班

积分
46
发表于 2016-6-3 11:37:56 | 显示全部楼层
想要响应双击,需要 CS_DBLCLKS风格,plus没有,需要修改plus库的源码添加

166

主题

2154

回帖

1万

积分

管理员

积分
13056
发表于 2016-6-3 16:19:57 | 显示全部楼层
mickme 发表于 2016-6-3 11:37
想要响应双击,需要 CS_DBLCLKS风格,plus没有,需要修改plus库的源码添加

新版已加上可以处理双击,示例:
import win.ui;
/*DSG{{*/
var winform = win.form(text="plus控件双击演示")
winform.add(
plus={cls=
"plus";text="鼠标左键双击这里";left=122;top=79;right=504;bottom=107;font=LOGFONT(h=-24);notify=1;z=1}
)
/*}}*/

winform.plus.skin(
    color = {
        hover = 0xFFFF0000;
        active = 0xFF00FF00;
    }
)

winform.plus.onMouseDoubleClick =
function(wParam,lParam){
    winform.msgbox(
"鼠标双击")
}


winform.show();
win.loopMessage();


2

主题

10

回帖

199

积分

一级会员

积分
199
 楼主| 发表于 2016-6-3 21:22:53 | 显示全部楼层
非常感谢mickme和Jacen.He版主的回复。
昨天我想了好久,想到了一个变通的办法,因为之前版本中是支持plus单击事件的。如果在单击事件中记录两次单击的时间,并将两次单击的时间间隔与系统设置的鼠标双击间隔时间做比较,就可以模拟双击事件。
尽管这个代码已没有用了,仍希望贴出代码,如果有人看到,帮我看看关于时间的代码是否正确,我是下午在论坛翻关于时间的贴子后写的,现在程序测试能用。
代码如下:

  1. import win.ui;
  2. /*DSG{{*/
  3. mainForm = win.form(text="aardio form";right=759;bottom=469)
  4. mainForm.add(
  5. edit={cls="edit";text="edit";left=9;top=398;right=94;bottom=429;edge=1;z=2};
  6. edit2={cls="edit";text="edit2";left=103;top=398;right=242;bottom=429;edge=1;z=3};
  7. edit3={cls="edit";text="edit3";left=251;top=398;right=382;bottom=429;edge=1;z=4};
  8. edit4={cls="edit";text="edit4";left=389;top=398;right=469;bottom=429;edge=1;z=5};
  9. plus={cls="plus";left=7;top=7;right=749;bottom=380;edge=1;notify=1;z=1}
  10. )
  11. /*}}*/

  12. import fsys.dlg;

  13. //获得鼠标双击间隔时间
  14. GetDoubleClickTime = ::User32.api("GetDoubleClickTime","int()")

  15. mainForm.plus.skin(
  16.         background = {
  17.                 hover = "/res/images/btn-hover.png";
  18.                 focus = "/res/images/btn-focus.jpg";
  19.                 active = "/res/images/btn-active.png";
  20.                 disabled = "/res/images/btn-disabled.png";
  21.         }
  22. )

  23. var blClickFlag=true;  //单、双击交替标志

  24. mainForm.plus.oncommand = function(id,event){
  25.        
  26.         numClickTime=::GetDoubleClickTime();
  27.         //mainForm.edit4.text=numClickTime;
  28.         blClickFlag=!blClickFlag;
  29.         if(blClickFlag==false){  //第1单击
  30.                 tm = time.tick();
  31.                 //mainForm.edit.text=tonumber(tm);
  32.         }
  33.         elseif(blClickFlag==true){  //第2次单击(双击)
  34.                 tm2 = time.tick();
  35.                 //mainForm.edit2.text=tonumber(tm2);
  36.                 difftm=tonumber(tm2)-tonumber(tm);  //两次单击时间间隔
  37.                 //mainForm.edit3.text=difftm;
  38.                 if(difftm < numClickTime){
  39.                         imgPath = fsys.dlg.open("图像文件|*.jpg;*.gif;*.bmp;*.png|");
  40.                         if(!!imgPath){
  41.                                 mainForm.plus.background =imgPath;
  42.                         }
  43.                 }
  44.         }
  45. }

  46. mainForm.show()
  47. return win.loopMessage();

复制代码

27

主题

648

回帖

4138

积分

超级版主

积分
4138
发表于 2016-6-4 00:35:14 | 显示全部楼层
ybtx 发表于 2016-6-3 21:22
非常感谢mickme和Jacen.He版主的回复。
昨天我想了好久,想到了一个变通的办法,因为之前版本中是支持plus ...
不错的尝试,tm 这个最好不要用全局变量,mainForm.plus.tm 这种更明确的命名会好一些, blClickFlag 变量可以不要( 记录点击时间就已经表示单击开始了 )。另外双击而是两次连续的按下鼠标,而不是两次连续的单击。

代码供参考,你可以比一下跟你的代码有哪些不同:

  1. import win.ui;
  2. /*DSG{{*/
  3. mainForm = win.form(text="aardio form";right=759;bottom=469)
  4. mainForm.add(
  5. plus={cls="plus";left=7;top=7;right=749;bottom=380;edge=1;notify=1;z=1}
  6. )
  7. /*}}*/

  8. mainForm.plus.onMouseDown = function(wParam,lParam){
  9.     if( !mainForm.plus.clickTime ){
  10.         mainForm.plus.clickTime = time.tick();
  11.     }
  12.     else{
  13.         if( time.tick()-mainForm.plus.clickTime < ::User32.GetDoubleClickTime()){
  14.             mainForm.plus.onMouseDoubleClick(wParam,lParam);
  15.         }
  16.         mainForm.plus.clickTime = null;
  17.     }
  18. }

  19. import fsys.dlg;
  20. mainForm.plus.onMouseDoubleClick = function(id,event){
  21.     var imgPath = fsys.dlg.open("图像文件|*.jpg;*.gif;*.bmp;*.png|");
  22.     if(imgPath){
  23.         mainForm.plus.background = imgPath;
  24.     }
  25. }

  26. mainForm.show()
  27. return win.loopMessage();

复制代码

2

主题

10

回帖

199

积分

一级会员

积分
199
 楼主| 发表于 2016-6-6 10:30:39 | 显示全部楼层
非常感谢quicker版主的指点,代码原来还可以这么简单,看来我的设计思路还是不够精简。受益非浅。
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|aardio.com|aardio 官方社区 ( 皖ICP备09012014号 )

GMT+8, 2025-2-13 07:32 , Processed in 0.062796 second(s), 22 queries .

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

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