做皮肤其实是项浩大的工程,从美工设计、到贴图、到程序设计,都非常的麻烦,如果不是一个非常成熟的产品且有很大的用户群体,并且公司具有相当实力,一般都不会去自己做皮肤,毕竟涉及的东西太多,一旦出现问题,那将对软件本身带来无法预计的后果。
比较出名的有AlphaControls、BusinessSkinForm、DynamicSkinForm、VCLSkin和AppFace 五大项
使用便利性 | 稳定性 | 内存泄漏测试 | 贴图效果测试 | 使用效率 | 皮肤界面 | |
AlphaControls | 便利 | 一般 | 有泄漏 | 很好 | 高 | 精致 |
BusinessSkinForm | 便利 | 好 | 无泄漏 | 一般 | 高 | 一般 |
DynamicSkinForm | 便利 | 好 | 无泄漏 | 一般 | 高 | 一般 |
VCLSkin | 便利 | 一般 | 有泄漏 | 一般 | 一般 | 一般 |
AppFace | 便利 | 差 | 无泄漏 | 一般 | 高 | 一般 |
最后我选了比较精致的AlphaControls,进行测试:
下面是它的下载地址:
慧都控件网有下载!!!
接下来贴代码进行测试,来看各个皮肤的效果:
unit SkinChange;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, sSkinManager, Vcl.StdCtrls, sButton,
Vcl.ExtCtrls, sSkinProvider,sConst, sDefaults, Vcl.Menus;
type
TForm2 = class(TForm)
sSkinManager1: TsSkinManager;
Button1: TButton;
GroupBox1: TGroupBox;
Button2: TButton;
Timer1: TTimer;
sSkinProvider1: TsSkinProvider;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
end;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, sSkinManager, Vcl.StdCtrls, sButton,
Vcl.ExtCtrls, sSkinProvider,sConst, sDefaults, Vcl.Menus;
type
TForm2 = class(TForm)
sSkinManager1: TsSkinManager;
Button1: TButton;
GroupBox1: TGroupBox;
Button2: TButton;
Timer1: TTimer;
sSkinProvider1: TsSkinProvider;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
end;
var
Form2: TForm2;
List:TStringList;
i:integer=0;
implementation
{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject);
begin
if i>0 then
begin
i:=i-1;
sSkinManager1.SkinName := List[i];
end;
end;
procedure TForm2.Button2Click(Sender: TObject);
begin
if i<List.Count then
Form2: TForm2;
List:TStringList;
i:integer=0;
implementation
{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject);
begin
if i>0 then
begin
i:=i-1;
sSkinManager1.SkinName := List[i];
end;
end;
procedure TForm2.Button2Click(Sender: TObject);
begin
if i<List.Count then
begin
i:=i+1;
sSkinManager1.SkinName := List[i];
end;
end;
procedure TForm2.FormCreate(Sender: TObject);
begin
List := TStringList.Create;
sSkinManager1.GetSkinNames(List);
end;
end.
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步