社区
Delphi
帖子详情
一个简单的问题:我在主菜单定义快捷键无效
myxfang
2001-06-27 11:52:48
我在MDiform定义一个菜单项目是caption=F1 系统维护 shorcut=F1
但是运行时按键无效
我总共定义F1..F9但是没有一个可以成功(定义Ctrl+A等也不行)
还有其他办法定义?
谢谢!
...全文
460
37
打赏
收藏
一个简单的问题:我在主菜单定义快捷键无效
我在MDiform定义一个菜单项目是caption=F1 系统维护 shorcut=F1 但是运行时按键无效 我总共定义F1..F9但是没有一个可以成功(定义Ctrl+A等也不行) 还有其他办法定义? 谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
37 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
weenyboy
2001-06-28
打赏
举报
回复
窗体文件
object Form1: TForm1
Left = 189
Top = 103
Width = 544
Height = 375
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
Menu = MainMenu1
OldCreateOrder = False
OnCreate = FormCreate
OnDestroy = FormDestroy
PixelsPerInch = 96
TextHeight = 13
object MainMenu1: TMainMenu
Left = 152
Top = 48
object File1: TMenuItem
Caption = '&File(F1)'
object mmNew: TMenuItem
Caption = 'New'
end
object mmOpen: TMenuItem
Caption = 'Open'
end
end
object Edit1: TMenuItem
Caption = '&Edit(F2)'
object mmCopy: TMenuItem
Caption = 'Copy'
end
object mmPast: TMenuItem
Caption = 'Past'
end
end
end
end
weenyboy
2001-06-28
打赏
举报
回复
对不起,上面的代码有一处小小错误,不过你应该能够找出来
下面是完整代码 delphi 5 + w2k测试通过
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Menus, StdCtrls;
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
File1: TMenuItem;
Edit1: TMenuItem;
mmNew: TMenuItem;
mmOpen: TMenuItem;
mmCopy: TMenuItem;
mmPast: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
procedure HotKeyProc(var Message: TMessage); Message WM_HOTKEY;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
RegisterHotKey(Handle, 1001, 0, VK_F1);
RegisterHotKey(Handle, 1002, 0, VK_F2);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
UnregisterHotKey(Handle, 1001);
UnregisterHotKey(Handle, 1002);
end;
procedure TForm1.HotKeyProc(var Message: TMessage);
const
Arr: Array[1001..1002] of Word =
(Ord('F'),Ord('E'));
begin
PostMessage(Handle, WM_KEYDOWN, vk_F10, 0);
PostMessage(Handle, WM_KEYUP, vk_F10, 0);
PostMessage(Handle, WM_KEYDOWN, Arr[Message.WParam], 0);
PostMessage(Handle, WM_KEYUP, Arr[Message.WParam], 0);
end;
end.
wonderxin
2001-06-28
打赏
举报
回复
//to weenyboy(小公子(戒除游戏,多多罐水)):
//我的如下,但下拉菜单没弹出来,请指教!
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Menus;
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
file1: TMenuItem;
asdf1: TMenuItem;
sdf1: TMenuItem;
gfe1: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
procedure HotProc(var Message: TMessage); Message WM_HotKey;
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
RegisterHotKey(Handle, 1001, 0, vk_F10)
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
UnregisterHotKey(Handle, 1001);
end;
procedure TForm1.HotProc(var Message: TMessage);
//var handle:hwnd;
begin
case Message.Msg of
1001: begin
PostMessage(Handle, WM_KEYDOWN, vk_F10, 0);
PostMessage(Handle, WM_KEYUP, vk_F10, 0);
PostMessage(Handle, WM_KEYDOWN, texttoshortcut('alt+f'), 0); //比如使用(&File)菜单
PostMessage(Handle, WM_KEYUP, texttoshortcut('alt+f'), 0);
end;
end;
//即使完全按你的,效果也一样(按f10时,只是file被按下,而没有弹出菜单)
end;
end.
wonderxin
2001-06-28
打赏
举报
回复
to weenyboy(小公子(戒除游戏,多多罐水)):
能不能把你的单元文件贴来看看?谢谢!
myxfang
2001-06-28
打赏
举报
回复
up
myxfang
2001-06-28
打赏
举报
回复
告诉你一个方案:
能不能模拟按f10键,好像是perform(),不知如何使用?
或者如何把f1转成f10键?
weenyboy
2001-06-28
打赏
举报
回复
绝对正确,百试不爽
wonderxin
2001-06-28
打赏
举报
回复
好像下拉菜单没弹出来呢^&^
wonderxin
2001-06-28
打赏
举报
回复
//
weenyboy
2001-06-28
打赏
举报
回复
定义热键f2-f9,在热键处理中向窗体发消息来模拟打开主菜单
formcreate:
RegisterHotKey(Handle, 1001, 0, vk_F2)
formdestroy:
UnregisterHotKey(Handle, 1001);
procedure HotProc(var Message: TMessage); Message WM_HotKey;
begin
case Message.Msg of
1001: begin
PostMessage(Handle, WM_KEYDOWN, vk_F10, 0);
PostMessage(Handle, WM_KEYUP, vk_F10, 0);
PostMessage(Handle, WM_KEYDOWN, Ord('F'), 0); //比如使用(&File)菜单
PostMessage(Handle, WM_KEYUP, Ord('F'), 0);
end;
end;
mysine
2001-06-28
打赏
举报
回复
当然可以了。
捕捉全局热键
调用API函数
或是设置个钩子不难办到。
myxfang
2001-06-28
打赏
举报
回复
高手:
能不能在主菜单按f1弹出下拉菜单?快,我要加分!如果分数不够,我可再加
myxfang
2001-06-28
打赏
举报
回复
非常感谢 weenyboy(小公子(戒除游戏,多多罐水)) 我给你满分
感谢wonderxin(颜鑫的忠实崇拜者★★★★★) 的关注,分不多,下次再分给你
myxfang
2001-06-28
打赏
举报
回复
up
weenyboy
2001-06-28
打赏
举报
回复
to wonderxin(颜鑫的忠实崇拜者★★★★★)
呵呵~ 你的问题还比较奇怪, 你最好去yahoo搜索一下可能会好很多
to myxfang(小方) 》自己变通一下就可以了嘛,既然知道方法,为什么不能解决呢?
procedure TForm1.FormCreate(Sender: TObject);
var
i: Integer;
begin
for i := 1001 to 1009 do
RegisterHotKey(Handle, i, 0, VK_F1 + i - 1001);
end;
procedure TForm1.FormDestroy(Sender: TObject);
var
i: Integer;
begin
for i := 1001 to 1009 do
UnregisterHotKey(Handle, i);
end;
procedure TForm1.HotKeyProc(var Message: TMessage);
var
i: Integer;
begin
PostMessage(Handle, WM_KEYDOWN, vk_F10, 0);
PostMessage(Handle, WM_KEYUP, vk_F10, 0);
for i := 1002 to Message.WParam do
begin
PostMessage(Handle, WM_KEYDOWN, vk_Right, 0);
PostMessage(Handle, WM_KEYUP, vk_Right, 0);
end;
PostMessage(Handle, WM_KEYDOWN, vk_Return, 0);
PostMessage(Handle, WM_KEYUP, vk_Return, 0);
end;
myxfang
2001-06-28
打赏
举报
回复
是form
wonderxin
2001-06-28
打赏
举报
回复
菜单属于非客户区,不会响应onkeypress
myxfang
2001-06-28
打赏
举报
回复
我不希望在菜单上有其他快捷键,其实是这样的菜单:
F1 进货管理 F2 销货管理 F3 系统维护
能不能
F1 = 按F10键+回车键
F2 = 按F10键+右移键+回车键
F3 = 按F10键+右移键+右移键+回车键
.
.
.
对了form 不会发生onkeypress事件(keypreview:=true)?
wonderxin
2001-06-28
打赏
举报
回复
原来是wparam啊~~haha~~~果然好用
谢过!
需要分吗?请到这里走一趟:http://www.csdn.net/expert/topic/174/174046.shtm
wonderxin
2001-06-27
打赏
举报
回复
有这种设置方法吗?
还是这样吧:&File--------按alt+f将弹出下拉菜单(windows的标准做法,我想你不会愿意打破这种规则吧:)
加载更多回复(17)
android开发常用
快捷键
在Android开发过程中,掌握常用的
快捷键
能够显著提升开发效率,减少不必要的鼠标操作,使编码更加流畅。以下是一些Android开发中常见的
快捷键
及其用途: **模拟器使用中的
快捷键
:** 1. **Home键**: 小房子键,...
Python-pythonterminalmenucli
一个
快速创建命令行
菜单
的工具
1. **创建
菜单
**:通过
简单
的API调用,可以轻松
定义
菜单
结构,包括
主
菜单
、子
菜单
以及各个
菜单
项的文本和对应的操作函数。 2. **用户交互**:库提供了处理用户输入的机制,无论是箭头键导航、数字选择还是键盘...
2021-2022计算机二级等级考试试题及答案No.4871.docx
21. **Word2000插入文件**:在Word2000中,通过“插入”->“文件”可以将另
一个
文档内容插入到当前光标位置。 22. **查询设计视图**:在查询设计视图中,可以添加数据库表和查询作为数据源。 23. **目录路径**:...
halcon工业应用实用教程v1.9.pdf
- **2.2.1.5 插入程序**: 在当前程序中插入另
一个
程序。 - **2.2.1.6 保存**: 保存当前程序。 - **2.2.1.7 程序另存为**: 将当前程序另存为新的文件。 - **2.2.1.8 将函数另存为**: 仅保存当前选中的函数。 - *...
npp.8.1.9.2.portable.x64.zip
总结来说,Notepad++ 8.1.9.2便携版是
一个
强大的文本编辑工具,提供自
定义
的语法高亮、
快捷键
设置和丰富的配置选项。压缩包内的文件各自承担着不同的角色,共同确保了Notepad++的正常运行和用户个性化需求的满足。...
Delphi
5,930
社区成员
262,938
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章