【发布时间】:2018-06-04 09:23:47
【问题描述】:
我有一个标准的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'
我看不到任何相关的问题,但解决方案可能很简单。
【问题讨论】:
-
从
GetParentMenu获取。 -
谢谢你,@Victoria!它有效!
-
不客气!只是,一个细节。您的例外
strExcMenuItemNotFirstLevel听起来像是一些文本,可以说该项目不是顶级项目(即子项目)。请注意,GetParentMenu迭代到顶级项目并从该项目获取菜单对象引用。 -
说的很对,我已经改了。感谢您的支持,@Victoria!
标签: delphi type-conversion tmenuitem