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

查看:333
本文介绍了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的某些位都不会成为主题.不要期望完美的即时结果.另外,您有时可能会由于蒙皮而看到一些短暂的闪烁或毛刺,这是可以预料的.在运行时添加样式加载,结果的最终质量是任何人的猜测.您不一定要保证在运行时加载的样式将包含您可能希望包含的所有内容.您也不能保证将一个静态包含在您的应用程序中,但至少可以由您的质量检查团队(可能是您)验证您静态包含的内容.

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 Forms项目.

  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在您的uses子句中.

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天全站免登陆