【发布时间】:2013-05-25 13:28:03
【问题描述】:
当光标在例如在编辑字段中,按下并释放 Alt 键(不按任何其他键)会导致编辑字段失去焦点。任何其他集中控制也会发生这种情况。如何在 Delphi 程序中针对任何集中控制来防止这种情况发生?
【问题讨论】:
-
停止尝试解决没有问题的事情。 所有 Windows 程序都以这种方式运行。按 Alt 时,菜单会被激活。如果您的窗口没有主菜单,则会激活多个窗口(通过单击左上角的图标获得的窗口)。您可以通过使用箭头键浏览窗口的菜单来看到这一点。解决这个问题的方法是更好的用户教育,而不是试图改变你的程序的行为。当焦点被盗时,只需再次按 Alt 或 Esc 即可取消菜单模式。
-
拦截所有窗口消息并过滤掉那些打开菜单的消息。但是你有很多机会完全打破这个程序。如果你的用户很笨,最好给他们做一个大baner,当他们打开菜单时会显示,这样他们就会知道他们必须回到输入框。
-
@Rob Kennedy 我理解您关于 Windows 一致性的发言,总的来说我同意您的看法。但是,在非常特殊的情况下,防止 Alt 键窃取焦点可能很有用。同时我找到了一个解决方案:在控件的 OnKeyDown 事件处理程序中,您希望避免使用 Alt 键失去焦点:
if Shift = [ssAlt] then Key := 0;。 -
这会杀死所有的 Alt+something 热键,也许某些基于 AltGr 的变音符号将不再可用
-
正如我所说:在“非常特殊的情况下”(不需要 Alt+某些东西)。
标签: delphi delphi-xe2 alt-key