我正在使用delphiXE7和我的问题属于什么时候加速键(又名访问键)应该显示。 具体来说,我已经注意到,如果我显示一个辅助表单(即不是主表单)并按下Alt键,则会显示加速器(预期的行为)。 如果我然后closures并重新打开对话框,加速器仍然显示(不按Alt)。 这被认为是正确的Windows 7的行为? 如果这不是正确的行为,那么我可以将什么代码(如果有的话)添加到窗体的OnShow中,将重新隐藏加速器?
平台的标准是,如果通过键盘操作调用对话框,则显示访问键。 一旦显示对话框,如果按下ALT键,则显示访问键。
那么,为什么第二次打开表单时显示访问键呢? 那么,如果你每次展示的时候都要创建表单,那么你就会得到上面列出的平台标准行为。 所以我得出这样的结论:在第一次和第二次显示之间,你只是隐藏它,而不是摧毁它。
因此,获取所需行为的简单方法是在关闭时摧毁表单,并在显示时创建它。 不要使用IDE为您创建的全局表单变量。 不要在.dpr文件中调用Application.CreateForm
来创建该全局实例。 无论何时您需要显示表单,请在该实例中创建。 当表单关闭时,销毁该实例。
如果必须重新显示表单的现有实例,则发送WM_CHANGEUISTATE
消息来初始化状态。 通过UIS_INITIALIZE or (UISF_HIDEACCEL shl 16)
作为wParam
。 如果不能测试任何这一点,但会沿着这些线路。 我觉得把这个发送到窗体的窗口句柄就足够了。 而且我可能弄错了旗帜。 文档在这里: https : //msdn.microsoft.com/en-us/library/windows/desktop/ms646342(v=vs.85).aspx