DelphiXE2:如何防止Alt键窃取焦点



当光标位于编辑字段中时,按下并释放Alt键(不按任何其他键(会导致编辑字段失去焦点。这种情况也发生在任何其他集中控制中。如何在Delphi程序中防止任何集中控制?

在减少意外后果的情况下做到这一点的更好方法是非常精确——我建议:

在您的表单中,覆盖WndProc:

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;

这是系统命令和特定WParam的窗口消息,指示它用于检索按键触发的菜单。在您希望保持焦点的任何控件上设置FSuppress

procedure TForm1.Edit1Enter(Sender: TObject);
begin
  FSuppress := true;
end;
procedure TForm1.Edit1Exit(Sender: TObject);
begin
  FSuppress := false;
end;

这不会禁用ALT键,但会禁用菜单的激活,特别是当Edit1具有焦点时。至关重要的是,像ALT + F4退出程序或ALT+TAB切换窗口这样的快捷方式仍然有效。

然而,我同意大多数评论,因为这可能不是您的用户群的LCD的最佳解决方案。你本质上是在削弱程序,让有能力的用户去迎合那些不称职的用户的失败。也许可以将其作为Windows粘滞键或各种残疾人的辅助功能选项。

procedure 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;

在FormCreate((方法中调用上述过程。这将解决问题。

相关内容

  • 没有找到相关文章

最新更新