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