代码之家  ›  专栏  ›  技术社区  ›  Jacek Krawczyk

如何找到tmenuitem的tmainmenu父级?

  •  1
  • Jacek Krawczyk  · 技术社区  · 6 年前

    我有一个标准 TMainMenu 其中包含一些 TMenuItem 元素。如何从其中一个动态查找父主菜单对象?

    以下代码在第一个可执行行中已出现编译器错误:

    procedure TMenuItemHelper.AlignToRight;
    const
      P3 = False;
    var
      info: TMenuItemInfo;
      buffer: array[0..78] of WideChar;
      mainMenu: TMainMenu;
    begin
      if Self.Parent is TMainMenu then
        mainMenu := (Self.Parent as TMainMenu)
      else
        raise EMenuItemHelper.Create(strExcMenuItemNotFirstLevel);
    
      info.cbSize := SizeOf(info);
      info.fMask := MIIM_TYPE;
      info.dwTypeData := buffer;
      info.cch := SizeOf(buffer);
      GetMenuItemInfo(mainMenu.Handle, Self.Command, P3, info);
    
      info.fType := info.fType or MFT_RIGHTJUSTIFY;
      SetMenuItemInfo(mainMenu.Handle, Self.Command, P3, info);
    end;
    

    错误消息如下:

    [dcc32 Error] E2010 Incompatible types: 'TMenuItem' and 'TMainMenu'
    

    我看不出任何相关的问题,但解决方法可能很简单。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Jacek Krawczyk    6 年前

    解决方案来自 Victoria :

      if Self.GetParentMenu is TMainMenu then
        mainMenu := (Self.GetParentMenu as TMainMenu)
      else
        raise EMenuItemHelper.Create(strExcMenuItemParentIsNotAMainMenu);