【问题标题】:Check Menu Item is Enable With API Win32 in Delphi在 Delphi 中使用 API Win32 启用检查菜单项
【发布时间】:2016-05-08 14:00:44
【问题描述】:

当菜单项禁用时我在此代码中的问题,然后将控制应用程序中的代码“PostMessage”传递给崩溃,因为我需要检查菜单项是否已启用,然后使用 PostMessage。

  HandleMenu:= GetMenu(ParentAppHandle);
  HandleMenu:= GetSubMenu(HandleMenu, 6 {menu item no});
  item:= GetMenuItemID(HandleMenu , 12 {sub menu item no});

  PostMessage(ParentAppHandle, WM_COMMAND, MakeWParam(item, 0), 0);

【问题讨论】:

  • 如果您为禁用的菜单项发送WM_COMMAND 消息,接收应用程序应该忽略该消息。如果接收器崩溃,则说明接收器未正确编码。那不是发件人的错。此外,请确保您拥有正确的菜单所有者HWND。一些应用框架为菜单调度创建了一个专用的HWND

标签: windows delphi winapi menu delphi-xe


【解决方案1】:

使用 WinAPI 函数GetMenuState

例子:

var
  State: UINT;
begin
  State:= GetMenuState(HandleMenu , 12, MF_BYPOSITION);
  if (State and (MF_DISABLED or  MF_GRAYED)) = 0 then
  begin
    // Menu Item is enabled
  end
  else
  begin
    // Menu Item is disabled
  end;

【讨论】:

  • 来自GetMenuStateGetMenuState 函数已被GetMenuItemInfo”取代。。使用GetMenuItemInfo 的一个原因是,您不再需要编写兼容性代码,同时检查禁用和灰色。使用 GetMenuItemInfo 时,它们被报告为相同的值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多