问题描述
Total命令程序中的“帮助”菜单项右对齐。怎么做?
解决方法
啊,另一千年的振动;)。这样做是可行的,如下所示,但我看不到任何优势。
procedure TForm33.FormCreate(Sender: TObject);
begin
ModifyMenu(MainMenu1.Handle,MainMenu1.Items.Count -1,MF_BYPOSITION or MF_RIGHTJUSTIFY,// MF_HELP = MF_RIGHTJUSTIFY = $4000
MainMenu1.Items[MainMenu1.Items.Count-1].Command,'&Help' );
end;
您可能需要阅读documentation并考虑以下注意事项:
注意ModifyMenu函数已被SetMenuItemInfo函数取代。但是,如果不需要SetMenuItemInfo的任何扩展功能,则仍然可以使用ModifyMenu。
编辑:在注释中,您链接到带有非渐变白色背景的渐变菜单栏上绘制了“帮助”项目的图像。根据您的图像,我相信您正在使用Windows 7
,因此我启动了一台旧的W7计算机,并使用Delphi XE7测试了相同的代码,结果如下:
如果您不能帮助我重现问题,我真的不知道该如何进一步帮助您。
Edit2:感谢Remy Lebeau的评论,我对第四个参数进行了更正。从我这边来看,确实是一个很大的错误,就是不从旧存储库中更新代码。
未公开的MF_HELP
与未公开的MF_RIGHTJUSTIFY
的值相同(均为$ 4000)。后者更好地表明了目的,所以我改为了。
在Delphi中,VCL的TMenuItem
本身不支持设置其对齐方式,但是您可以使用Win32 API SetMenuItemInfo()
函数在运行时修改菜单项以为其提供MFT_RIGHTJUSTIFY
标志,例如:
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,info);
// or: SetMenuItemInfo(Help1.Parent.Handle,info);
end;
在FreePascal / Lazarus中,LCL的TMenuItem
具有已发布的RightJustify
属性,您可以将其设置为True
。