【发布时间】:2015-07-05 20:00:47
【问题描述】:
当我按下 Alt+Enter 组合键时,我希望我的控件执行一些操作。我通过捕获WM_SYSKEYDOWN 来实现这一点。但是每次按下“syskey”组合时,系统都会发出哔哔声,我不知道如何停止它。我尝试返回 0(Message.Result:=0),清除字符代码(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.
【问题讨论】:
-
@TLama,
WM_SYSCHAR是! :) 我删除了CharCode(分配#0)并且不再发出哔哔声。再次感谢。
标签: delphi delphi-2009 messages