Delphi VCL styles tutorial - how to change the sty

2019-01-06 16:38发布

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

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

4条回答
冷血范
2楼-- · 2019-01-06 16:59

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. 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".

  2. 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.

  3. 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).

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

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

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

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

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

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

  6. Run your app.

enter image description here

Now, advanced stuff: Change your style at runtime:

I use this button click and formcreate to do that:

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

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;
查看更多
疯言疯语
3楼-- · 2019-01-06 17:06

The best source of information on VCL styles is Rodrigo Ruz's blog: http://theroadtodelphi.wordpress.com/category/vcl-styles/

查看更多
成全新的幸福
4楼-- · 2019-01-06 17:11

A example (public procedure). Remember uses Vcl.Themes;

procedure TData.AllowSKIN( bSKIN:boolean );
var
    sSKIN:string;
begin
    sSKIN := 'Aqua Light Slate';
    if not bSKIN then sSKIN := 'Windows';
    TStyleManager.TrySetStyle( sSKIN );
end;
查看更多
祖国的老花朵
5楼-- · 2019-01-06 17:16

See RRUZ homepage for lots of stuff about VCL Styles.

Here is a primary demo where you can load a couple of styles dynamically : exploring-delphi-xe2-vcl-styles-part-i

查看更多
登录 后发表回答