有没有很好的《 VCL样式》教程,我们在其中可以看到如何动态(在运行时)加载/更改样式?
这应该适用于Delphi XE2及更高版本,因为XE2是具有VCL样式的第一个版本。
最佳答案
我要添加一个答案,因为本地信息通常比链接更受欢迎。
在开始之前,您需要了解以下关键事实:
许多VCL控件具有颜色属性,但是在打开样式时这些属性将被忽略,而默认的“公共控件”(如Button)将由Delphi自己绘制,而不是使用“出现”的XP或Windows 2000样式带窗户”。
不知何故,在您的应用程序深处,VCL样式使钩子接管了绘制控件的工作。它可以处理的所有内容都将在常规控件的顶部使用“皮肤”绘制。很多人称此为“皮肤的vcl”,在使用VCL样式之前,您可能已经找到了第三方皮肤系统。现在它是内置的。
任何不被迷住的东西,仍将保持常规样式。因此,大多数第三方控件以及VCL的某些位都不会成为主题。不要期望完美的即时结果。另外,有时可能会由于蒙皮而看到一些短暂的闪烁或毛刺,这是可以预期的。在运行时添加样式加载,任何人都可以猜测结果的最终质量。您不一定要保证在运行时加载的样式将包含您可能希望包含的所有内容。您也不能保证将一个静态包含在您的应用程序中的应用程序,但至少可以由您的质量检查团队(可能是您)验证您静态包含的应用程序。
这是最简单的入门步骤:实际上,仅步骤2至#4是必不可少的。
单击文件->新建-> VCL表单项目。
右键单击“项目管理器”窗格中的项目选项,然后单击“属性”。导航到应用程序->外观
单击自定义样式将其打开。 (Amakrits是我列表中的第一个,因此我将其单击)。
单击默认样式组合框,并将其更改为默认以外的其他名称。
在表单上放一些东西,使其不为空。 (按钮,列表框等)。
运行您的应用。
现在,高级内容:在运行时更改样式:
我使用此按钮单击并使用formcreate来做到这一点:
将fdefaultStyleName:String;
添加到表单的私有部分。
确保Vcl.Themes
在您的using子句中。
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;