VCLSkin简单使用

1. TSkinData

TSkinData 主要用于美化你的程序, 只要把TSkinData控件放下去,它就能自动美化所有窗体。

属性

Active: 使用或取消对程序的美化。

DisableTag: 取消对某个特定的组件的美化; 把组件的Tag属性设为99就行了。
(control.tag mod 100=disabletag)

SkinControls: 指定哪类组件能被美化.

SkinFile: skin(皮肤)文件的包含路径的文件名,在运行时加载。

SkinStore: 在设计模式时储备的skin文件.

SkinFormType: 能使用多种美化方式.

方法

LoadFromStream(Stream: TStream);
LoadFromFile(value:string);
LoadFromCollection(astore:TSkinStore;aindex:integer);

在运行时装载skin文件.

UpdateSkinControl(fParent:Tform);
UpdateMenu(fParent:Tform);

在运行时组件创建时进行美化。

事件

OnFormSkin(Sender:TObject;aName:string;Var DoSkin:boolean);

OnFormSkin 事件的发生先于美化窗体, 如果 Doskin 为 true, Vclskin 就会美化这个窗体,如果为false,Vclskin 就会跳过这个窗体. aName 是窗体的类名.

OnSkinChangned(Sender:TObject);

OnSkinChanged 发生在skin文件改变之后。

2. TSkinStore

TSkinStore 能让你在设计模式时储存多个skin文件。

TSkinData 能在运行时从 TSkinStore 装载skin文件:

TSkinData.LoadFromCollection(astore:TSkinStore;aindex:integer),

3. 怎么美化程序界面

你可以在几分钟内构建一个漂亮的程序.

1 把 TSkindata 控件放在主窗体上。

2 设置 Skindata.skinstore 属性 , 把skin文件储存在你的程序中。

3 设置 Skindata.active = true

4 编译运行你的程序。

4.  VCLSkin   FAQ

1 如果我的工程中有14个窗体,用不用每个窗体都放一个skin控件?

不用,你只需要放置一个Tskindata在你的主窗体,Vclskin就能自动美化每个窗体。

2 怎样美化一个内嵌的窗体 ?

Vclskin 不能自动美化内嵌窗体,你要手动控制它。压缩包中有一个"NestedForm"的例子,讲的是在运行状态美化内嵌窗体、框架的。

3 怎样美化动态控件 ?

你需要手动控制它。代码如下:

control:=Tmycontrol.create(form1);
skindata1.UpdateSkincontrol(form1); // add this line to skin dynamic control.

4 怎样美化依靠窗体 ?

Vclskin 支持停靠窗体. 例程代码如下:

procedure TDockableForm.FormShow(Sender: TObject);
begin

if MainForm.skindata1.active then MainForm.skindata1.skinform(handle);

end;

5 怎么美化动态的右键菜单 ?

例程代码如下:

popup:=Tpopupmenu.create(form1);
..... add menuite
skindata1.UpdateMenu(form1); //add this line
popup.popup(x,y);

6 怎样美化动态窗体 ?

Vclskin 可以美化动态窗体 , 但不能自动美化内嵌窗体. 点击这儿查看如何美化内嵌窗体.

7 找不到文件 'c:\program files\borland\delphi7\SM\winskindata.pas'

Delphi7 试用版Delphi7正式版的Dcu文件格式是不一样的。

如果你使用的是正式版,你可以安装一个演示包。vclskin2.zip.
如果你使用的是试用版,你可以安装一个演示包。 D7trial.zip.

8 使用 FastReport 时,出现了“无效操作,控件没有父窗体的的错误提示 ?

设置 TSkindata.skincontrols.xcFastReport = true 就可以解决这个问题。

9 使用 ReportBuilder 出现了“无效操作,控件没有父窗体的错误提示?

你可以在 TSkindata.OnformSkin 事件中取消美化这个控件。 代码如下 :

procedure Tform1.SkinData1FormSkin(Sender: TObject;
aName: String; var DoSkin: Boolean);
begin

//'TppPrintPreview' 就是要取消美化的窗体名称。
if aName='TppPrintPreview' then doskin:=false;

end;

10 如何存取skin文件的颜色?

你可以借助 Tskindata.colors[] 属性来存取颜色。
比如说 , 窗体的背景色是 : skindata.Colors[csButtonFace].

TShemeColor=(csText,csTitleTextActive,csTitleTextNoActive,
csButtonFace,csButtonText,
csButtonHilight,csButtonlight,csButtonShadow,csButtonDkshadow,
csSelectText,csSelectBg,csHilightText,csHilight,
csMenuBar,csMenuBarText,csMenuText,csMenubg,
csScrollbar,csTextDisable);

TShemeColors=array[csText..csTextDisable] of Tcolor;

Skindata.Colors: TShemeColors;

11 用户能自定义那些可视化控件的外观吗?

你可以使用 skin builder自定义细节.

12 怎样取消美化某个窗体或控件?

设置 form.tag=99 取消 美化这个窗体。

13 如何在美化一个工程的窗体标题栏和菜单的风格?

设置 TSkindata.skincontrols.xcMainmenu = false . 

-----------------------------

将窗体嵌入其它窗体Client区,仍然能使用VCLSKIN控件的方法

if not Assigned(orgFilePutUpBillForm) then
  begin
    orgFilePutUpBillForm:=TorgFilePutUpBillForm.Create(Parent);
    orgFilePutUpBillForm.ParentWindow:=TForm(Parent).ClientHandle;
    Parent.SkinData1.UpdateSkinControl(Parent);
    orgFilePutUpBillForm.Show;
  end else orgFilePutUpBillForm.Show;

--------------------------------------------------------------

动态加载控件

uses inifiles;

 procedure readSkin();
 procedure writeSkin(path:string);

procedure Tmain_f.readSkin;
 var
  inif: Tinifile;
  path,SkinPath: string;
begin
//读取皮肤
  path := extractfilepath(application.ExeName) + 'config.ini';
  if not FileExists(path) then
  begin
   // showmessage('配置文件没有找到,请检查是否存在 [config.ini] 文件.');
  end;
  inif := Tinifile.Create(extractfilepath(application.ExeName) + 'config.ini');
  SkinPath:= inif.ReadString('skin', 'path', '');
  if (SkinPath<>'') then
  begin
   SkinData1.skinfile:=SkinPath;
    if not SkinData1.Active then
     SkinData1.Active:=true;
  end
end;

procedure Tmain_f.writeSkin(path: string);
 var
  inif: Tinifile;
  Syspath:string;
begin
  //写入ini文件里
Syspath := extractfilepath(application.ExeName) + 'config.ini';
  if not FileExists(Syspath) then
  begin
   // showmessage('配置文件没有找到,请检查是否存在 [config.ini] 文件.');
  end;
  inif := Tinifile.Create(extractfilepath(application.ExeName) + 'config.ini');
  inif.WriteString('skin','path',path);
end;

procedure Tmain_f.N43Click(Sender: TObject);
var path:string;
begin
//换皮肤
dlgOpen1.filter:='Skin files (*.skn)|*.SKN';
 path:=extractfilepath(application.ExeName)+'skin';
 dlgOpen1.initialdir:= path;
 if dlgOpen1.execute then
 begin
   path:= dlgOpen1.filename;
   if path<>'' then
   begin
    SkinData1.skinfile:=path;
    if not SkinData1.Active then
     SkinData1.Active:=true;
     writeSkin(path);
    end;
 end  ;
end;

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值