VCLSkin是個(gè)方便而且功能強(qiáng)大的界面加強(qiáng)型組件包。只要在程序的任何一個(gè)窗體里加入SkinData組件,設(shè)置好相關(guān)屬性,則所有這個(gè)程序里出現(xiàn)的窗體(包括對(duì)話框)都具有設(shè)置好的界面風(fēng)格。SkinStore組件又可以把一些皮膚文件預(yù)先存在里面,供SkinData隨時(shí)調(diào)用,表現(xiàn)出程序的多種風(fēng)格。下面簡(jiǎn)單地介紹它的用法。
1. VCLSkin綜述
VCLSkin 是一個(gè)能讓Delphi程序變得非常漂亮的控件包. 它允許允許軟件開發(fā)人員不用修改程序代碼便把軟件界面變得非常漂亮。它的美化支持窗體和控件和菜單。VCLSkin同時(shí)也提供了大量高質(zhì)量的skin(皮膚)讓你應(yīng)用于你的程序。
2. VCLSkin特點(diǎn)
VCLSkin 是一個(gè)用于讓用戶的程序界面更加漂亮的擴(kuò)展控件。 它允許軟件開發(fā)人員不用修改源代碼就能讓他們的程序界面更加漂亮。一個(gè)標(biāo)準(zhǔn)的程序界面能在窗體放入VCLSkin控件后變得非常漂亮,而這公公需要幾分鐘的時(shí)間。
VCLSkin 能做些什么 ?
不像其它控件那樣,你需要修改源代碼才能構(gòu)建一個(gè)漂亮的界面, VCLskin 能讓Delphi的標(biāo)準(zhǔn)控件在一下子就變得非常漂亮,而這一切都不用修改源代碼。
VCLSkin 支持以下的窗體:
* Delphi Form
* MDIform . (normal,Maximized, MInimized)
* Common Windows dialogs (Open/Save,Font,Print,Color).
* MsgBox.
* Exception MsgBox.
VCLSkin 支持的標(biāo)準(zhǔn)控件:
* The title bar of TForm
* The title bar buttons
* The borders of Tform
* Tbutton,TBitbtn.
* Tradiobutton and Tcheckbox
* Tmainmenu and Tpopupmenu
* Toolbar buttons
* TTabcontrol and TPageControl
* T Progressbar
* TStatusbar
* TCustomCombox,Tcombobox, TDbCombobox
* TPanel and TGroupbox
* TMemo, TListBox,TListView,TTreeview
* TRadioGroup , TDBRadioGroup.
* TCustomGrid,TStringgrid,TDrawgrid,Tdbgrid.
* Third party component, Enlib, AdvGrid ..
同時(shí)也支持大量的第三方控件。
3.安裝
你可以像安裝其它控件一樣安裝這夽控件,其實(shí)就這幾步:
1. 解壓縮 Vclskin2.zip 到任意目錄
2. 在 Delphi IDE 環(huán)境中選擇菜單 "File. Open...", 然后找到連接庫(kù) vclskindX.dpk, 按著點(diǎn)擊Compile按鈕。
3. 在 Environment 添加VCLSkin控件所在的路徑。
*****************************************************************************************
1. TSkinData
TSkinData 主要用于美化你的程序, 只要把TSkinData控件放下去,它就能自動(dòng)美化所有窗體。
屬性
Active: 使用或取消對(duì)程序的美化。
DisableTag: 取消對(duì)某個(gè)特定的組件的美化; 把組件的Tag屬性設(shè)為99就行了。
(control.tag mod 100=disabletag)
SkinControls: 指定哪類組件能被美化.
SkinFile: skin(皮膚)文件的包含路徑的文件名,在運(yùn)行時(shí)加載。
SkinStore: 在設(shè)計(jì)模式時(shí)儲(chǔ)備的skin文件.
SkinFormType: 能使用多種美化方式.
方法
LoadFromStream(Stream: TStream);
LoadFromFile(value:string);
LoadFromCollection(astore:TSkinStore;aindex:integer);
在運(yùn)行時(shí)裝載skin文件.
UpdateSkinControl(fParent:Tform);
UpdateMenu(fParent:Tform);
在運(yùn)行時(shí)組件創(chuàng)建時(shí)進(jìn)行美化。
事件
OnFormSkin(Sender:TObject;aName:string;Var DoSkin:boolean);
OnFormSkin 事件的發(fā)生先于美化窗體, 如果 Doskin 為 true, Vclskin 就會(huì)美化這個(gè)窗體, 如果為false,Vclskin 就會(huì)跳過(guò)這個(gè)窗體. aName 是窗體的類名.
OnSkinChangned(Sender:TObject);
OnSkinChanged 發(fā)生在skin文件改變之后。
2. TSkinStore
TSkinStore 能讓你在設(shè)計(jì)模式時(shí)儲(chǔ)存多個(gè)skin文件。
TSkinData 能在運(yùn)行時(shí)從 TSkinStore 裝載skin文件:
TSkinData.LoadFromCollection(astore:TSkinStore;aindex:integer),
3. 怎么美化程序界面
你可以在幾分鐘內(nèi)構(gòu)建一個(gè)漂亮的程序.
1 把 TSkindata 控件放在主窗體上。
2 設(shè)置 Skindata.skinstore 屬性 , 把skin文件儲(chǔ)存在你的程序中。
3 設(shè)置 Skindata.active = true
4 編譯運(yùn)行你的程序。
4. VCLSkin FAQ
1 如果我的工程中有14個(gè)窗體,用不用每個(gè)窗體都放一個(gè)skin控件?
不用,你只需要放置一個(gè)Tskindata在你的主窗體,Vclskin就能自動(dòng)美化每個(gè)窗體。
2 怎樣美化一個(gè)內(nèi)嵌的窗體 ?
Vclskin 不能自動(dòng)美化內(nèi)嵌窗體,你要手動(dòng)控制它。壓縮包中有一個(gè)"NestedForm"的例子,講的是在運(yùn)行狀態(tài)美化內(nèi)嵌窗體、框架的。
3 怎樣美化動(dòng)態(tài)控件 ?
你需要手動(dòng)控制它。代碼如下:
control:=Tmycontrol.create(form1);
skindata1.UpdateSkincontrol(form1); // add this line to skin dynamic control.
4 怎樣美化依靠窗體 ?
Vclskin 支持?看绑w. 例程代碼如下:
procedure TDockableForm.FormShow(Sender: TObject);
begin
if MainForm.skindata1.active then MainForm.skindata1.skinform(handle);
end;
5 怎么美化動(dòng)態(tài)的右鍵菜單 ?
例程代碼如下:
popup:=Tpopupmenu.create(form1);
..... add menuite
skindata1.UpdateMenu(form1); //add this line
popup.popup(x,y);
6 怎樣美化動(dòng)態(tài)窗體 ?
Vclskin 可以美化動(dòng)態(tài)窗體 , 但不能自動(dòng)美化內(nèi)嵌窗體. 點(diǎn)擊這兒查看如何美化內(nèi)嵌窗體.
7 找不到文件 'c:\program files\borland\delphi7\SM\winskindata.pas'
Delphi7 試用版與Delphi7正式版的Dcu文件格式是不一樣的。
如果你使用的是正式版,你可以安裝一個(gè)演示包。vclskin2.zip.
如果你使用的是試用版,你可以安裝一個(gè)演示包。 D7trial.zip.
8 使用 FastReport 時(shí),出現(xiàn)了“無(wú)效操作,控件沒有父窗體的的錯(cuò)誤提示 ?
設(shè)置 TSkindata.skincontrols.xcFastReport = true 就可以解決這個(gè)問(wèn)題。
9 使用 ReportBuilder 出現(xiàn)了“無(wú)效操作,控件沒有父窗體的錯(cuò)誤提示?
你可以在 TSkindata.OnformSkin 事件中取消美化這個(gè)控件。 代碼如下 :
procedure Tform1.SkinData1FormSkin(Sender: TObject;
aName: String; var DoSkin: Boolean);
begin
//'TppPrintPreview' 就是要取消美化的窗體名稱。
if aName='TppPrintPreview' then doskin:=false;
end;
10 如何存取skin文件的顏色?
你可以借助 Tskindata.colors[] 屬性來(lái)存取顏色。
比如說(shuō) , 窗體的背景色是 : 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自定義細(xì)節(jié).
12 怎樣取消美化某個(gè)窗體或控件?
設(shè)置 form.tag=99 取消 美化這個(gè)窗體。
13 如何在美化一個(gè)工程的窗體標(biāo)題欄和菜單的風(fēng)格?
設(shè)置 TSkindata.skincontrols.xcMainmenu = false
先建立一個(gè)新工程,加入一些常見的組件。運(yùn)行結(jié)果的界面如圖9.18所示。
然后加入一個(gè)SkinData控件,把Active屬性設(shè)為True。再單擊SkinStore屬性的帶省略號(hào)的按鈕,選擇VCLSkin自帶的一個(gè)皮膚文件macos.skn。然后,編譯,運(yùn)行,結(jié)果如圖9.19所示。
圖9.18 原始程序 圖9.19 加入VCLSkin組件后的效果
此處將程序界面從原來(lái)古板的樣貌變成Mac Os風(fēng)格沒有用一行代碼,只設(shè)了SkinData的屬性。下面我們結(jié)合SkinStore組件講講程序中“換膚”的做法。
在窗體上加入一個(gè)SkinStore組件,在Object Inspector中單擊Store后面的帶省略號(hào)的按鈕,出現(xiàn)如圖9.20所示的窗體。
單擊圖標(biāo),新生成一個(gè)SkinStore,可以像上面設(shè)置SkinData的SkinStore那樣設(shè)置好它的屬性。創(chuàng)建多個(gè)SkinStore,存入多個(gè)皮膚。然后在窗體的按鈕上加入如下代碼(代碼的作用是當(dāng)程序運(yùn)行中按下Button1時(shí),SkinData1會(huì)從SkinStore1中讀取第1個(gè)皮膚,并顯示出來(lái)):
procedure TForm1.Button1Click(Sender: TObject);
begin
SkinData1.LoadFromCollection(SkinStore1,1);
end;
類似地,加入以下代碼:
procedure TForm1.Button3Click(Sender: TObject);
begin
SkinData1.LoadFromCollection(SkinStore1,2);
end;
procedure TForm1.SpeedButton3Click(Sender: TObject);
begin
SkinData1.LoadFromCollection(SkinStore1,3);
end;
“換膚”功能完成了。在程序中按下那幾個(gè)按鈕,程序界面的風(fēng)格就會(huì)相應(yīng)改變。圖9.21示出了兩個(gè)例子。
圖9.21 VCLSkin的另兩種皮膚效果
VCLSkin的功能遠(yuǎn)不止如此,我們挑幾個(gè)說(shuō)一下:
· DataSkin有個(gè)DisableTag屬性。默認(rèn)值是99。如果窗體上哪個(gè)組件的Tag值是99的話,DataSkin不會(huì)對(duì)這個(gè)組件起作用。
· 支持MDI窗體。
· 支持通用Windows對(duì)話框(打開,保存文件等)。
· SkinControls屬性可以設(shè)置對(duì)哪類控件起作用。
· 在一個(gè)程序中不同窗體可以有不同皮膚風(fēng)格。