主菜单项的位置
The location of the main menu items
Total commander 中的“帮助”菜单项是右对齐的。它是怎么做到的?
啊,来自另一个千年的振动;)。这是可行的,如下所示,但我真的没有看到任何优势。
procedure TForm33.FormCreate(Sender: TObject);
begin
ModifyMenu(MainMenu1.Handle,
MainMenu1.Items.Count -1,
MF_BYPOSITION or MF_RIGHTJUSTIFY, // MF_HELP = MF_RIGHTJUSTIFY = 00
MainMenu1.Items[MainMenu1.Items.Count-1].Command,
'&Help' );
end;
您可能需要阅读 documentation 并考虑以下注意事项:
Note The ModifyMenu function has been superseded by the SetMenuItemInfo function. You can still use ModifyMenu, however, if you do not need any of the extended features of SetMenuItemInfo.
编辑:在评论中,您链接到一张图像,其中“帮助”项已绘制在具有非渐变白色背景的渐变菜单栏上。根据你的图片,我相信你正在使用 Windows 7
,所以我启动了一台旧的 W7 机器并用 Delphi XE7 测试了相同的代码,结果如下:
如果你不能帮我重现问题,我真的不知道我怎么可能进一步帮助你。
Edit2:感谢 Remy Lebeau 的评论,我对第四个参数进行了更正。没有从我的旧存储库更新代码,这对我来说是一个真正的错误。
未记录的 MF_HELP
与同样未记录的 MF_RIGHTJUSTIFY
具有相同的价值(均为 $4000)。后者更能说明目的,所以我改成了后者。
在Delphi中,VCL的TMenuItem
does not natively support setting its justification, however you can use the Win32 API SetMenuItemInfo()
函数在运行时修改一个菜单项,赋予它MFT_RIGHTJUSTIFY
标志,eg:
uses
..., Windows;
procedure TForm1.FormCreate(Sender: TObject);
var
info: TMenuItemInfo;
begin
ZeroMemory(@info, sizeof(info));
info.cbSize := sizeof(info);
info.fMask := MIIM_FTYPE;
GetMenuItemInfo(Help1.Parent.Handle, Help1.Command, False, info);
// or: GetMenuItemInfo(Help1.Parent.Handle, Help1.MenuIndex, True, info);
info.fType := info.fType or MFT_RIGHTJUSTIFY;
SetMenuItemInfo(Help1.Parent.Handle, Help1.Command, False, info);
// or: SetMenuItemInfo(Help1.Parent.Handle, Help1.MenuIndex, True, info);
end;
在FreePascal/Lazarus中,拼箱的TMenuItem
has a published RightJustify
属性可以设置为True
.
Total commander 中的“帮助”菜单项是右对齐的。它是怎么做到的?
啊,来自另一个千年的振动;)。这是可行的,如下所示,但我真的没有看到任何优势。
procedure TForm33.FormCreate(Sender: TObject);
begin
ModifyMenu(MainMenu1.Handle,
MainMenu1.Items.Count -1,
MF_BYPOSITION or MF_RIGHTJUSTIFY, // MF_HELP = MF_RIGHTJUSTIFY = 00
MainMenu1.Items[MainMenu1.Items.Count-1].Command,
'&Help' );
end;
您可能需要阅读 documentation 并考虑以下注意事项:
Note The ModifyMenu function has been superseded by the SetMenuItemInfo function. You can still use ModifyMenu, however, if you do not need any of the extended features of SetMenuItemInfo.
编辑:在评论中,您链接到一张图像,其中“帮助”项已绘制在具有非渐变白色背景的渐变菜单栏上。根据你的图片,我相信你正在使用 Windows 7
,所以我启动了一台旧的 W7 机器并用 Delphi XE7 测试了相同的代码,结果如下:
如果你不能帮我重现问题,我真的不知道我怎么可能进一步帮助你。
Edit2:感谢 Remy Lebeau 的评论,我对第四个参数进行了更正。没有从我的旧存储库更新代码,这对我来说是一个真正的错误。
未记录的 MF_HELP
与同样未记录的 MF_RIGHTJUSTIFY
具有相同的价值(均为 $4000)。后者更能说明目的,所以我改成了后者。
在Delphi中,VCL的TMenuItem
does not natively support setting its justification, however you can use the Win32 API SetMenuItemInfo()
函数在运行时修改一个菜单项,赋予它MFT_RIGHTJUSTIFY
标志,eg:
uses
..., Windows;
procedure TForm1.FormCreate(Sender: TObject);
var
info: TMenuItemInfo;
begin
ZeroMemory(@info, sizeof(info));
info.cbSize := sizeof(info);
info.fMask := MIIM_FTYPE;
GetMenuItemInfo(Help1.Parent.Handle, Help1.Command, False, info);
// or: GetMenuItemInfo(Help1.Parent.Handle, Help1.MenuIndex, True, info);
info.fType := info.fType or MFT_RIGHTJUSTIFY;
SetMenuItemInfo(Help1.Parent.Handle, Help1.Command, False, info);
// or: SetMenuItemInfo(Help1.Parent.Handle, Help1.MenuIndex, True, info);
end;
在FreePascal/Lazarus中,拼箱的TMenuItem
has a published RightJustify
属性可以设置为True
.