Как найти родителя TMainMenu для TMenuItem? - PullRequest
0 голосов
/ 04 июня 2018

У меня есть стандартный 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 Ответ

0 голосов
/ 04 июня 2018

Решение от Виктория :

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