AlphaControls 控件 菜单的附加功能
AlphaControls 控件 使用标准的TMainMenu TPopupMenu控件,队原有功能外,其菜单ITEM项,具有的附加功能:
一、菜单项组的标题(附加功能)
1、项目中的多行文本
2、附加垂直信息栏
3、菜单中字体的全局更改
4、可定制的 alpha 混合效果
5、附加到表单的系统菜单
见下图
上述功能,通过OnGetPopupItemData事件体现。
二、TsSkinManager.OnGetPopupItemData事件
该事件发生在绘制弹出菜单之前,并允许为每个菜单项定义字体。更改字体大小时会自动计算项目的高度。
procedure TMainFrm.sSkinManager1GetPopupItemData(Item: TMenuItem;
State: TOwnerDrawState; ItemData: TacMenuItemData);
参数:
Item 当前菜单项
State 当前菜单项的状态
ItemData 包含绘图所需数据的结构。此结构包含 Font 属性,计划添加更多属性。
三、菜单项组的标题
如果 Caption = "-",则在标准菜单中绘制分隔线。在 AlphaControls 中添加了将菜单项绘制为标题的其他可能性。标题应在开头和结尾都有“-”符号。
四、项目中的多行文本
菜单项目文本国,如果包含回车+换行的组合(#13#10),菜单项的文本将自动换行。
五、附加垂直信息栏
设置TsSkinManager.MenuSupport.UseExtraLine属性为True,启用在弹出菜单中显示附加垂直信息行。如果启用此属性,则将在所有弹出菜单上绘制此线。使用 OnGetMenuExtraLineData 事件,我们可以定义哪些菜单应该有一条垂直线。此外,我们可以在那里定义文本和字形。
在绘制弹出菜单之前,调用TsSkinManager.OnGetMenuExtraLine事件。
procedure TMainFrm.sSkinManager1GetMenuExtraLineData(FirstItem: TMenuItem;
var SkinSection, Caption: String; var Glyph: TBitmap;
var LineVisible: Boolean);
var
iGlyphSize: integer;
function GetSectionTextColor: TColor; // Get text color for colorizing of glyph received from CharImageList
var
Ndx: integer;
begin
Ndx := sSkinManager1.GetSkinIndex(SkinSection);
if Ndx >= 0 then
Result := sSkinProvider1.SkinData.CommonSkinData.gd[Ndx].Props[0].FontColor.Color
else
Result := clBlack;
end;
begin
LineVisible := True; // External line is visible
Caption := 'SKin MenuExt'; // External line Text
iGlyphSize := ScaleInt(22, sSkinProvider1.SkinData); //External line 字符Size
Glyph := CharImageList16.CreateBitmap32Color(7, iGlyphSize, iGlyphSize, GetSectionTextColor, iGlyphSize); //External line图形
end;
LineVisible 属性为 True,则垂直信息栏将显示在当前菜单中。
FirstItem 参数指向此弹出菜单的第一个菜单项。关注此选项,您可以启用或禁用额外的行
SkinSection皮肤部分,可以更改组件的外观
Caption标题
Glyph字形
TsSkinManager.MenuSupport.ExtraLineFont指定将用于文本绘图的字体 。
TsSkinManager.MenuSupport.ExtraLineWidth附加垂直信息栏宽度。
五、定义菜单中(全局)字体
我们可以定义将在应用程序的所有弹出菜单中使用的字体。
使用TsSkinManager.MenuSupport.Font更改菜单中的字体。
如果TsSkinManager.MenuSupport.CustomFont属性为 True,然后在应用程序的所有皮肤菜单中使用字体。
六、可定制的alphablend效果(alpha混合)
TsSkinManager.MenuSupport.AlphaBlend属性允许定义弹出菜单透明度。如果属性值为 0,则菜单完全透明。当值为 255(默认值)弹出菜单不透明。
七、Form系统菜单附件
TsSkinProvider组件具有 SysSubMenu 属性。我们可以在那里定义一个弹出菜单,该菜单将附加到表单的系统菜单中。
八、替换系统阴影
TsSkinManager.MenuSupport.SkinnedShadows属性用自定义蒙皮阴影替换系统阴影。
菜单项通常会自动处理和蒙皮。如果在运行时添加了新菜单项,则应使用 HookPopupMenu 过程(添加后)对其进行初始化。例子:
sSkinManager1.SkinableMenus.HookPopupMenu(PopupMenu1, sSkinManager1.Active);