如何在窗体上设置一个热键?(100分)

  • 主题发起人 主题发起人 pq
  • 开始时间 开始时间
设置shortcut属性
 
另外,把你相同的问题删掉一个
 
wjiachun:
在哪设置Form的shortcut属性?
 
Sorry,竟然是Form的热键!
不过,光是一个Form还需要什么热键?
 
可以使用Hook,如果你要热键是全局的话,则Hook放在DLL中,如果只是你程序中才使用
,则将Hook放在你的Exe程序中就够了。
看看这里吧,有你需要的东西:
http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=202446
http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=198085
 
呵呵,我见识太低了,好好学习……
 
wjiachun:
不要这样,我也是初学者.....
 
可以这样吧:
假设快捷键为Ctrl-A,则在当前窗体的所有可视控件的KeyDown事件中
加入以下代码:
if (ssCtrl in Shift) and (chr(Key) in ['A', 'a']) then
begin

ShowMessage('Ctrl-A');
//执行你的代码
end;
 
如果是全局的hotkey,可以:
用RegisterHotKey, 下面的热键在全局(即使当前激活的是其他进程)有效
procedure TForm1.FormCreate(Sender: TObject);
begin
RegisterHotKey(Handle,123,MOD_CONTROL,integer('A'));
//123是自己定义的id ,热键是 ctrl+A
end;

Tform1 类定义加上一行:procedure ON_WM_HOTKEY(var m:TMessage);message WM_HOTKEY;

procedure TForm1.ON_WM_HOTKEY(var m: TMessage);
begin
if(m.WParam=123)then
//如果id是123
windows.Beep(1000,1000);
end;
 
如果仅仅是在当前窗口要hotkey:
1、设置form的KeyPreview为true
2、在form的 OnShortCut事件写:
if(Msg.CharCode=VK_你的热键)then
.........
 
在窗体的FORM ONKEYDOWN事件中加入:
procedure TForm1.FormKeyDown(Sender: TObject;
var Key: Word;
Shift: TShiftState);
begin

if (ssCtrl in Shift) and (chr(Key) in ['A', 'a']) then

ShowMessage('Ctrl-A');
end;
 
后退
顶部