AlphaControls 控件 菜单TMainMenu TPopupMenu
AlphaControls华丽的菜单:
相关知识:
一、控件和对象
1、TMainMenu
用于Form窗口的主菜单。
2、TPopupMenu
用于控件或TPanel的右键快捷菜单。
3、TMenuItem
TMainMenu、TPopupMenu项目的菜单ITem是TMenuItem。
4、TSubItem
TMainMenu、TPopupMenu子菜单ITem是TSubItem。
5、TsSkinManager
6、TsSkinProvider
7、TsCharImageList
保存供菜单项,选用的图像。在ImageIndex中指定图像的序号。
二、创建菜单
1、加入MainMenu或PopupMenu
2、选择MainMenu或PopupMenu,加入TMenuItem
(1)insert加入子菜单TMenuItem
(2)creat SnbMenu(子菜单)
3、TMenuItem菜单项目的类型,Button和Radio二种,默认Button,当设置RadioItemo True, 菜单项目类型为Radio。
4、Caption 标题的设置
(1)用于分隔,信息提示,距离分隔
A、字符"-",划线分隔块
B、空字符"",空白分隔块
(2)菜单项目,"菜单名",
(3)子菜单引导,"菜单名",
5、TMenuItem的OnClick是菜单项目的鼠标点击的响应事件
三、MainMenu、PopupMenu属性
autoCheck
AutoHotKeys
AutoLineReduction
bitmap
Break
Caption
Checkcd
Default
Enabled
GroupIndex
HelpContext
Hint
ImageIndex
Name
RadioItem
ShortCut
subMenuItemages
Tag
Visible
四、AlphaControls的适用
AlphaControls支持对MainMenu、PopupMenu的美化。
1、在MainForm主窗口,加入TsSkinManager和TsSkinProvider,对sSkinManager1进行相关参数设置。
2、让菜单项目与TsSkinManager关联:
(1)MainMenu、PopupMenu的OnPopup事件
procedure TMainFrm.PopupMenu1Popup(Sender: TObject);
begin
sSkinManager1.SkinableMenus.HookPopupMenu(PopupMenu1, sSkinManager1.Active);
end;
3、加入 TsCharImageList,让TMainMenu TPopupMenu的参数Images关联:
五、加入菜单主标题(Extra Line另外行)
AlphaControls支持对MainMenu、PopupMenu加入主标题(Extra Line另外行),让菜单明确主题,显得更加美观。特别是对系统的设置菜单,尤为如此。
1、设置MumeSupport相关属性
skinnedshadows设置是否菜单阴影,ShowAccelCharAlways设定允许标签内文本是否显示画有下划线的快捷键值,UseExtraLine是否使用Extra Line。
通常菜单(UseExtraLine False):
加了(Extra Line)菜单
上图中带有主标题(剪头)的菜单,只要在TsSkinManager.OnsGetMenuExtraLineData事件中,加入代码,就要出现主标题。
但是,目前主标题(Extra Line),设置不足之处:
一是主标题(Extra Line)显示英文字符,由下向上排序,目前不支持汉字,显示乱码,实际使用空字符,仅显示一个图也很美观。
二是对子窗口的菜单,不支持。在.OnsGetMenuExtraLineData事件中,不能引用子窗口中的PopupMenu。本人使用多种方法,末能成功,子窗口只能做出(无 Extra Line)菜单:
(Extra Line)主标题,要使用sSkinManager1.OnsGetMenuExtraLineData事件:
(1)sSkinManager1.OnsGetMenuExtraLineData事件
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
// 获取从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 外部线可见
iGlyphSize := ScaleInt(22, sSkinProvider1.SkinData);
if(FirstItem = PopupMenu1.Items[0]) then begin
Caption := ' ';
Glyph := CharImageList16.CreateBitmap32Color(7, iGlyphSize, iGlyphSize, GetSectionTextColor, iGlyphSize);
end
else
if (FirstItem = PopupMenu2.Items[0]) then begin
Caption := ' ';
Glyph := CharImageList16.CreateBitmap32Color(31, iGlyphSize, iGlyphSize,
GetSectionTextColor, iGlyphSize); // 参数31指定显示图标Index
end
else
LineVisible := False;
end;
(2)sSkinManager1.OnGetPopupItemData事件
procedure TMainFrm.sSkinManager1GetPopupItemData(Item: TMenuItem;
State: TOwnerDrawState; ItemData: TacMenuItemData);
begin
if (Item = Builtinskins1) or (Item = miAlphaColordialog1) then begin // 指定专题变化字体
ItemData.Font.Style := [fsBold];
ItemData.Font.Size := ItemData.Font.Size + 2;
end;
end;
在事件中,可以加入对菜单的字体尺寸进行相关设置。