Delphi VCL 样式教程——如何在运行时更改样式 [英] Delphi VCL styles tutorial - how to change the style at runtime

查看:18
本文介绍了Delphi VCL 样式教程——如何在运行时更改样式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

是否有一个很好的 VCL 样式教程,我们可以在其中了解如何动态(在运行时)加载/更改样式?

Is there a good VCL Styles tutorial where we see how to dynamically (in run time) load/change the style ?

这应该适用于 Delphi XE2 及更高版本,因为 XE2 是第一个带有 VCL 样式的版本.

This should work with Delphi XE2 and up, since XE2 is the first version with VCL Styles.

推荐答案

我添加了一个答案,因为本地信息通常比链接更受欢迎.

I'm adding an answer because local information is often preferred to just links.

在开始之前,您需要了解以下关键事实:

Here's the key facts you need to know before you start:

  1. 许多 VCL 控件具有颜色属性,但是当样式打开时这些属性将被忽略,并且默认的通用控件"如 Button 将由 Delphi 本身绘制,而不是使用 XP 或Windows 自带"的 Windows 2000 风格.

  1. Many VCL controls have color properties, but those properties are going to get ignored when styles are on, and the default "common controls" like Button are going to get drawn by Delphi itself, instead of using the XP or Windows 2000 style that "comes with windows".

不知何故,在您的应用程序深处,VCL 样式将钩子放入接管绘制控件的过程中.它可以处理的所有内容都将使用常规控件顶部的皮肤"绘制.许多人称其为vcl 皮肤",在 VCL 样式之前,您可能已经找到了第三方皮肤系统.现在它是内置的.

Somehow, deep within your application, VCL styles puts hooks in that take over painting your controls. Everything that it can handle, will be drawn using a "skin" on top of the regular controls. Many people call this "skinning the vcl", and prior to VCL styles, you might have found a third party skin system. Now it's built in.

任何没有被吸引住的东西,仍然会得到常规的风格.所以大多数第三方控件,以及 VCL 的一些位将不会被主题化.不要期望完美的即时结果.此外,由于蒙皮,您有时可能会看到一些瞬间闪烁或故障,这是意料之中的.在运行时添加样式加载,结果的最终质量是任何人的猜测.您不一定能保证在运行时加载的样式将包含您可能希望它包含的所有内容.您也不能保证静态包含在您的应用中的那些,但至少您静态包含的那些可以由您的 QA 团队(可能是您)验证.

Anything that is not hooked, will still get the regular style. So most third party controls, and some bits of the VCL will not be themed. Don't expect perfect instant results. Also, you might sometimes see some momentary flicker or glitches as a result of skinning, that's to be expected. Add loading of styles at runtime, and the end-quality of your result is anybody's guess. You can't necessarily guarantee that the style which is loaded at runtime, will contain everything you might want it to contain. Nor can you guarantee that with one you statically include in your app, but at least the ones you statically include could be verified by your QA team (which might be you).

这里是最简单的入门步骤:实际上只有第 2 步到第 4 步是必不可少的.

And here's the simplest steps to get started: Really only step #2 through #4 are essential.

  1. 点击文件 -> 新建 -> VCL 表单项目.

  1. Click File -> New -> VCL Forms project.

右键单击项目管理器窗格中的项目选项,然后单击属性.导航到应用程序 -> 外观

Right click on the project options in the Project manager pane, and click properties. Navigate to Application -> Appearance

单击自定义样式将其打开.(Amakrits 是我列表中的第一个,所以我会点击它).

Click on a custom style to turn it on. (Amakrits is the first in my list, so I'll click that).

单击默认样式"组合框并将其更改为默认值以外的其他内容.

Click on the Default Style combobox and change it to something other than default.

在你的表格上放一些东西,这样它就不会是空的.(按钮、列表框等).

Put something on your form so it's not empty. (A button, a listbox, etc).

运行您的应用.

现在,高级的东西:在运行时改变你的风格:

我使用这个按钮点击和 formcreate 来做到这一点:

I use this button click and formcreate to do that:

fdefaultStyleName:String; 添加到表单的私有部分.

Add fdefaultStyleName:String; to private section of your form.

确保 Vcl.Themes 在您的使用子句中.

Make sure Vcl.Themes is in your uses clause.

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 样式教程——如何在运行时更改样式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆