在FireMonkey中更改TMemo的字体和背景颜色

nor*_*aul 8 delphi styles firemonkey-fm3 delphi-xe5

我正在编写一个需要看起来像老式终端会话的备忘录组件.这应该非常简单,但FireMonkey样式的工作方式似乎令人难以置信的复杂.

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

它支持iOS和Android上的不同风格.我们无法在iOS风格的Android上运行应用程序.但是当您尝试更改平台样式时,我们将自动在每个目标平台上使用它.如果要更改fm控件的默认样式,则应该在表单样式书中添加样式,或者加载到样式表平台样式并对其进行更改.

同样非常重要的是,当您在样式簿中加载平台样式时,您可能希望该应用程序实例不具有两个平台样式副本(一个 - 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;
Run Code Online (Sandbox Code Playgroud)

我如何知道背景对象的类型以及需要更改的属性?

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

Gia*_*mbo 6

希望你觉得这个解决方法有用

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;
Run Code Online (Sandbox Code Playgroud)


Rem*_*emi 2

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

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

希望这可以帮助!