delphi程序中定义热键的方法

delphi程序中定义热键的方法,我需要设置3个热键,比如Ctrl+Alt+8,要3个组合键,要全局热键哦。。。给个实例代码,谢谢... delphi程序中定义热键的方法,我需要设置3个热键,比如 Ctrl+Alt+8 ,要3个组合键,要全局热键哦。。。给个实例代码,谢谢 展开
 我来答
HJ_3000
2010-09-15 · TA获得超过563个赞
知道小有建树答主
回答量:1264
采纳率:78%
帮助的人:54.8万
展开全部
Unit Unit1;

Interface

Uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, ComCtrls, StdCtrls, Buttons;

Type
TFrm_Main = Class(TForm)
HotKey1: THotKey;
BitBtn1: TBitBtn;
Procedure FormDestroy(Sender: TObject);
Procedure BitBtn1Click(Sender: TObject);
private
V_fsmodifiers, V_VK: Integer;
V_atom: atom;
public
Procedure HotKey(Var Msg: TMessage); message WM_HOTKEY;
End;

Var
Frm_Main: TFrm_Main;

Implementation

{$R *.dfm}

Function Get_Hotkey(ahotkey: TShortCut; Var fsmodifiers, VK: Integer): Boolean;
Var
alistString: TStringlist;
I: Integer;
atmstr: String;
achar: Char;
Begin
alistString := TStringlist.Create;
Try
alistString.Delimiter := '+';
alistString.DelimitedText := ShortCutToText(ahotkey);
I := alistString.Count;
If I > 0 Then
Begin
If alistString.IndexOf('Alt') <> -1 Then
fsmodifiers := MOD_Alt;
If alistString.IndexOf('Ctrl') <> -1 Then
fsmodifiers := fsmodifiers + MOD_CONTROL;
If alistString.IndexOf('Shift') <> -1 Then
fsmodifiers := fsmodifiers + MOD_SHIFT;
atmstr := alistString.Strings[I - 1];
achar := atmstr[1];
VK := Ord(achar);
Result := True;
End
Else
Result := False;
Finally
alistString.Free;
End;
End;

Procedure TFrm_Main.FormDestroy(Sender: TObject);
Begin
GlobalDeleteatom(V_atom); //程序退出取消全局热键
Deleteatom(V_atom);
End;

Procedure TFrm_Main.BitBtn1Click(Sender: TObject); {注册全局热键}
Var
aHotKey: TShortCut;
Begin
aHotKey := HotKey1.HotKey; //win32页的组件 HotKey
V_fsmodifiers := 0;
V_VK := 0;
If Get_Hotkey(ahotkey, V_fsmodifiers, V_VK) Then
Begin
V_atom := Globaladdatom('hot key');
If Not RegisterHotkey(Handle, V_atom, V_fsmodifiers, V_VK) Then
Begin
GlobalDeleteatom(V_atom); //取消全局热键
Deleteatom(V_atom);
End;
End;
End;

Procedure TFrm_Main.HotKey(Var Msg: TMessage); { 监听全局热键 }
Begin
If (Msg.LParamHi = V_VK) And (Msg.LParamLo = V_fsmodifiers) Then
Begin
Close;
End;
End;

End.
匿名用户
2010-09-20
展开全部
安装Jedi插件。里面有热键控件。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zengyu0512
2010-09-15 · TA获得超过174个赞
知道小有建树答主
回答量:397
采纳率:0%
帮助的人:305万
展开全部
actionlist 控件
新建事件项 有个 ShortCut 是定义事件的 热键的
我觉得这个方法更简单点...
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式