如何更改 Delphi FMX TBindNavigator 图像?

How do you change the Delphi FMX TBindNavigator Images?

我想更改与 Delphi 的 FMX TBindNavigator 关联的默认图像。当我右键单击 IDE 中的 TBindNavigator 控件时,我没有看到以下选项:

如何更改与 TBindNavigator 关联的图像?

例如,我想让 FMX BindNavigator 看起来像 VCL DBNavigator

来自这里:

为此:

在 Delphi FMX 中,TBindNavigator 组件似乎不可自定义,因为它不公开任何样式属性,但可以对组件的源代码 (Fmx.Bind.Navigator.pas) 进行一些更改以覆盖它的默认样式。请注意,这些更改仅在运行时可见,并已在 Delphi 11 的空白项目上进行了测试。

  1. TBindNavigator 中的按钮默认使用与 TCornerButton 相同的样式,但您可以更改它以使用 TButton 的默认样式或其他自定义样式。找到 TBindNavButton.GetDefaultStyleLookupName 函数并 更改 结果的值:

    Result := 'ButtonStyle';
    
  2. 按钮中的颜色都是一样的,因为组件使用了TCornerButton(或如上修改为TButton)的文本颜色。要为每个按钮指定不同的颜色,请找到 TBindNavButton.ApplyStyle 过程并 替换 内容 inside if FPath <> nil then 检查这样的东西:

    case FIndex of
      nbFirst: FPath.Fill.Color := TAlphaColors.Blue;
      nbPrior: FPath.Fill.Color := TAlphaColors.Blue;
      nbNext: FPath.Fill.Color := TAlphaColors.Blue;
      nbLast: FPath.Fill.Color := TAlphaColors.Blue;
      nbInsert: FPath.Fill.Color := TAlphaColors.Firebrick;
      nbDelete: FPath.Fill.Color := TAlphaColors.Firebrick;
      nbEdit: FPath.Fill.Color := TAlphaColors.Blue;
      nbPost: FPath.Fill.Color := TAlphaColors.Forestgreen;
      nbCancel: FPath.Fill.Color := TAlphaColors.Firebrick;
      nbRefresh: FPath.Fill.Color := TAlphaColors.Blue;
      nbApplyUpdates: FPath.Fill.Color := TAlphaColors.Blue;
      nbCancelUpdates: FPath.Fill.Color := TAlphaColors.Blue;
    end;
    
  3. FMX TBindNavigator 使用矢量路径来呈现其图标而不是使用图像,这些可以在与 SVG 格式的字符串相同的源文件中找到。要更改图标,您必须拥有其 SVG 数据并替换其在 BtnTypePath 数组中的相应字符串。例如,这里的编辑图标看起来像一张纸 sheet 被向上箭头替换,看起来更像它的 VCL 对应物:

    BtnTypePath: array[TBindNavigateBtn] of string = (
      ...
      // edit
      'M 291.667,346.113 L 316.667,311.738 L 341.236,346.113 Z ',  // Arrow pointing up
      ...
    );
    
  4. 图标的大小也硬编码在文件中。要更改此设置,请找到 TCustomBindNavigator.InitButtons 过程并编辑这些行:

    Btn.FPath.Width := 12;   // Make them smaller
    Btn.FPath.Height := 12;  // Make them smaller
    

通过之前的所有更改,我们现在有一个在运行时更类似于 VCL 对应栏的栏。