转载一篇最简单的换肤的方法:
现在软件的界面设计很流行“换肤”(SKIN),例如ICQ、Winamp、超级解霸等等。这种技术的应用可以最大程度的彰显用户的个性,所以一经推出就大受欢迎。其实这种技术实现起来很简单,下面就是我用Delphi 4.0换肤的例子。
首先,在窗体上放一个Image控件,一个Button控件和一个OpenDialog控件。
然后,修改属性。将窗体的Caption属性改为Test Skin Program;将Image控件的Align属性改为alClient,将Stretch属性改为True;将Button控件的Caption属性改为Skin。其余属性不变。
最后,输入代码吧!
unit mainform;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons, ExtCtrls,inifiles, jpeg, Menus;
//一定要将inifiles单元加入uses
type
TForm1 = class(TForm)
Image1: TImage;
OpenDialog1: TOpenDialog;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R*.DFM}
procedure TForm1.FormCreate(Sender: TObject);
Var
SkinINI : Tinifile;
SkinPicture : String;
begin
SkinINI := TiniFile.Create('c:/my documents/skin.ini');
SkinPicture:=SkinINI.ReadString('Interface','skin','');
//将“皮肤”的图片信息存储在SKIN.INI文件中。当然,你还可以将更多的信息存进该文件中。
//例如:SKIN.INI
//[interface]
// skin = c:/my documents/mylove.jpg
IF SkinPicture<>'' then
Begin
try
Image1.Picture.LoadFromFile(SkinPicture);
except
end;
End;
SkinINI.Free;
end;
procedure TForm1.Button1Click(Sender: TObject);
Var
SkinINI : Tinifile;
SkinPicture : String;
Success : Boolean; //指示换肤是否成功
begin
SkinINI := TiniFile.Create('c:/my documents/skin.ini');
SkinPicture:=SkinINI.ReadString('Interface','skin','');
OpenDialog1.Filter:='All Image File(*.jpg;*.jpeg;*.bmp;*.ico)|*.jpg;*.jpeg;*.bmp;*.ico|'+
'Bitmaps(*.bmp)|*.bmp|'+
'Jpeg Image File(*.jpg;*.jpeg)|*.jpeg;*.jpg|'+
'Icons(*.ico)|*.ico';
Success:=True;
IF OpenDialog1.Execute then
Begin
try
Image1.Picture.LoadFromFile(OpenDialog1.Filename);
except
Application.MessageBox('This file is not load!','Error!',MB_OK);
Success:=False;
end;
IF Success then SkinINI.WriteString('interface','skin',OpenDialog1.Filename);
//若换肤成功,将图片信息存进skin.ini文件中
End;
SkinINI.Free;
end;
end.
怎么样,换肤简单吧(什么东西都是“难的不会,会的不难”)!你还可以在此基础上继续向窗体上添加各种控件。因为这只是一个示例,所以就没有加那些。另外,严格得说,“换肤”指令应该在菜单中(即MainMenu控件中,其实也很简单)。但为了没有“赚稿酬”之嫌,所以就用一个Button应付了。(湖南刘炼)