是否有一个很好的 VCL 样式教程,我们可以在其中了解如何动态(在运行时)加载/更改样式?
这应该适用于 Delphi XE2 及更高版本,因为 XE2 是第一个使用 VCL 样式的版本。
最佳答案
我添加答案是因为本地信息通常比链接更受青睐。
以下是开始之前您需要了解的关键事实:
许多 VCL 控件都有颜色属性,但是当样式打开时,这些属性将被忽略,并且像 Button 这样的默认“公共(public)控件”将由 Delphi 本身绘制,而不是使用 XP 或“Windows自带”的Windows 2000风格。
不知何故,在您的应用程序深处,VCL 样式放置了一些钩子(Hook)来接管对控件的绘制。它可以处理的所有内容都将使用常规控件顶部的“皮肤”进行绘制。许多人称之为“为 vcl 换肤”,在 VCL 样式之前,您可能已经找到了第三方皮肤系统。现在它已内置。
任何没有被钩住的东西,仍然会得到常规的样式。因此,大多数第三方控件和 VCL 的某些部分不会被主题化。不要期望立即得到完美的结果。此外,有时您可能会看到由于蒙皮而导致的一些瞬时闪烁或故障,这是可以预料的。在运行时添加样式加载,结果的最终质量谁也说不准。您不一定能保证在运行时加载的样式将包含您可能希望它包含的所有内容。您也不能保证您静态包含在应用程序中的内容,但至少静态包含的内容可以由您的 QA 团队(可能是您)进行验证。
以下是最简单的入门步骤:实际上只有第 2 步到第 4 步是必要的。
单击文件 -> 新建 -> VCL Forms 项目。
右键单击“项目管理器” Pane 中的项目选项,然后单击“属性”。导航至应用程序 -> 外观
单击自定义样式即可将其打开。 (Amakrits 是我列表中的第一个,所以我将单击它)。
单击“默认样式”组合框并将其更改为默认以外的其他样式。
在表单上填写一些内容,使其不为空。 (按钮、列表框等)。
运行您的应用。
现在,高级内容:在运行时更改样式:
我使用此按钮单击和 formcreate 来执行此操作:
将 fdefaultStyleName:String;
添加到表单的私有(private)部分。
确保Vcl.Themes
位于您的uses子句中。
procedure TForm1.Button1Click(Sender: TObject);
begin
if Assigned(TStyleManager.ActiveStyle) and (TStyleManager.ActiveStyle.Name<>'Windows') then begin
TStyleManager.TrySetStyle('Windows');
end else begin
TStyleManager.TrySetStyle(fdefaultStyleName); // whatever was in the project settings.
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
if Assigned(TStyleManager.ActiveStyle) then
fdefaultStyleName := TStyleManager.ActiveStyle.Name;
end;
关于Delphi VCL 样式教程 - 如何在运行时更改样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9906312/