当我按下Alt + Enter组合键时,我希望我的控件执行某些操作。我通过捕捉WM_SYSKEYDOWN
来实现这一目标。但每次都是" syskey"按下组合系统发出哔哔声,我不知道如何阻止它。我试图返回0(Message.Result:=0
),清除char代码(Message.CharCode:=0
)或不调用继承的方法但没有成功。我发现这个哔哔声不在我的WMSysKeyDown
程序中,而是在它之后。
在我的实际操控中,我没有TEdit,但这并不重要,每次控制都会发出哔哔声。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TMyControl = class(TEdit)
private
procedure WMSysKeyDown(var Message: TWMSysKeyDown); message WM_SYSKEYDOWN;
end;
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
MyControl:TMyControl;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TMyControl.WMSysKeyDown(var Message: TWMKey);
begin
case Message.CharCode of
VK_RETURN: if (Message.KeyData and $40000000)=0 then begin
TForm(Parent).Caption:=TForm(Parent).Caption+' x';
Message.Result:=0;
end;
end;
inherited;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
MyControl:=TMyControl.Create(Form1);
MyControl.Parent:=Form1;
end;
end.
答案 0 :(得分:1)
使用PeekMessage功能。 (Winapi功能)。删除队列中的所有消息。我想你会在winapi peekmessage帮助中找到详细的说明。
procedure TMyControl.WMSysKeyDown(var Message: TWMKey);
var
Mesaj : TMsg ;
begin
case Message.CharCode of
VK_RETURN:
if (Message.KeyData and $40000000)=0 then
begin
TForm(Parent).Caption:=TForm(Parent).Caption+' x';
PeekMessage(Mesaj, Form1.Handle, 0, 0, PM_REMOVE); // Here is the answer. Delete all queued messages in the message queue
end;
end;
inherited;
end;