样式工具控件
# Smart控件使用(样式工具)
提供个性化样式调整工具控件。
# 1. TscStyleManager
用于调整样式菜单、样式通用对话框和缩放选项的组件。scStyleManager 单元还改进了一些用于常见对话框的系统样式挂钩(绘图和缩放(高 DPI)支持)。
# 1.1. 属性
| 属性 | 功能说明 |
|---|---|
| MenuAlphaBlendValue | 菜单的 AlphaBlend 值。 如果值 < 255,则启用菜单的 AlphaBlend |
| MenuImages | 墙纸图像和菜单背景 |
| MenuWallpaperIndex | 菜单墙纸图像索引 |
| MenuBackgroundIndex | 菜单自定义背景的图像索引 |
| MenuBackgroundOverContentIndex | 图像索引,将覆盖菜单的所有项目 |
| MenuHeadersSupport | 如果为 True,则您可以调整样式菜单的标题将某些项目作为这些步骤的标题: 1.设置 TMenuItem.Caption 的第一个和最后一个字符 ='-'2. 设置 TMenuItem.Enabled = False |
| MenuHookEnabled | 启用/禁用菜单样式,也可使用标准的 TStyleManager.SystemHooks 属性 |
| ScaleStyles | 如果为 True,则所有控件都将为系统缩放某些样式元素。 |
| ScaleThemes | 如果为 True,那么所有控件都将为 hi-dpi 系统缩放一些主题元素。例如,如果您将表单移动到其他显示器,使用其他 dpi,则复选框和单选框将使用当前 DPI 的大小。 |
| ScaleFormBorder | 如果为 True,则样式表的边框将缩放到任何系统比例因子(125%、150%-200% 和更多) |
| StyleArrowType | 定义将使用某些控件和菜单中的哪种箭头 |
| MenuSelectionStyle | 定义将在菜单中使用哪种选择scmssStyled - 使用样式中的选择位图scmssColor - 使用样式中的选择颜色 |
| RTLMode | 为对话框窗体启用 BidiMode = bdRightToLeft |
| SystemShellDialogs | 使用此属性可以在 TscOpenDialog、TscSaveDialog、TscOpenPictureDialog、TscSavePictureDialog 组件中使用系统外壳对话框而不是自定义窗体 |
# 2. TscStyledForm
调整和改进样式表行为的组件。
# 2.1. 属性
| 属性 | 功能说明 |
|---|---|
| ClientWidth, ClientHeight | 表格的客户端大小的存储值。 当您更改具有不同大小的表单边框的样式时,此组件会自动将客户端大小调整为这些值 |
| ShowStylesMenu | 如果为 True,则组件会自动将样式菜单添加到窗体的系统菜单中 |
| StylesMenuCaption | 样式菜单的菜单项标题 |
| ShowIcon | 显示/隐藏图标 |
| Buttons | TscNCButtonItems 控件项目的集合 |
| Tabs | TscNCTabItems 控件项目的集合 |
| ButtonFont | 按钮的文本字体 |
| TabFont | 标签页的文本字体 |
| ButtonImages | 按钮使用的图像库控件 |
| TabImages | 标签使用的图像库控件 |
| ShowButtons | 显示、隐藏按钮 |
| ShowTabs | 显示、隐藏标签页 |
| TabIndex | 活动标签页的索引序号 |
| TabsPosition | 左侧或右侧的标签页位置 |
| ShowInactiveTab | 如果为 False,则选项卡的正常和禁用状态将是透明的 |
| CaptionFont | 字幕文本的字体 |
| CaptionAlignment | 字幕文本的对齐方式 |
| ShowHints | 显示来自按钮和选项卡的提示 |
| DropDownForm | 如果为 True,则表单将具有下拉样式。 1.可以把任何控件放在TCustomForm上,并把它用作下拉表单。 2. TscStyledForm 必须放在所有窗体上进行交互。 3. 在表单上设置 TscStyledForm.DropDownForm = True,允许下拉。 4.使用TscStyledForm.OnDropDown、TscStyledForm.OnCloseUp事件来使用控件。 5. 使用 TscStyledForm.DropDown 方法显示下拉菜单父窗体的 nc 区域中的控件、位置或对象。 6.可以使用TscButton.CustomDropDown = True,TscButton.OnDropDown 和 TscButton.OnCloseUp 事件进行互动。 |
| DropDownAnimation | 为下拉表单启用 alphableend 动画 |
| DropDownBorderColor | 下拉窗体的边框颜色 |
| InActiveClientColor | 表单客户端的非活动效果的颜色。 这种颜色与模糊的客户形象融合在一起。请参阅 ShowClientInActiveEffect 和 HideClientInActiveEffect 方法。默认值为 clWindow,控件使用样式中的 clWindow 颜色 |
| InActiveClientColorAlpha | InActiveClientColor 值的 Alpha 值 |
| InActiveClientBlurAmount | 设置不活跃的客户区的模糊效果数值 |
| DWMClientShadow | 如果为 True,则组件为 BorderStyle = bsNone 的表单添加系统 DWM 阴影 |
| DWMClientShadowHiTest | 启用阴影的反馈条,可使用它来调整表单大小 |
| CaptionWallpapers | 标题壁纸的图像 |
| CaptionWallpaperIndex | 字幕的壁纸索引 |
| CaptionWallpaperInAcitveIndex | 表格未激活的标题壁纸的索引 |
| CaptionWallpaperLeftMargin CaptionWallpaperRightMargin CaptionWallpaperTopMargin CaptionWallpaperBottomMargin | 标题字幕壁纸的边距 |
| FluentUIBackground | scfuibNone - 默认表单背景scfuibBlur - 具有模糊背景的透明形式scfuibAcrylic - 具有模糊背景和合并丙烯酸颜色的透明形式 |
| FluentUIAcrylicColor | 亚克力色值 |
| FluentUIAcrylicColorAlpha | 亚克力色值的Alpha/不透明度 |
| FluentUIBorder | 启用/禁用带有模糊背景的窗体的系统边框 |
| FluentUIInactiveAcrylicColorOpaque | 如果为true,则对于非活动的窗口,亚克力颜色alpha值自定设定未为255 |
在表单和控件上调整Fluent UI
在表单上添加Fluent UI背景的步骤
- 将
TscStyledForm组件放在窗体上。 - 将
TscStyledForm.DWMClientShadow设置为True - 如果需要调整带阴影的表单大小,请设置
TscStyledForm.DWMClientShadow。 - 将
TscStyledForm.FluentBackground设置为scfuibBlur或scfuibAcrylic(推荐使用scfuibAcrylic)。 - 设置
TscStyledForm.FluentUIAcrylicColor(与虚化背景融合的亚克力色) - 设置
TscStyledForm.FluentUIAcrylicColorAlpha(与模糊背景合并的丙烯酸颜色的不透明度) - 设置
TscStyledForm.FluentUIBorder = True。
运行应用程序,你会得到一个带有模糊背景效果的空透明表单。
调整应用程序中控件的步骤
- 在透明背景上仅使用 TscGP...(带有 GDI+ 图形的控件)带有
DrawTextMode = scdtmGDIPlus的控件。如果您设置TscGPPanel.FillColor = clBlack和TscGPPanel.FillColorAlpha = 255那么这个区域将是透明的。 - 请注意,默认的 GDI 绘图(填充矩形、线条、文本)结果将是透明的。这意味着像
TEdit、TListView和其他带有 GDI 文本的控件在此背景下看起来不正确。要获得任何第三方控件的不透明区域,您可以使用TscPanel或TscGPPanel,设置其中的FluentUIOpacity = True。把控件放在上面。其他一些控件也具有FluentUIOpacity属性(TscEdit、TscGPEdit等)。
调整应用程序以在Windows 10和其他Windows版本上使用的步骤
- 使用
TscStyledForm.IsFluentUIAvailable方法检测系统中的 Fluent UI。您可以在主窗体的OnCreate事件上使用此方法调整 TscGP.. 控件。 - 使用
scControls.SC_SetDrawTextModeInControl(AControl: TControl; ADrawTextMode: TscDrawTextMode)方法快速调整 TscGP 中的 DrawTextMode...控件或窗体上的控件。如果 Fluent UI 不可用,您可以禁用 GDI+ 文本绘制。
if not scStyledForm1.IsFluentUIAvailable or (scStyledForm1.FluentUIBackground = scfuibNone) then
begin
scControls.SC_SetDrawTextModeInControl(Self, scdtmGDI);
BorderPanel.FrameWidth := 1;
BorderPanel.FillColor := clBtnFace;
scGPPanel1.TransparentBackground := False;
...
end;
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
- 如果您在 Windows 10 下打开/关闭 Fluent UI,请在控件中将
FluentUIOpaque属性设置为 True / False。
# 2.2. 事件
| 事件 | 说明 |
|---|---|
| OnStyleChanged | 当调整窗体中的样式组件时触发事件 |
| OnTabChanged | 当前激活的Tab标签页发生变化时触发事件 |
| OnBeforeChangeScale | 当调整表单的尺寸大小前触发事件 |
| OnChangeScale | 为其他 DPI 缩放表单时的事件。使用 AScaleFactor 参数可获取表单的实际比例因子,并用它调整一些控件 |
| OnDropDown | 将此事件与 DropDownForm = True 属性一起使用,该事件帮助您在窗体显示之前初始化窗体上的一些控件 |
| OnCloseUp | 将此事件与 DropDownForm = True 属性一起使用,在隐藏下拉表单后,使用此事件与下拉控件进行交互 |
# 2.2.1. OnChangeScale
TscOnChangeScaleEvent = procedure(AScaleFactor: Double) of object;
1
当调整表单的尺寸大小前触发事件。为其他 DPI 缩放表单时的事件。 使用 AScaleFactor 参数获取表单的实际比例因子并用它调整一些控件。
if AScaleFactor >= 4 then // 400% +
scButton1.Images := ImageList5
else
if AScale >=3 then // 300 % +
scButton1.Images := ImageList4
else
if AScale >= 2 then // 200% +
if scButton1.Images := ImageList3
else
if AScale >= 1.5 then // 150 % +
if scButton1.Images := ImageList2
else
scButton1.Images := ImageList1; // 100 % or 125%
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# 2.2.2. OnDropDown
TscOnFormDropDownEvent = procedure(ADropDownForm: TCustomForm; ADropDownControl: TControl) of object;
1
将此事件与 DropDownForm = True 属性一起使用,该事件帮助您在窗体显示之前初始化窗体上的一些控件。
procedure TPopupForm.scStyledForm1DropDown(ADropDownForm: TCustomForm;
ADropDownControl: TControl);
var
S: String;
begin
S := '';
if ADropDownControl <> nil then
begin
if ADropDownControl is TscButton then
begin
S := TscButton(ADropDownControl).Caption;
end
else
if ADropDownControl is TscCustomEdit then
begin
S := TscCustomEdit(ADropDownControl).Text;
end;
end;
if S <> '' then
begin
scListView1.Selected := scListView1.FindCaption(0, S, False, True, False);
if scListView1.Selected <> nil then
scListView1.ItemIndex := scListView1.Selected.Index;
end;
end;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 2.2.3. OnCloseUp
TscOnFormCloseUpEvent = procedure(ADropDownForm: TCustomForm; ADropDownControl: TControl; AAcceptChanges: Boolean) of object;
1
将此事件与 DropDownForm = True 属性一起使用,在隐藏下拉表单后,使用此事件与下拉控件进行交互。
procedure TPopupForm.scStyledForm1CloseUp(ADropDownForm: TCustomForm;
ADropDownControl: TControl; AAcceptChanges: Boolean);
begin
if ADropDownControl <> nil then
begin
if ADropDownControl is TscButton then
begin
TscButton(ADropDownControl).CloseUp(AAcceptChanges);
end
else
if ADropDownControl is TscCustomEdit then
begin
if (scListView1.Selected <> nil) and AAcceptChanges then
TscCustomEdit(ADropDownControl).Text := scListView1.Selected.Caption;
end;
end;
end;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 2.3. 方法
# 2.3.1. CloseUp
procedure CloseUp(AAcceptChanges: Boolean);
1
AAcceptChanges - 使用此参数进行下拉控制。使用此方法隐藏下拉表单。
# 3. TscNcButtonItem
TscNcButtonItem 中 Buttons 使用的控件集合。
# 3.1. 属性
| 属性 | 说明 |
|---|---|
| ImageIndex, HotImageIndex, PressedImagesIndex | 特定状态的图像索引 |
| Enabled | 是否启用按钮 |
| Visible | 按钮是否可见 |
| PopupMenu | 下拉菜单 |
| Caption | 按钮显示的文字 |
| SplitButton | 当 PopupMenu <> nil 时拆分按钮 |
| Style | 按钮的样式 |
| Width | 按钮的宽度。 如果值为 0,则大小将自动 |
| Height | 按钮的高度。 如果值为 0,则大小将自动 |
| MarginLeft, MarginTop, MarginRight, MarginBottom | 表单标题区域中按钮的边距 |
| Position | 表单标题区域中按钮的位置(scbpLeft、scbpRight) |
| Spacing | 按钮中文本和图像之间的间距 |
| Margin | 按钮中文本和图像的边距 |
| ContentMargin | 按钮中左右两侧的额外边距。 使用此值自动增加按钮的宽度(Width = 0) |
| GroupIndex | 按钮组索引 |
| AllowAllUp | 组中的所有按钮都可以为按起的状态 |
| Down | GroupIndex > 0 时的向下状态 |
| Hint | 按钮提示 |
| CustomDropDown | 如果为 True,则按钮将与下拉表单一起使用 |
# 3.2. 事件
| 事件 | 说明 |
|---|---|
| OnPaint | 使用此事件完全重绘按钮,您可以使用来自 TscImageCollection 的自定义图像 |
| OnGetPaintParams | 使用此事件设置特定字体颜色、按钮大小或绘制您的按钮中的内容(AHandled = True) |
| OnClick | 按钮的点击事件 |
| OnMouseMove, OnMouseUp, OnMouseDown | 当进行鼠标相关的操作时触发事件 |
| OnMouseEnter, OnMouseLeave | 当鼠标光标进入或离开时触发事件 |
| OnDropDown | 使用此事件可打开下拉窗口 |
| OnCloseUp | 当下拉窗口关闭时触发事件 |
# 4. TscNCTabItem
TscNcButtonItem 中 Tabs 使用的控件集合。
# 4.1. 属性
| 属性 | 说明 |
|---|---|
| ImageIndex | 标签的图片索引序号 |
| Enabled | 启用标签 |
| Visible | 标签是否可见 |
| Caption | 标签文本 |
| Width | 选项卡的宽度,如果值是 0 那么大小将是自动的 |
| Height | 选项卡的高度,如果值是 0 那么大小将是自动的 |
| MarginTop | 表单标题区域中制表符的上边距 |
| Spacing | 制表符中文本和图像之间的间距 |
| ContentMargin | 选项卡中左右两侧的额外边距,使用此值自动增加选项卡的宽度(宽度 = 0) |
| Hint | 选项卡提示 |
# 4.2. 事件
| 事件 | 说明 |
|---|---|
| OnPaint | 使用此事件完全重绘选项卡,您可以使用来自 TscImageCollection 的自定义图像 |
| OnGetPaintParams | 使用此事件设置特定字体颜色、选项卡大小或绘制您的按钮中的内容(AHandled = True) |
| OnMouseMove,OnMouseUp,OnMouseDown | 当鼠标的关联事件发生时触发的事件,其中 AIndex 表示标签的索引号,X,Y 表示鼠标所在的位置 |
| OnMouseEnter,OnMouseLeave | 当鼠标的关联事件发生时触发的事件,其中 AIndex 表示标签的索引号 |