如何更改 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 的空白项目上进行了测试。
TBindNavigator 中的按钮默认使用与 TCornerButton 相同的样式,但您可以更改它以使用 TButton 的默认样式或其他自定义样式。找到 TBindNavButton.GetDefaultStyleLookupName
函数并 更改 结果的值:
Result := 'ButtonStyle';
按钮中的颜色都是一样的,因为组件使用了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;
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
...
);
图标的大小也硬编码在文件中。要更改此设置,请找到 TCustomBindNavigator.InitButtons
过程并编辑这些行:
Btn.FPath.Width := 12; // Make them smaller
Btn.FPath.Height := 12; // Make them smaller
通过之前的所有更改,我们现在有一个在运行时更类似于 VCL 对应栏的栏。
我想更改与 Delphi 的 FMX TBindNavigator 关联的默认图像。当我右键单击 IDE 中的 TBindNavigator 控件时,我没有看到以下选项:
- 编辑自定义样式...
- 编辑默认样式...
如何更改与 TBindNavigator 关联的图像?
例如,我想让 FMX BindNavigator 看起来像 VCL DBNavigator
来自这里:
为此:
在 Delphi FMX 中,TBindNavigator 组件似乎不可自定义,因为它不公开任何样式属性,但可以对组件的源代码 (Fmx.Bind.Navigator.pas
) 进行一些更改以覆盖它的默认样式。请注意,这些更改仅在运行时可见,并已在 Delphi 11 的空白项目上进行了测试。
TBindNavigator 中的按钮默认使用与 TCornerButton 相同的样式,但您可以更改它以使用 TButton 的默认样式或其他自定义样式。找到
TBindNavButton.GetDefaultStyleLookupName
函数并 更改 结果的值:Result := 'ButtonStyle';
按钮中的颜色都是一样的,因为组件使用了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;
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 ... );
图标的大小也硬编码在文件中。要更改此设置,请找到
TCustomBindNavigator.InitButtons
过程并编辑这些行:Btn.FPath.Width := 12; // Make them smaller Btn.FPath.Height := 12; // Make them smaller
通过之前的所有更改,我们现在有一个在运行时更类似于 VCL 对应栏的栏。