当光标在编辑字段中时,按下并释放Alt键(未按下其他任何键)会导致编辑字段失去焦点。这也会发生在其他聚焦控件上。如何在Delphi程序中防止此现象发生在任何聚焦控件上?
当光标在编辑字段中时,按下并释放Alt键(未按下其他任何键)会导致编辑字段失去焦点。这也会发生在其他聚焦控件上。如何在Delphi程序中防止此现象发生在任何聚焦控件上?
TForm1 = class(TForm)
Edit1: TEdit;
private
FSuppress : boolean;
protected
procedure WndProc(var Message : TMessage); override;
end;
procedure TForm1.WndProc(var Message : TMessage);
begin
if (Message.Msg = WM_SYSCOMMAND) and
(Message.WParam = SC_KEYMENU) and
FSuppress then Exit;
inherited WndProc(Message);
end;
这是一个系统命令的Windows消息,特定的WParam表明它是用于检索由按键触发的菜单。在您希望保持焦点的任何控件上设置FSuppress
:
procedure TForm1.Edit1Enter(Sender: TObject);
begin
FSuppress := true;
end;
procedure TForm1.Edit1Exit(Sender: TObject);
begin
FSuppress := false;
end;
Edit1
获得焦点时激活菜单。重要的是,像 ALT + F4
退出程序或 ALT+TAB
切换窗口这样的快捷键仍然有效。Windows.pas
中定义,并且至少从 Delphi 2 开始就一直存在。由于这是一个 VCL 表单的单元,因此 Windows
已经在 uses 子句中,而声明是多余的。 - Ken Whiteprocedure SendKey_ALT;
begin
keybd_event(VK_MENU, MapVirtualKey(VK_MENU, 0), 0, 0);
keybd_event(VK_MENU, MapVirtualKey(VK_MENU, 0), KEYEVENTF_KEYUP, 0);
end;
if Shift = [ssAlt] then Key := 0;
。 - user1580348