aardio 官方社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 19027|回复: 18

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

  [复制链接]

9

主题

79

回帖

499

积分

新手入门

积分
499
发表于 2011-5-31 11:21:25 | 显示全部楼层 |阅读模式
现在能够使用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;




20

主题

181

回帖

1293

积分

培训班

积分
1293
发表于 2011-5-31 11:47:33 | 显示全部楼层
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

51

主题

213

回帖

1548

积分

四级会员

积分
1548
发表于 2011-5-31 23:38:42 | 显示全部楼层
carl 发表于 2011-5-31 11:47
import win.ui;
/*DSG{{*/
var winform = win.form(parent=...; text="aardio Form";right=349;bottom=249 ...

这样问题虽然解决了,但毕竟会占用一个全局热键,终竟不是一个好办法。有更好的办法吗?

33

主题

497

回帖

3294

积分

荣誉会员

积分
3294
发表于 2011-6-8 22:09:11 | 显示全部楼层
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();


51

主题

213

回帖

1548

积分

四级会员

积分
1548
发表于 2011-6-9 08:59:46 | 显示全部楼层
lujjjh 发表于 2011-6-8 22:09
@zhuyuruicu:
你的写法有些问题,应当是 帮助(&H),而不是 帮助(&H&)
& 符号表示将下一个字符设置为快 ...

谢谢,解决了一个长期遗留下来的问题。

40

主题

520

回帖

3035

积分

新手入门

超级初学者

积分
3035
发表于 2011-6-16 12:13:41 来自手机 | 显示全部楼层
看帖子总有收获,这个问题正是我想知道的

9

主题

79

回帖

499

积分

新手入门

积分
499
 楼主| 发表于 2011-6-16 12:22:11 | 显示全部楼层
lujjjh 发表于 2011-6-8 22:09
@zhuyuruicu:
你的写法有些问题,应当是 帮助(&H),而不是 帮助(&H&)
& 符号表示将下一个字符设置为快 ...

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

点评

“无语”神论  发表于 2011-6-17 14:29

7

主题

115

回帖

747

积分

三级会员

积分
747
QQ
发表于 2012-1-24 20:19:52 | 显示全部楼层
谢谢帖子解决问题,顶

1

主题

22

回帖

193

积分

一级会员

积分
193
发表于 2012-1-26 09:38:30 | 显示全部楼层
我的问题还没解决

0

主题

11

回帖

71

积分

一级会员

积分
71
发表于 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 ...

加入前台判断来解决似乎更简洁,但是试了一下,这样会使其他程序的相同热键失效

0

主题

11

回帖

71

积分

一级会员

积分
71
发表于 2017-9-28 10:49:19 | 显示全部楼层
lujjjh 发表于 2011-6-8 22:09
@zhuyuruicu:
你的写法有些问题,应当是 帮助(&H),而不是 帮助(&H&)
& 符号表示将下一个字符设置为快 ...

用回调函数加key.getState()方法,实测CTRL、SHIFT好使,但是ALT没反应。好奇又试了一下WIN, 也可以,就是ALT不行,怎么解?

170

主题

2184

回帖

1万

积分

管理员

积分
13236
发表于 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,为避免不必要的调用可以选择其他方法。

0

主题

11

回帖

71

积分

一级会员

积分
71
发表于 2017-9-28 14:43:41 | 显示全部楼层
本帖最后由 aardi 于 2017-9-28 14:45 编辑

win.ui.accelerator 是正解,完全好用!(只是新手不知道有这个东西可以直接用,IDE标准库和帮助文档里好像都没提到)

170

主题

2184

回帖

1万

积分

管理员

积分
13236
发表于 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,
论坛讨论这个库的帖子也不少。

0

主题

23

回帖

121

积分

一级会员

积分
121
发表于 2017-9-28 15:34:47 | 显示全部楼层
aardi 发表于 2017-9-28 14:43
win.ui.accelerator 是正解,完全好用!(只是新手不知道有这个东西可以直接用,IDE标准库和帮助文档里好像 ...

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

仅仅是靠 aardio 的帮助文档也不能收录所有的东西。
象 win.ui.accelerator 这些在文档里有,你不一样还是会说找不到,
就是放到 aardio开始页的入门教程,一样会有人说找不到。

0

主题

11

回帖

71

积分

一级会员

积分
71
发表于 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。

3

主题

6

回帖

90

积分

一级会员

积分
90
发表于 2017-9-29 10:37:37 | 显示全部楼层
学习了

170

主题

2184

回帖

1万

积分

管理员

积分
13236
发表于 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的帮助文档教你才去用么?!
bd.png

6

主题

8

回帖

110

积分

一级会员

积分
110
发表于 2018-3-30 11:57:04 | 显示全部楼层
对于新手来说,搜索很重要。这帖子对来我说很重要,又来标记一下。很多时候,有想法,但不知道怎么表达出来,所以要先要学会搜索。
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2024-4-15 04:59 , Processed in 0.066661 second(s), 27 queries .

Powered by Discuz! X3.5

Copyright © 2001-2023 Tencent Cloud.

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