数据窗响应热键的问题,高手请进!!

tomhuang 2004-07-09 10:39:30
我的窗口上只有一个数据窗控件,我想让用户不管在数据窗的哪个字段中按一个热键实现保存功能,例如按F10键,这样应该怎么做呢??
...全文
189 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
Hanson_bati_zhu 2004-07-12
  • 打赏
  • 举报
回复
在OTHER事件中的
IF Message.Number = 786 THEN
这句
等同于
IF Message.Number = WM_HOTKEY THEN

我一时心急,没有用常量名替代
Hanson_bati_zhu 2004-07-12
  • 打赏
  • 举报
回复
作个实验

设置实例常量如下:
CONSTANT INT HK_ID_1 = 101
CONSTANT LONG WM_HOTKEY = 786
CONSTANT UINT VK_F10 = 121

设置外部函数声明如下:
Function long RegisterHotKey(long hwnd,long id,ulong flags,ulong keycode) library 'user32.dll'
Function long UnregisterHotKey(long hwnd,long id) library 'user32.dll'

在这个数据窗口所在的窗口的OPEN事件中写
RegisterHotKey(Handle(THIS),HK_ID_1,0,VK_F10)

CLOSE事件中写
UnregisterHotKey(Handle(THIS),HK_ID_1)

在OTHER事件中写
IF Message.Number = 786 THEN
IF wparam = HK_ID_1 THEN
//你要进行处理的代码
END IF
END IF


试试看,我在我这里实验是能够成功的
flyhot 2004-07-12
  • 打赏
  • 举报
回复
同意楼上
jiangjildy 2004-07-11
  • 打赏
  • 举报
回复
数据窗口新建用户事件,id为:pbm_dwnkey
里面如:
if key = KeyF10! then
cb_save.event clicked()
end if

这样就可以了,我就是这样实现的,运行得蛮好的,如果要求组合键,
加代码:
if keyflags = {0,1,2} then
if key = KeyF10! then
cb_save.event clicked()
end if
end if
tomhuang 2004-07-10
  • 打赏
  • 举报
回复
F1到F10都不行,晕...
boyfan007 2004-07-10
  • 打赏
  • 举报
回复
keyF10!已经被系统定义了,功能跟Alt一样了。
tomhuang 2004-07-10
  • 打赏
  • 举报
回复
楼上的,你测试过了吗?我这样做了:
数据窗口新建用户事件,id为:pbm_dwnkey
里面如:
if key = KeyF10! then
messagebox('','')
end if
没反应,你所说的100%是怎么得出的结论呢?!
treesoft 2004-07-09
  • 打赏
  • 举报
回复
新增一个事件,在externalEventID中选择pbm_dwnkey。为事件取个名字如ue_dwKey,在这个事件中写上代码:

if key = keyF10! then
...
end if
tomhuang 2004-07-09
  • 打赏
  • 举报
回复
窗口中的Key和systemkey事件都不行,救命啊...
Hanson_bati_zhu 2004-07-09
  • 打赏
  • 举报
回复
你试试看
在窗口中的Key或者systemkey事件
看看能不能触发这个事件
如果能的话,就在这里面处理吧

tomhuang 2004-07-09
  • 打赏
  • 举报
回复
楼上的,试过了,没用
whunvy 2004-07-09
  • 打赏
  • 举报
回复
数据窗口新建用户事件,id为:pbm_dwnkey
里面如:
if key = KeyF10! then
cb_save.trigger event clicked()
end if
tomhuang 2004-07-09
  • 打赏
  • 举报
回复
窗口的我也知道怎么做,但数据窗的就是做不出来。
jxjrsuibian 2004-07-09
  • 打赏
  • 举报
回复
数据窗口我没做过,不过你可以在窗口的key事件里实现同样的功能
lionkings 2004-07-09
  • 打赏
  • 举报
回复
数据窗口新建用户事件,id为:pbm_dwnkey
里面如:
if key = KeyF10! then
cb_save.trigger event clicked()
end if

这样100%啊 还有什么问题??
tomhuang 2004-07-09
  • 打赏
  • 举报
回复
是这样的,在数据窗中输入字母、数字都可以被捕获,但这些都有可能是用户输入的内容,作为功能热键,只能考虑使用用户不会输入的特殊字符,因此我考虑采用功能键F10,这种情况在业务中是普遍存在的,以前是用按钮给用户点,现在用户觉得用鼠标麻烦,想用热键来完成功能,所以有此一问,但看来高手不多啊...
qianfl 2004-07-09
  • 打赏
  • 举报
回复
你可以换别的键试试,楼上几位说的方法应该是可以的
Hanson_bati_zhu 2004-07-09
  • 打赏
  • 举报
回复
不好弄哦
消息好象都被PB吃掉了
Faint~~~
boyfan007 2004-07-09
  • 打赏
  • 举报
回复
F10应该被PB占用了,如果你窗口有菜单,你就知道F10为什么了。
tomhuang 2004-07-09
  • 打赏
  • 举报
回复
在数据窗中任何地方按F10。
加载更多回复(2)

609

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder DataWindow
社区管理员
  • DataWindow社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧