你是指将主窗体FormStyle属性设成fsMDIForm时候的情况吧,如是这样,应该是设置焦点
时屏蔽了fsMDIForm窗体的原因。我的方法如下:
利用消息处理。整个程序中,按键消息发生时,消息先传给 Application 对象统一处
理,所以可以对 Application 对象的响应方法进行一下改造以适合需要的操作。
首先,Application有个OnMessage的属性,为TMesageEvent类型方法指针:
TMessageEvent = procedure (var Msg: TMsg; var Handled: Boolean) of object;
所以,在主窗体public域中添加一个TMesageEvent类型方法DoMessage:
public
procedure DoMessage(var Msg: TMsg; var Handled: Boolean);
然后赋值给Application.OnMessage属性,则Application内部处理消息,调用
OnMessage时将调用到自定义的DoMessage方法。DoMessage方法实现为:
procedure TForm1.DoMessage(var Msg: TMsg; var Handled: Boolean);
begin
if Msg.message = WM_KEYDOWN then
begin
if Msg.wParam=Key_B //键值为'B',此处需要引用QT单元,'Key_B'在其中定义
then
showmessage('B_Down !');
end;
end;
这样,主窗体FormStyle为fsMDIForm,程序运行后,当'B'字母键被按下时,会
showmessage('B_Down !');
>>
以上为只有一个主窗体时的处理,如果还有一个子窗体,则DoMessage中要另加一些
处理。供参考。
<<