Delphi   发布时间:2022-04-10  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了菜单加速键未显示(Delphi 2009)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我尽我所能,无法弄清楚这里发生了什么.它在Delphi 4中运行良好.升级到Delphi 2009之后,我不知道这是否应该是它应该工作的方式,或者它是否是一个问题:

这是我的程序菜单在Delphi 2009下的设计模式中的样子:@H_197_3@

@H_197_3@

请注意,主菜单和文件子菜单中的每个单词都有一个带下划线的字母.应该是这样的.这个带下划线的字母称为加速键,是Windows应用程序的标准字母,因此您可以使用Alt键和该字母快速选择菜单项,然后使用键盘而不是鼠标快速选择子菜单项.@H_197_3@

你通过使用“&”来获得这种方式字符作为项目标题的一部分,例如:Save& As …@H_197_3@

当我运行我的应用程序,并使用鼠标打开文件菜单时,它看起来像这样:@H_197_3@

@H_197_3@

主菜单中的字符带下划线,但“文件”菜单中没有下划线.@H_197_3@

相反,我使用Alt-F键打开文件子菜单,然后看起来像这样:@H_197_3@

@H_197_3@

并且所有Accelerator Key字母都有正确的下划线.@H_197_3@

我玩过AutoHotKeys选项,但这不是问题.@H_197_3@

以前有人遇到过这个问题吗?第二个图像中的示例是否是我不知道的正确行为?或者是否有一些我可能错过的选项或编码错误?@H_197_3@

2009年11月(一年后):mghie似乎已经找到了根源,并找@R_673_10722@所在.请参阅下面接受的答案.@H_197_3@

@H_675_29@解决方法
除非按下Alt键,否则有一个标准的Windows设置(在显示属性下)通常隐藏这些加速器.这就解释了为什么用Alt F10打开菜单会为你显示它们.也许这就是原因?

[编辑]:不,不是.我刚试过,一个带有菜单项的简单TForm显示加速器,但只要我添加TImageList并设置单个菜单项的ImageIndex,或者只是将ownerDraw设置为true,加速器下划线就会消失.我猜这真的是VCL中的一个错误.@H_197_3@

便说一句,这是在Windows XP上.@H_197_3@

解决方法:@H_197_3@

我在Windows XP 64上使用Delphi 2009对其进行了调试,并且缺少加速器的根本原因似乎是Windows发送带有ODS_NOACCEL标志的WM_DRAWITEM消息,如果系统设置为始终显示加速器,则不应该这样做.所以你可以说它不是VCL错误,而是VCL无法解决的Windows问题.@H_197_3@

但是,您可以在自己的代码中解决它,只需要在将消息传递给VCL之前重置标志.覆盖窗口过程@H_197_3@

protected
  procedure WndProc(var message: TmessagE); override;

像这样:@H_197_3@

procedure TYourForm.WndProc(var message: TmessagE);
const
  ODS_NOACCEL = $100;
var
  pDIS: PDrawItemStruct;
  ShowAccel: BOOL;
begin
  if (message.Msg = WM_DRAWITEM) then begin
    pDIS := PDrawItemStruct(message.LParam);
    if (pDIS^.CtlType = ODT_MENU)
      and SystemParametersInfo(SPI_GETKEYBOARDCUES,@ShowAccel,0)
    then begin
      if ShowAccel then
        pDIS^.itemState := pDIS^.itemState and not ODS_NOACCEL;
    end;
  end;
  inherited;
end;

这只是演示代码,每次收到WM_DRAWITEM消息时都不应该调用SystemParametersInfo(),而是在程序启动时调用一次,然后每次程序收到WM_SETTinGCHANGE消息时调用.@H_197_3@

大佬总结

以上是大佬教程为你收集整理的菜单加速键未显示(Delphi 2009)全部内容,希望文章能够帮你解决菜单加速键未显示(Delphi 2009)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。