搜索
查看: 2151|回复: 4

[界面] HL窗体怎么不响应onOk和onCance事件?

[复制链接]

12

主题

57

帖子

421

积分

二级会员

Rank: 3Rank: 3

积分
421
发表于 2018-4-25 09:38:56 | 显示全部楼层 |阅读模式
在普通的winform窗体里,按回车和esc可以响应新加的事件,为什么加了web.layout就不再响应了,是不是因为web.layout接管了事件响应?
普通窗体代码,可以响应
  1. import win.ui;
  2. /*DSG{{*/
  3. var winform = win.form(text="aardio form";right=759;bottom=469)
  4. winform.add()
  5. /*}}*/

  6. winform.onOk = function(){
  7.     winform.msgbox("Ok")
  8. }
  9. winform.onCancel = function(){   
  10.     winform.msgbox("Cancel")
  11. }
  12. winform.show()
  13. win.loopMessage();
复制代码


HL窗体代码,没有响应
  1. import win.ui;
  2. /*DSG{{*/
  3. var winform = win.form(text="HTMLayout";right=759;bottom=469;parent=...)
  4. winform.add()
  5. /*}}*/

  6. import web.layout;
  7. wbLayout = web.layout(winform);
  8. winform.onOk = function(){
  9.     winform.msgbox("Ok")
  10. }
  11. winform.onCancel = function(){   
  12.     winform.msgbox("Cancel")
  13. }
  14. winform.show();
  15. win.loopMessage();
复制代码
回复

使用道具 举报

4

主题

63

帖子

471

积分

二级会员

Rank: 3Rank: 3

积分
471
发表于 2018-4-25 11:06:39 | 显示全部楼层
你应该好好看看web.layout的语法提示:

web.layout(窗口对象,捕获事件)
从窗口对象创建HTMLayout窗口
参数二默认为 _HL_HANDLE_LITE - 仅允许捕获按钮命令等基本交互事件

以下是添加的weblayout事件处理的示例,你可以看看htmlayout窗体对回车键的响应情况:
  1. import win.ui;
  2. /*DSG{{*/
  3. var winform = ..win.form(text="HTMLayout事件流";right=599;bottom=399)
  4. winform.add()
  5. /*}}*/

  6. import web.layout;
  7. wbLayout = web.layout( winform );

  8. wbLayout.onButtonPress = function (ltTarget,ltOwner,reason,behaviorParams) {
  9.         winform.msgbox("按钮")
  10. }
  11. wbLayout.onHyperlinkClick = function (ltTarget,ltOwner,reason,behaviorParams) {
  12.         winform.msgbox("链接")
  13. }
  14. wbLayout.html = /**
  15. <!doctype html>
  16. <html>
  17. <head>
  18.     <style type="text/css">
  19.     html,body{ height:100%; margin:0; }
  20.     </style>
  21. </head>
  22. <body>
  23.      <button>http://bbs.aardio.com </button>
  24.      <a href="">http://bbs.aardio.com </a>
  25. </body>
  26. </html>
  27. **/
  28. winform.onOk = function(){
  29.     winform.msgbox("Ok")
  30. }
  31. winform.onCancel = function(){   
  32.     winform.msgbox("Cancel")
  33. }
  34. winform.show();
  35. win.loopMessage();
复制代码


你要是HTMLayout就不熟悉,建议先看看
HTMLayout 事件捕获与冒泡过程 - http://bbs.aardio.com/forum.php? ... &extra=page%3D1
HTMLayout 常见问题收录 - http://bbs.aardio.com/forum.php? ... &extra=page%3D1
回复

使用道具 举报

12

主题

57

帖子

421

积分

二级会员

Rank: 3Rank: 3

积分
421
 楼主| 发表于 2018-4-25 15:00:29 | 显示全部楼层
在web.layout创建加了0xFFFF/*_HL_HANDLE_ALL*/,并增加了按键响应可以响应回车键和ESC键了,

不过在消息弹窗上按回车键,wblayout的事件又响应了,消息弹窗又出来了,得再想办法分辨一下是在wbLayout上按的回车键,还是在消息弹窗上按的回车键

  1. import win.ui;
  2. /*DSG{{*/
  3. var winform = win.form(text="HTMLayout";right=759;bottom=469;parent=...)
  4. winform.add()
  5. /*}}*/

  6. import web.layout;
  7. wbLayout = web.layout(winform,0xFFFF/*_HL_HANDLE_ALL*/);
  8. wbLayout.html = /**
  9. <!doctype html>
  10. <html>
  11. <head>
  12. </head>
  13. <body>
  14. </body>
  15. </html>
  16. **/
  17. winform.onOk = function(){
  18.         winform.msgbox("Ok")
  19. }
  20. winform.onCancel = function(){
  21.         winform.msgbox("Cancel")
  22. }
  23. wbLayout.onKeyUp = function (ltTarget,ltOwner,keyCode, altState, ltKeyParams) {
  24.         if(keyCode=0xD/*_VK_ENTER*/){
  25.                 winform.onOk();
  26.         }
  27.         if(keyCode=0x1B/*_VK_ESC*/){
  28.                 winform.onCancel()
  29.         }
  30. }
  31. winform.show();
  32. win.loopMessage();
复制代码
回复

使用道具 举报

186

主题

2542

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13974
发表于 2018-4-25 15:14:17 | 显示全部楼层
iaauto 发表于 2018-4-25 15:00
在web.layout创建加了0xFFFF/*_HL_HANDLE_ALL*/,并增加了按键响应可以响应回车键和ESC键了,

不过在消 ...

二楼 我心飞翔1995提供的方案更好一些,
_HL_HANDLE_ALL 是没必要的,应当尽量少的接收事件,而不是尽可能多的接收事件。

另外,你这个代码存在一个低级错误,
你回车弹对话框,放开回车键的时候对话框已经关了,所以是父窗口接收事件。
改成 onKeyDown 就没这个问题了。

这要看你回车是干什么,如果是这种情况,就要用 onKeyDown
回复

使用道具 举报

186

主题

2542

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13974
发表于 2018-4-25 15:16:47 | 显示全部楼层
aardio处理快捷键的方式有很多,
例如 winform.translateAccelerator winform.isDialogMessage 都可以自定义快捷键。
打开范例看一下,这些问题都有范例可以参考。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2018-9-22 22:41 , Processed in 0.062500 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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