如果我使用组件 TStyleBook,如何以编程方式更改按钮的 IconTintColor?

How programmatically change IconTintColor of the button if I use a component TStyleBook?

我使用 Delphi 10.3 版本 26.0.36039.7899。在我的 Android 应用程序中,我使用了这个简单的技巧来更改“收藏夹”按钮的图标颜色:

procedure TfMain.LinkPropertyToFieldText4AssignedValue(Sender: TObject;
  AssignValueRec: TBindingAssignValueRec; const Value: TValue);
begin
  sbtnFavorites.StyledSettings := sbtnFavorites.StyledSettings - [TStyledSetting.FontColor];
  if Value.AsString = '1' then
    sbtnFavorites.IconTintColor := TAlphaColors.Hotpink;
  if Value.AsString = '0' then
    sbtnFavorites.IconTintColor := TAlphaColorRec.Grey;
end;

sbtnFavorites 按钮有 StyleLookUp = bookmarkstoolbuttonStyledSettins.FontColor = False。它工作得很好,按钮 sbtnFavorites 根据本地数据库中字段“IsFavor”的值改变它的颜色。

但是,如果我将组件 TStyleBook 放在窗体上,然后将任何样式 (f.e. AndroidSterling.style) 分配给它,那么我的方法已经在这里描述了是行不通的。具有 StyleLookUp = bookmarkstoolbutton 的按钮 sbtnFavorites 的颜色不会改变。

我的问题是:如果我使用组件 TStyleBook,如何以编程方式更改按钮图标 (IconTintColor) 的颜色?

这取决于适用于书籍的样式文件。对于支持着色的样式,它需要在样式簿本身中实现正确的 TintedButton 元素。对于特定样式(例如书签),它不是“自动”的,所以听起来您选择的样式文件没有实现有色元素。

在设计器中编辑样式书,看看样式是如何构建的——看看它们是如何制作的,很有启发性。令人惊讶的是,它没有我最初想象的那么“神奇”!

我选择了一个比 Chris Pimlott 建议的更简单的解决方案来解决这个问题:

  1. sbtnFavorites.StyleLookup := '';
procedure TfMain.LinkPropertyToFieldHintAssignedValue(Sender: TObject;
  AssignValueRec: TBindingAssignValueRec; const Value: TValue);
begin
  if Value.AsString = '1' then
    sbtnFavorites.ImageIndex := 1;
  if Value.AsString = '0' then
    sbtnFavorites.ImageIndex := 0;
end;