樣式工具控制元件
# 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 表示標籤的索引號 |