【问题标题】:delphi How to change at runtime a firemonkey user style text sub-propertydelphi 如何在运行时更改 firemonkey 用户样式的文本子属性
【发布时间】:2017-10-13 15:55:12
【问题描述】:

我创建了这样的样式:

然后我创建一个名为 TLieu 的 TLayout 继承组件

我的目标是在运行时实例化它并更改:Image 属性、Title.Text 属性、Informations.Text 属性、Map、Infos、Link 按钮

我的代码,但它不起作用:

Procedure TF_Main.Button1Click(Sender: TObject);
var
  Lieu: TLieu;
begin
  Lieu := TLieu.Create(VSB_Place);
  Lieu.Name := 'Test';
  Lieu.StyleName := 'Lieu';
  Lieu.StylesData['Title.Text'] := 'My Title';
  // TLayout(Lieu).StylesData['Title.Text'] := 'My Title';  // this doesn't work either
end;

如何在运行时更改自定义用户样式组件的子属性?

【问题讨论】:

    标签: delphi firemonkey delphi-10.1-berlin


    【解决方案1】:
    1. TLieu 必须继承自 TStyledControl
    2. 使用 Lieu.StyleLookup 代替 Lieu.StyleName
    3. 在更改 StyleData 之前调用 ApplyStyleLookup

    【讨论】:

    • 如何将“OnClick”事件与我的样式按钮相关联:这不起作用:Lieu.StylesData['Link.Onclick'] := Button1Click;
    • Lieu.StylesData['Link.Onclick'] := TValue.From(Button1Click);
    【解决方案2】:

    这是我如何使用 ListBox Item 的示例

    vItem.StylesData['descript'] := 'Description';
    vItem.StylesData['details'] := 'Details text';
    vItem.ImageIndex := 3;
    

    在我的例子中,“descript”和“details”是 TText。您可以在 StyleName 属性中更改名称(在样式中)。

    在我的示例中,要简单地通过为 ListBox 项 (vItem.ImageIndex) 指定图像索引来更改图像,样式中的 TGlyph 图像应具有名称“glyphstyle”。

    // 如何在 style 中访问组件:

    vItem.NeedStyleLookup;
    vItem.ApplyStyleLookup; // without this, FindStyleResource will return nil
    
    vSwitch := vItem.FindStyleResource('switch') as TSwitch;
    Assert(vSwitch <> nil);
    vSwitch.IsChecked := vCampaign.Enable;
    vSwitch.OnClick := DoOnClickSwitch;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 2011-11-19
      • 2016-03-20
      • 1970-01-01
      • 1970-01-01
      • 2016-01-28
      相关资源
      最近更新 更多