将主窗体的keypreview设为true,再根据keypress判断.
或者用个钩子.
或者用个钩子.
解决方案 »
- 函数返回值类型是Variant,实际上是个已知长度的Array of Double的数组 ,应该怎么办?
- 50求一个百分比的算法
- 问个关于读取txt文件的问题
- Delphi 7 中注册表操作 TRegistry
- 如何取托盘区的程序名
- 请问如何在DEPHI中用语句调用SQL的存储过程.
- 我的毕业设计,9点前在线等待
- 怎样判断ClientDataset.delta是否为空????
- 想入门delphi,不知从何下手,请打虾们指点指点。。。
- 1到100求和
- 我从C/C++转来,用Delphi已有较长时间。都说Delphi是“优美的”语言,我总感觉不到。有谁能说出令我信服的理由,可获取高分!
- 怎么利用API 共享目录,
吴中卫 通常在自己的程序里定义热键,只能在自己的应用窗口范围内使用,未免使用起来受到一定的限制。如果能在自己的应用程序里定义能被所有窗口访问的热键,应该是比较具有现实意义的。要定义一个全局热键,通常有三个步骤: 1。定义 Windows 的消息 WM_HOTKEY 的 HOOK 链,即 procedure myshortcut(var message: TMessage); message WM_HOTKEY; 2。向 Windows 加入一个全局原子 hotkey : GlobalAddAtom(’hotkey’), 并保留其句柄 3。向 Windows 登记热键链: RegisterHotKey( 应用句柄,全局原子句柄, mod_control ,88 ); 其中,RegisterHotKey 函数原形如下 BOOL RegisterHotKey(
HWND hWnd, // 连接热键的窗口句柄 int id, // 全局原子句柄 UINT fsModifiers, // 热键修饰标志 UINT vk // 虚拟键盘码 ); 这里,fsModifiers 是指虚拟键盘码 vk 结合何种键一起生成 WM_HOTKEY 的消息,它是下列三值的组合: MOD_ALT // ALT 键必须按下 MOD_CONTROL // CTRL 键必须按下 MOD_SHIFT // SHIFT 键必须按下 有了这些准备,你就可以定义自己喜欢的方式了。下面是一个范例,当 CTRL + Q 在任何时候被按下时,都会打出 “你好,Crtl + Q 被按下” 的信息。 type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject); protected
procedure myshortcut(var message: TMessage); message WM_HOTKEY;
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;var
Form1: TForm1;
id:Integer;implementation{$R *.DFM}procedure TForm1.myshortcut(var message: TMessage);
begin
ShowMessage(’你好,Crtl + Q 被按下’);
end;procedure TForm1.FormCreate(Sender: TObject);
begin
id:=GlobalAddAtom(’hotkey’);
RegisterHotKey(handle,id,mod_control,88);
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
UnRegisterHotKey(handle,id); //别忘了在退出时取消定义
end;
在响应 active control 的信息