9

我正在编写一个需要看起来像老式终端会话的备忘录组件。这应该很简单,但是 FireMonkey 样式的工作方式似乎使它变得难以置信的复杂。

在非移动 FireMonkey 应用程序中,我可以右键单击控件并选择“编辑自定义样式”。此选项在移动应用程序中不可用。这是 FireMonkey 开发人员之一给出的原因。

它在 iOS 和 Android 上支持不同的风格。我们无法以 iOS 风格在 Android 上运行应用程序。但是当您尝试更改平台样式时,我们会自动在每个目标平台上使用它。如果你想改变fm控件的默认样式,你应该把form style book放在里面做样式,或者加载到stylebook平台样式里面做修改。

同样重要的是,当您在样式书中加载平台样式时,您可以希望应用程序实例不会有两个平台样式副本(一个 - fmx 包中的系统和样式书中的其他副本)。为此,您应该在 TStylebook.UseStyleManager 中设置标志为 true。在这种情况下,样式手册中的样式将替换平台样式。

好的,所以我认为我需要创建一个自定义样式。如何创建自定义样式以仅覆盖字体和背景属性?

我想我可以像这样覆盖 ApplyStyle 过程。

procedure TMyMemo.ApplyStyle;
var
  BackgroundObject: TFmxObject;
begin
  inherited;

  BackgroundObject := FindStyleResource('content');

  if Assigned(BackgroundObject) then
  begin
    // Change the background color of the background
  end;
end;

我如何知道背景对象是什么类型以及我需要更改哪个属性?

当然,更改控件的背景颜色不会这么难!我错过了 FM 风格的基本内容吗?

4

2 回答 2

7

希望您发现此解决方法有用

uses System.UIConsts;


procedure TfPlanJob.mDetailApplyStyleLookup(Sender: TObject);
var Obj: TFmxObject;
    Rectangle1: TRectangle;
begin    
     Obj := mDetail.FindStyleResource('background');
     if Obj <> nil then
     begin
          TControl(Obj).Margins   := TBounds.Create(TRectF.Create(-1, -1, -1, -1));
          Rectangle1              := TRectangle.Create(Obj);
          Obj.AddObject(Rectangle1);
          Rectangle1.Align        := TAlignLayout.Client;
          Rectangle1.Fill.Color   := claLightslategrey;
          Rectangle1.Stroke.Color := claNull;
          Rectangle1.HitTest      := False;
          Rectangle1.SendToBack;
     end;
end;
于 2018-01-09T09:23:12.893 回答
2

好吧,我发现的一件事是无法在 FireMonkey 中更改字体!您可以将其设置为不同的字体,但是当您在设备上运行它时,它将转到默认字体。

如果您想更改备忘录的背景颜色,您应该在表单中添加一个样式书并加载您想要的样式文件(如默认的浅色 iOS 样式)。加载样式后,转到 memostyle 并更改背景。

希望这可以帮助!

于 2014-01-29T11:03:45.330 回答