搜索
aardio官方社区 门户 查看主题

关于在程序中加入快捷键的问题

发布者: zhuyuruicu | 发布时间: 2011-5-31 11:21| 查看数: 8205| 评论数: 18|帖子模式

现在能够使用alt的加入方法了,但是类似ctrl+F的快捷键怎么添加谁有思路啊,不要说开多线程,呵呵,附成功代码,给比我还菜的菜鸟看看

import win.ui;

import win.ui.menu;
/*DSG{{*/
var winform = win.form(parent=...; text="aardio Form";right=349;bottom=249 )
winform.add(  )

/*}}*/



winform.helpmenu = win.ui.popmenu(winform);
//创建弹出菜单

winform.helpmenu.add('帮助(&H&)',function(id){

     winform.msgbox(
"使用帮助")
});

winform.helpmenu.add();
//分隔线
winform.helpmenu.add('关于(&A&)',function(id){

     winform.msgbox(
"使用关于")
})

var menu = win.ui.menu(winform);//创建主菜单

menu.add('帮助(&H&)',winform.helpmenu)



winform.show()

win.loopMessage();
return winform;




最新评论

carl 发表于 2011-5-31 11:47:33

[size=2][color=#0000ff]import[/color][color=#000000] win.ui; [/color][color=#00

import win.ui;
/*DSG{{*/
var winform = win.form(parent=...; text="aardio Form";right=349;bottom=249 )
winform.add(  )
/*}}*/
io.open()
winform.reghotkey(
function(id,mod,vk){ //注册热键按 Ctrl+F
    if(win.getForeground()=winform.hwnd){
        io.print(
"收到快捷键命令")
    }
},0x2
/*_MOD_CONTROL*/,'F'
#)

winform.show()
win.loopMessage();


点评

不错,就是这样,谢了  发表于 2011-5-31 13:50
o00viw 发表于 2011-5-31 23:38:42

[quote][size=2][color=#999999]carl 发表于 2011-5-31 11:47[/color] [url=forum.php?mo

carl 发表于 2011-5-31 11:47
import win.ui;
/*DSG{{*/
var winform = win.form(parent=...; text="aardio Form";right=349;bottom=249 ...

这样问题虽然解决了,但毕竟会占用一个全局热键,终竟不是一个好办法。有更好的办法吗?
lujjjh 发表于 2011-6-8 22:09:11

[quote][size=2][color=#999999]o00viw 发表于 2011-5-31 23:38[/color] [url=forum.php?

o00viw 发表于 2011-5-31 23:38
这样问题虽然解决了,但毕竟会占用一个全局热键,终竟不是一个好办法。有更好的办法吗?

@zhuyuruicu
你的写法有些问题,应当是 帮助(&H),而不是 帮助(&H&)
& 符号表示将下一个字符设置为快捷键

@o00viw
至于o00viw提出的问题,可以用窗体的消息回调来处理:
import key;
import win.ui;
/*DSG{{*/
var winform = win.form(parent=...; text="aardio Form";right=349;bottom=249 )
winform.add(  )
/*}}*/

winform.wndproc =
function(hwnd,message,wparam,lparam){
   
select (message) {
        
case 0x100/*_WM_KEYDOWN*/ {
            
if (key.getState('CTRL') && wparam == 0x74/*_VK_F5*/) {
                win.msgbox(
"Ctrl+F5");
            }
        }
    }
}

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


o00viw 发表于 2011-6-9 08:59:46

[quote][size=2][color=#999999]lujjjh 发表于 2011-6-8 22:09[/color] [url=forum.php?m

lujjjh 发表于 2011-6-8 22:09
@zhuyuruicu:
你的写法有些问题,应当是 帮助(&H),而不是 帮助(&H&)
& 符号表示将下一个字符设置为快 ...

谢谢,解决了一个长期遗留下来的问题。
fantasynew 发表于 2011-6-16 12:13:41

看帖子总有收获,这个问题正是我想知道的

看帖子总有收获,这个问题正是我想知道的
zhuyuruicu 发表于 2011-6-16 12:22:11

[quote][size=2][color=#999999]lujjjh 发表于 2011-6-8 22:09[/color] [url=forum.php?m

lujjjh 发表于 2011-6-8 22:09
@zhuyuruicu:
你的写法有些问题,应当是 帮助(&H),而不是 帮助(&H&)
& 符号表示将下一个字符设置为快 ...

无语,我试过&H,在我电脑上不管事,但改成&H&就管事了,不知道为什么

点评

“无语”神论  发表于 2011-6-17 14:29
sj798 发表于 2012-1-24 20:19:52

谢谢帖子解决问题,顶

谢谢帖子解决问题,顶
alin999 发表于 2012-1-26 09:38:30

我的问题还没解决

我的问题还没解决
aardi 发表于 2017-9-9 07:40:50
carl 发表于 2011-5-31 11:47
import win.ui;
/*DSG{{*/
var winform = win.form(parent=...; text="aardio Form";right=349;bottom=24 ...

加入前台判断来解决似乎更简洁,但是试了一下,这样会使其他程序的相同热键失效
aardi 发表于 2017-9-28 10:49:19
lujjjh 发表于 2011-6-8 22:09
@zhuyuruicu:
你的写法有些问题,应当是 帮助(&H),而不是 帮助(&H&)
& 符号表示将下一个字符设置为快 ...

用回调函数加key.getState()方法,实测CTRL、SHIFT好使,但是ALT没反应。好奇又试了一下WIN, 也可以,就是ALT不行,怎么解?
Jacen.He 发表于 2017-9-28 12:45:29
aardi 发表于 2017-9-28 10:49
用回调函数加key.getState()方法,实测CTRL、SHIFT好使,但是ALT没反应。好奇又试了一下WIN, 也可以,就 ...

因为ALT键触发的是 _WM_SYSKEYDOWN 而不是 _WM_KEYDOWN

创建窗口快捷键一般不需要自己去处理消息,用 win.ui.accelerator 就可以了,其实我在aardio 范例里都是这么用:
import win.ui;
/*DSG{{*/
var winform = win.form(text="按 CTRL + N 或 ALT + C";right=759;bottom=469)
winform.add()
/*}}*/

import win.ui.accelerator;
win.ui.accelerator({

    {
        ctrl =
true; vkey = 'N'#;
        oncommand =
function() winform.msgbox("CTRL+N");
    };  
   
    {
        alt =
true; vkey = 'C'#;
        oncommand =
function() winform.msgbox("ALT+C");
    };  
   
}, winform );

winform.show();
win.loopMessage();
另外 winform.isDialogMessage,winform.translateAccelerator这些事件里都可以添加快捷键,
增加一个wndproc去处理快捷键当然也可以,但是要知道所有窗口消息都会调用一次wndproc,为避免不必要的调用可以选择其他方法。
aardi 发表于 2017-9-28 14:43:41
本帖最后由 aardi 于 2017-9-28 14:45 编辑

win.ui.accelerator 是正解,完全好用!(只是新手不知道有这个东西可以直接用,IDE标准库和帮助文档里好像都没提到)
Jacen.He 发表于 2017-9-28 15:05:17
aardi 发表于 2017-9-28 14:43
win.ui.accelerator 是正解,完全好用!(只是新手不知道有这个东西可以直接用,IDE标准库和帮助文档里好像 ...

aardio的库函数的确是太多了,
但还不至于找不到文档和范例,在《库函数文档》里点“win.ui” 名字空间,再点 "accelerator" 会找不到?!
与界面有关的都在 "win.ui"这个名字空间下呀?!

而且我在范例里快捷键都是用 win.ui.accelerator,
论坛讨论这个库的帖子也不少。
strong 发表于 2017-9-28 15:34:47
aardi 发表于 2017-9-28 14:43
win.ui.accelerator 是正解,完全好用!(只是新手不知道有这个东西可以直接用,IDE标准库和帮助文档里好像 ...

那你可以为新手们做点什么,
下次有象你一个迷茫的新手,请把这个帖子链接发给他,或者教给他怎么搜索论坛。
直接打开百度都能搜索到 win.ui.accelerator

仅仅是靠 aardio 的帮助文档也不能收录所有的东西。
象 win.ui.accelerator 这些在文档里有,你不一样还是会说找不到,
就是放到 aardio开始页的入门教程,一样会有人说找不到。
aardi 发表于 2017-9-29 09:12:53
本帖最后由 aardi 于 2017-9-29 09:14 编辑

我是说按F1出来的标题为"aardio使用手册"的IDE内置帮助文档(windowns帮助文件),那里确实没有(没法贴图),只有:目录-函数库-标准库-win库-控件-winui.toolbar类,就结束了,没有列出全部ui(哪怕有个名称或链接也好)。而IDE的 主页-开发指南和文档资源-在线文档,点击后浏览器空白(观察网页地址是:http://api.aardio.com/aardio/doc/document/,尝试了两种浏览器都是空白)。
  而网站主页上方横幅式主菜单“文档”(http://bbs.aardio.com/doc/)里面,aardio编程语言-aardio参考手册 和F1帮助文档是完全一样的。顺便说一下,"WIN API参考手册“(http://bbs.aardio.com/doc/winapi)估计也是无效的,因为点击后跳转到网站主页http://bbs.aardio.com/doc/winapi
  然后IDE左下方的库-标准库-win窗口操作 下面也没有 ui (双击打开”默认库“看看也不像)。
  所以还真是不知道这个"《库函数文档》"具体在哪里 :(
  另外由于是新手,可能还没用到带有 win.ui.accelerator的范例,而且因为急于解决问题,基本上都是根据关键字,在整个aardio安装目录搜索源文件,搜到后只关注了关键字附近的内容,而没注意其他部分。
  还有,论坛讨论里,搜”快捷键“、”键“等,出来的帖子里,最佳的也就是这个使用key.getState()了,除非已经知道了accelerator这个词才会去搜accelerator。
zhuzhuhawk 发表于 2017-9-29 10:37:37
学习了
Jacen.He 发表于 2017-9-29 12:09:15
aardi 发表于 2017-9-29 09:12
我是说按F1出来的标题为"aardio使用手册"的IDE内置帮助文档(windowns帮助文件),那里确实没有(没法贴图) ...

你先不要激动,
《库函数文档》 不在 《aardio帮助文档》里,
《aardio帮助文档》- 主要是介绍aardio的基本语法和核心库。

我很惊讶你一直说找不到《库函数文档》,尤其是在我上面提示过你的情况下你仍然说找不到,
但确实打开aardio就有,也不难找到,有图有真相:
lib.png

aardio中所有与窗口界面有关的库都在 win.ui 名字空间下,
模块化的aardio标准库 - 是最不可能让你找不到需要的函数的,有图有真相:

acc.png

我很感谢你把我们网站上所有失效的链接都找出来,

WINAPI手册因为是用工具自动转换的存在错漏,所以我建议大家用MSDN,这个资料没有意义所以我删了。
这个链接我也删了,但升级论坛的时候不知道什么时候不小心复制回去了。

而开始页上的链接失效,是因为PHP升级PHP7.1,这个页面的代码没有动过,就自己不行了,
因为网站上有《文档》的主链接,基本没有人上开始页去点,所以也没人能发现。
因为这些链接要么是已经废弃,要么没有人去使用,所以的确是我疏忽了,
但即然别人发现不了的死链接你都发现了,这么任何人都能一眼看到的 win.ui.accelerator - 你找不到?! 我告诉你上哪找了还是找不到?!

你在论坛搜索“快捷键”,“键”你都搜了,你不会搜一下“加速键” ?!
accelerator  本来是叫“加速键” 这些基础的电脑知识也要 aardio的帮助文档给你准备好么?!

百度也要aardio的帮助文档教你才去用么?!
bd.png


aardio的标准库函数不计其数,我都能保证你打开aardio一眼就能扫到么?!
人家学了几年的aardio还谦虚的称自己为新手,你遇到一些东西不懂不知道 - 有什么好生气的?!
你以为你跟我一样,是 aardio的活字典?!

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

GMT+8, 2017-11-23 21:08 , Processed in 0.140625 second(s), 22 queries , WinCache On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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