TsSkinManager
该组件设计用于集中管理程序换肤过程。对于这个组件的工作,定义一个使用过的皮肤并将 Active 属性设置为 True 就足够了。
一、皮肤与应用程序一起部署的方式:
1、将皮肤添加到 InternalSkins 列表中,我们称它们为“内部”皮肤。在这种情况下,您应该使用特殊的设计时属性编辑器将它们添加到 InternalSkins 列表中。在 SkinName 属性中选择他的名字后,将皮肤应用到应用程序。InternalSkins 列表中包含的所有皮肤都将自动包含在 Exe 文件中。
2、将皮肤部署为单独的文件,我们将它们称为“外部”。通常它们被放置在一个单独的文件夹中,该文件夹将与应用程序一起部署。如果在 SkinDirectory 属性中指定了具有外部皮肤的目录,并且在 SkinName 属性中定义了其名称,则将皮肤应用于应用程序。
这两种方式可以结合使用。如果未找到或无法访问外部皮肤,则在这种情况下将自动加载第一个内部皮肤。
3、仅当启用Active属性时,组件才处于活动状态。如果皮肤加载失败(例如,如果未选择皮肤),则 Active 属性会自动更改为 False 并且程序将具有标准外观。
二、重要属性
1、AnimEffects
AnimEffects结构包含一组不同事件的动画设置:
BlendOnMoving - 如果“活动”,则表单在拖动时将是半透明的。“时间”定义动画过程的时间。“BlendValue”指定表单透明度的程度 (0..255)。
Buttons指定将在按钮中设置动画的事件。
DialogHide, DialogShow, FormHide, FormShow允许控制显示和隐藏对话框和表单的动画。
Minimizing允许控制最小化和恢复表单的动画。
PageChange控制 TsPageControl 组件中的页面切换动画。
SkinChanging控制皮肤切换的动画。
在运行动画效果之前,会创建内存中的图像(预渲染)。即使不使用动画,此功能也可能很有用。例如,如果一个表单包含很多控件,并且这个表单的显示速度很慢,可以将动画时间设置为 0,将 Active 设置为 True。然后整个图像将在内存中产生,形式几乎是瞬间出现。
如果在设计时将TsSkinProvider组件放置在窗体上, FormShow 动画会更好地工作。
2、Brightness属性允许在运行时更改整个应用程序的亮度。
3、ButtonsOptions结构包含整个应用程序中所有按钮的设置:
AllowRTLSysButtons - 如果为 True,那么当使用 bmRightToLeft bidimode 时,表单标题中的系统按钮会改变它们的位置。否则,系统按钮的位置不会改变。
ModalButtonsColoring根据按钮模态结果值更改模态按钮或其元素的颜色。
OldGlyphsMode使标准按钮的内置字形具有旧外观。该属性的默认值为 False。在这种情况下使用了新的现代可扩展按钮。
ShiftContentOnClick可以在按下时移动按钮中的标题和字形。可以直接在皮肤中禁止这种移动(当编辑皮肤时)。
ShowFocusRect允许禁止在整个应用程序中显示焦点矩形。默认情况下禁用焦点绘制。
3、CommonSections属性允许实时向皮肤添加新部分。如果在此属性中定义了新部分,则此部分将自动添加到每个应用的皮肤中。例如,我们需要在每个应用的皮肤中都有一个白色面板,但边框应该继承自该皮肤的“PANEL”部分。然后我们应该打开 CommonSections 并在那里添加这样的部分:
[PANEL_WHITE]
PARENTCLASS=PANEL
GRADIENTPERCENT=0
IMAGEPERCENT=0
COLOR=16777215
现在在面板或其他控件中将 SkinData.SkinSection 属性更改为“PANEL_WHITE”就足够了,组件将具有新外观。
4、Effects(效果)包含控制皮肤中可用的一组特殊效果的属性:
AllowAeroBluring启用窗口非客户端部分的模糊效果,在 Windows Vista 和 Windows 7 中可用。
AllowAnimation可用于停用/激活整个应用程序中的所有动画。
AllowGlowing启用当鼠标移到控件上时发生的发光效果,以及窗口标题中的系统按钮。
AllowOuterEffects可用于允许/禁止整个应用程序中的所有外部效果。
DiscoloredGlyphs从字形中移除着色信息,并根据当前皮肤的颜色改变字形的颜色。
5、ExtendedBorders允许 在应用程序的表单和对话框中使用额外的边框。通常这些额外的边框用于为表单添加阴影,但它们也可以实现其他效果。
6、Fonts属性允许从一个点控制整个应用程序中使用的字体。
7、HUEOffset指定整个皮肤中调色板的偏移量。一些皮肤被配置为禁止标题图标颜色变化。
8、InternalSkins
包含嵌入在 Exe 文件中的皮肤。使用特殊对话框添加在设计时生成的皮肤。Exe中可以嵌入的皮肤数量没有限制,但是大量的内置皮肤可以大大增加可执行文件的大小。“全部更新”按钮允许在设计时通过单击更新所有内部皮肤。带有较新版本皮肤的源目录在对话框的左上角显示为“外部位置”。
在此属性弹出的对话框中选择需要的皮肤(有预览效果),可以Add多个皮肤,选择多个皮肤就可以通过对SkinName属性的赋值而制作出更换皮肤的功能了。当然多选也会增加程序的大小,请斟酌使用。如果此属性不设置你也可以看到皮肤效果,但在别人的电脑上就不一定了,此属性的功能就是把皮肤文件编译进Delphi最后的可执行文件(.exe)中,所以此属性还是必须设置的。
9、IsDefault属性确定了一个皮肤管理器,它将是所有应用程序的默认设置 (DefaultManager) 。如果应用程序定义了多个皮肤管理器,则 DefaultManager 将用于对话框的皮肤,以及所有没有在 SkinData.SkinManager 属性中专门定义的管理器的窗体和控件。DefaultManager 总是第一个被创建,或者第一个被管理器创建的将是一个键。
10、Keylist属性的 目的是存储使用编码皮肤的密钥。ASkinEditor 工具允许使用特殊的解包密钥对任何皮肤进行编码。如果这样的皮肤在应用程序中使用没有密钥,那么用户将看到使用未注册皮肤的消息。此外,此类皮肤不能由第三方在 ASkinEditor 工具中解包和更改。
11、LabelsOptions属性允许从一个点控制整个应用程序中标签的行为。
12、MenuSupport结构允许控制弹出菜单皮肤的过程 。
AlphaBlend定义了弹出菜单透明度的级别。
CustomFont属性指定何时应使用自定义字体 。默认值为假。
ExtraLineFont设置弹出菜单中附加竖线的字体,可以在 UseExtraLine 属性中启用并由 OnGetMenuExtraLineData 事件管理。
ExtraLineWidth - 额外线的宽度。
Font属性定义将在弹出菜单中使用的字体 。当 CustomFont 为 False 时,此属性无效。
IcoLineSkin - 皮肤的一部分,负责在菜单项的图标下绘制竖线。
SkinnedShadows用当前皮肤的阴影替换菜单窗口的标准系统阴影。
UseExtraLine - 启用菜单栏的附加渲染模式。如果设置了此属性,则将在所有下拉菜单中绘制额外的垂直条。要配置此模式,请使用 OnGetMenuExtraLineData 事件。本次活动说明如下。
13、Options结构包含一组通用参数,允许在整个应用程序中更改皮肤引擎的行为。
ArrowsStyle 允许从一个点更改整个应用程序中所有箭头的样式。
ChangeSysColors 允许用当前皮肤中指定的颜色替换应用程序中的系统颜色(clWindow、clBtnFace 等)。
CheckEmptyAlpha 如果启用了属性,则处理 32bpp 图标的绘制并检查空 alphachannel。如果图标不可见,此属性会有所帮助,因为 alphachannel 存在但为空。
DrawNonClientArea(绘制非客户端区域)此属性可以帮助禁止在应用程序中的所有表单中绘制蒙皮的非客户区(如果需要)。
GroupBoxStyle改变整个应用程序中组框的样式。
NativeBordersMaximized如果启用,则 ExtendedBorders 将不会用于最大化形式。该属性可以帮助解决应用程序最大化时无法访问的自动隐藏任务栏的问题。
NoMouseHover在鼠标悬停组件时禁止“悬停效果”。可能对在带有触摸屏的设备上进行应用工作有用。
OptimizingPriority (opMemory, opSpeed) - 该属性定义了优化的优先级。这种优化的结果可能很明显,例如在页面控制页面之间切换时。如果选择了 opSpeed,则当组件不可见时,组件的图像将存储在缓存中。由于图像已经存在,因此重复显示此控件会更快。如果选择了 opMemory,则在组件不可见时清除缓存的图像。
NoMouseHover在鼠标悬停组件时禁止“悬停效果”。可能对在带有触摸屏的设备上进行应用工作有用。
PixelsPerInch指定应用程序所需的 PPI, 当 ScaleMode 属性中使用 smCustomPPI 模式时。
ScaleMode允许使用不同的应用程序缩放方式。有关更多信息,请查看这篇单独的文章。
StdGlyphsOrder定义按钮中图标的标准顺序,当 Numglyphs 大于“1”时。如果禁用,则在将按钮绘制为“热”时使用第二个图标。如果属性被禁用,则第二个图标用于绘制禁用组件。
StdImgTransparency指定了 GraphiControl 的绘制方式。该属性可以帮助解决绘制相互放置的图形控件时的一些问题。
12、Saturation(饱和度)更改整个应用程序当前皮肤的饱和度。
13、ScrollsOptions允许在整个应用程序中更改滚动条的尺寸和行为 。
ButtonsSize指定滚动条中按钮的大小。如果值为“-1”,则使用系统大小,如果值为“0”,则按钮不可见。
ScrollSize指定滚动条的大小。如果值为“-1”,则从 Windows 系统接收大小。
13、SkinDirectory 指定存放外部皮肤模板的目录。如果仅使用嵌入式皮肤,则可能未定义此属性。
14、SkinInfo存储有关活动皮肤的信息。
15、SkinName指定应该激活的皮肤。应指定不带文件扩展名的皮肤文件名。
16、SkinnedPopups禁用菜单的皮肤。如果此属性为 False,则 windows 系统将绘制菜单。
17、SkinningRules包含应用程序皮肤的一些规则。
srStdForms启用了从 TForm 类继承的所有新表单的自动蒙皮。如果仅应将外观应用于自定义表单,则此属性必须为 False,并且 TsSkinProvider 组件必须在设计时放置到此类表单。
srStdDialogs启用系统对话框的外观。
srThirdParty允许为标准和第三方控件应用皮肤。
18、SkinsFilter为组件添加了可访问皮肤的过滤。此属性可能对诸如 TsSkinSelector 之类的组件很有用。可用皮肤列表将在那里过滤。如果启用了`sfiInternal`,则可以选择内部皮肤。如果 `sfiExternal` 被启用,那么外部皮肤(在 *.asz 文件中)可供选择。
19、ThirdParty
第三方列表包含适用于标准和第三方控件的皮肤规则 。标准和第三方控件的蒙皮仅在 SkinningRules.srThirdParty 为 True 并且窗体被蒙皮时才有效(在设计中希望将 TsSkinProvider 组件放置在此窗体上)。
用于在设计时更改此列表的特殊属性编辑器。左侧是应蒙皮的类型列表。可以使用底部工具栏手动添加所有项目。但可以使用带有预定义组件集的特殊列表,位于右侧。请注意,类型名称在此处区分大小写。
20、Version存储包的当前版本。
21、Palette 调色板数组
在对象检查器中,不能查看调色板数组,但它可以在运行时访问。调色板数组包含加载皮肤的所有常见颜色,开发人员可能会更改这些颜色。此数组的可用索引:
TacPaletteColors = (pcMainColor, pcLabelText, pcWebText, pcWebTextHot, pcEditText, pcEditBG,
pcSelectionBG, pcSelectionText, pcSelectionBG_Focused, pcSelectionText_Focused,
pcEditBG_Inverted, pcEditText_Inverted, pcEditBG_OddRow, pcEditBG_EvenRow,
pcEditText_Ok, pcEditText_Warning, pcEditText_Alert, pcEditText_Caution, pcEditText_Bypassed,
pcEditBG_Ok, pcEditBG_Warning, pcEditBG_Alert, pcEditBG_Caution, pcEditBG_Bypassed,
pcEditText_Highlight1, pcEditText_Highlight2, pcEditText_Highlight3,
// Round buttons colors圆形按钮颜色
pcBtnColor1Active, pcBtnColor2Active, pcBtnBorderActive, pcBtnFontActive,
pcBtnColor1Normal, pcBtnColor2Normal, pcBtnBorderNormal, pcBtnFontNormal,
pcBtnColor1Pressed, pcBtnColor2Pressed, pcBtnBorderPressed, pcBtnFontPressed,
pcBorder, pcGrid, pcHintBG, pcHintText);
三、事件
1、OnActivate在组件激活后立即发生。
2、OnAfterChange在更改当前皮肤后发生。
3、OnBeforeChange发生在更改当前皮肤之前。
4、OnDeactivate在皮肤停用后发生。
5、OnFontChanged 更改 MainFont 属性时发生OnFontChanged事件。
6、OnGetMenuExtraLine 获取菜单额外行事件。
如果MenuSupport.UseExtraLine属性处于活动状态,则在绘制弹出菜单之前调用 OnGetMenuExtraLine。如果 LineVisible 参数为 True,将绘制额外的左侧垂直线。FirstItem 参数指向此弹出菜单的第一个菜单项。关注此选项,您可以启用或禁用额外的行,也可以定义诸如 SkinSection、Caption 和 Glyph 等参数。处理此事件的示例可以在ASkinDemo和ASLDemo中找到。
7、OnGetPopupItemData事件发生在绘制弹出菜单之前,并允许为每个菜单项定义字体。
8、OnScaleChanged事件在更改应用程序缩放后发生。
9、OnScaleModeChange事件在更改应用程序缩放模式(Options.ScaleMode 属性)后发生。
10、OnSkinChanging事件发生在皮肤更改之前,并允许取消此更改。
11、OnSkinListChanged发生在更改内部皮肤列表和更改 SkinDirectory 属性时。
12、OnSkinLoading在皮肤激活后立即发生。
13、OnSysDlgInit在打开系统对话框时发生,包含窗口句柄和 AllowSkinning 等参数。该事件允许禁用自定义对话框的皮肤。