zoukankan      html  css  js  c++  java
  • Delphi XE2 之 FireMonkey 入门(20) TStyleBook(皮肤、样式相关)


    我觉得叫 "皮肤" 不如叫 "样式" 或 "风格", 因为它可以包含和动作关联的动画.

    在 FMX 下, 控件可以任意绘制, 各部件个性化的属性可以统一保存成一个 *.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);
    begin
      Application.StyleFileName := '样式文件名'; //如果样式文件和 exe 同目录, 还可以省略路径
    end;
    


    在窗体上添加一个 TStyleBook(StyleBook1), 可以载入、编辑、另存这些样式.
    编辑 StyleBook1 后, 可以把它直接赋给窗体的 StyleBook 属性:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Self.StyleBook := StyleBook1; //只作用于当前窗体
    end;
    


    窗体的 StyleBook 属性既然也是 TStyleBook 对象, 可以直接使用它:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      StyleBook := TStyleBook.Create(Self); //默认情况下, 窗体的 StyleBook 还没有建立
      StyleBook.FileName := '样式文件';     //或者用下一行
      //StyleBook.Resource.LoadFromFile('样式文件'); //TStyleBook 是用 Resource(TStrings) 储存数据的
    end;
    


    单独修改控件样式可以使用 StyleLookup 属性, 如:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Button1.StyleLookup := 'checkbox';
    end;
    //在设计时可从控件的右键菜单
    


    *.style 文件中 StyleName 命名有约定(这是我猜的):

    1、类名(去掉前面的T) + 'style' //这是独立控件的样式名称
    2、类名(去掉前面的T)           //这是控件子部件的样式名称
    3、既然有了命名约定, 控件可以根据自己的类名去套用, 所以会发现大多数控件的 StyleLookup 属性并无赋值
    4、修改控件或子部件的样式都应该通过 StyleLookup 属性, 而不是 StyleName(我都觉得 StyleName 这个属性有点多余).
    


    我倒是发现控件子部件的 StyleName 都可以读的出来:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      ShowMessage(Memo1.HScrollBar.StyleName);
      ShowMessage(Memo1.VScrollBar.StyleName);
    end;
    


    其它诸如 ApplyStyleLookup()、UpdateStyle()、FindStyleResource() 等相关方法, 一般都是被自动调用的.

    程序会把默认样式嵌入到资源中(名称: defaultstyle, 格式: RT_RCDATA), 恢复程序的默认样式时只需:

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Application.StyleFileName := ''; //程序会自动套用默认样式
      Form1.StyleBook := nil;          //如果窗体单独设置了样式, 这样恢复
    end;
    


    之前有同学问到, 怎么修改窗体标题栏的样式?
    学习过程中, 我没有发现很直接的办法;
    暂时要我做, 只能是隐藏标题栏, 重新绘制;
    等了解的窗体的更多机制以后, 或许也能从 *.style 文件中找到办法.

    很肤浅, 谁知道更多, 愿能告诉我.

  • 相关阅读:
    快速幂模板
    部分有关素数的题
    POJ 3624 Charm Bracelet (01背包)
    51Nod 1085 背包问题 (01背包)
    POJ 1789 Truck History (Kruskal 最小生成树)
    HDU 1996 汉诺塔VI
    HDU 2511 汉诺塔X
    HDU 2175 汉诺塔IX (递推)
    HDU 2077 汉诺塔IV (递推)
    HDU 2064 汉诺塔III (递推)
  • 原文地址:https://www.cnblogs.com/del/p/2196045.html
Copyright © 2011-2022 走看看