Delphi XE2 之 FireMonkey 入门(20) - TStyleBook(皮肤、样式相关)
生活随笔
收集整理的這篇文章主要介紹了
Delphi XE2 之 FireMonkey 入门(20) - TStyleBook(皮肤、样式相关)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
我覺得叫 "皮膚" 不如叫 "樣式" 或 "風格", 因為它可以包含和動作關(guān)聯(lián)的動畫.
在 FMX 下, 控件可以任意繪制, 各部件個性化的屬性可以統(tǒng)一保存成一個 *.style 文件.
XE2 在 "...\Program Files\Embarcadero\RAD Studio\9.0\Redist\styles\Fmx\" 下提供了如下樣式文件:
Air.Style Amakrits.Style AquaGraphite.style Blend.Style dark.style FMX.Platform.iOS.style FMX.Platform.Mac.style FMX.Platform.Win.style GoldenGraphite.Style iOS.Style MacBlue.Style MacGraphite.Style RubyGraphite.style Windows7.Style
文件是文本格式, 類似窗體文件, 可用 TStyleBook 讀入并管理.
不過要給程序套用樣式, 確簡單得很:
procedure TForm1.Button1Click(Sender: TObject); beginApplication.StyleFileName := '樣式文件名'; //如果樣式文件和 exe 同目錄, 還可以省略路徑 end;
在窗體上添加一個 TStyleBook(StyleBook1), 可以載入、編輯、另存這些樣式.
編輯 StyleBook1 后, 可以把它直接賦給窗體的 StyleBook 屬性:
procedure TForm1.Button1Click(Sender: TObject); beginSelf.StyleBook := StyleBook1; //只作用于當前窗體 end;
窗體的 StyleBook 屬性既然也是 TStyleBook 對象, 可以直接使用它:
procedure TForm1.Button1Click(Sender: TObject); beginStyleBook := TStyleBook.Create(Self); //默認情況下, 窗體的 StyleBook 還沒有建立StyleBook.FileName := '樣式文件'; //或者用下一行//StyleBook.Resource.LoadFromFile('樣式文件'); //TStyleBook 是用 Resource(TStrings) 儲存數(shù)據(jù)的 end;
單獨修改控件樣式可以使用 StyleLookup 屬性, 如:
procedure TForm1.Button1Click(Sender: TObject); beginButton1.StyleLookup := 'checkbox'; end; //在設計時可從控件的右鍵菜單
*.style 文件中 StyleName 命名有約定(這是我猜的):
1、類名(去掉前面的T) + 'style' //這是獨立控件的樣式名稱 2、類名(去掉前面的T) //這是控件子部件的樣式名稱 3、既然有了命名約定, 控件可以根據(jù)自己的類名去套用, 所以會發(fā)現(xiàn)大多數(shù)控件的 StyleLookup 屬性并無賦值 4、修改控件或子部件的樣式都應該通過 StyleLookup 屬性, 而不是 StyleName(我都覺得 StyleName 這個屬性有點多余).
我倒是發(fā)現(xiàn)控件子部件的 StyleName 都可以讀的出來:
procedure TForm1.Button1Click(Sender: TObject); beginShowMessage(Memo1.HScrollBar.StyleName);ShowMessage(Memo1.VScrollBar.StyleName); end;
其它諸如 ApplyStyleLookup()、UpdateStyle()、FindStyleResource() 等相關(guān)方法, 一般都是被自動調(diào)用的.
程序會把默認樣式嵌入到資源中(名稱: defaultstyle, 格式: RT_RCDATA), 恢復程序的默認樣式時只需:
procedure TForm1.Button1Click(Sender: TObject); beginApplication.StyleFileName := ''; //程序會自動套用默認樣式Form1.StyleBook := nil; //如果窗體單獨設置了樣式, 這樣恢復 end;
之前有同學問到, 怎么修改窗體標題欄的樣式?
學習過程中, 我沒有發(fā)現(xiàn)很直接的辦法;
暫時要我做, 只能是隱藏標題欄, 重新繪制;
等了解的窗體的更多機制以后, 或許也能從 *.style 文件中找到辦法.
很膚淺, 誰知道更多, 愿能告訴我.
轉(zhuǎn)載于:https://www.cnblogs.com/del/archive/2011/09/30/2196045.html
總結(jié)
以上是生活随笔為你收集整理的Delphi XE2 之 FireMonkey 入门(20) - TStyleBook(皮肤、样式相关)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JavaScript 实现 GriwVi
- 下一篇: 测试人员容易遗漏一些隐藏的缺陷