Изменить шрифт и цвет фона TMemo в FireMonkey

Я пишу мемо-компонент, который должен выглядеть как старомодная терминальная сессия. Это должно быть действительно просто, но то, как работают стили FireMonkey, делает его невероятно сложным.

В немобильном приложении FireMonkey я могу щелкнуть правой кнопкой мыши элемент управления и выбрать "Редактировать пользовательский стиль". Эта опция недоступна в мобильных приложениях. Вот причина, приведенная одним из разработчиков FireMonkey.

Это поддержка различных стилей на iOS и Android. Мы не можем запустить приложение на Android в стиле iOS. Но когда вы пытаетесь изменить стиль платформы, мы автоматически используем ее на каждой целевой платформе. Если вы хотите изменить стиль по умолчанию для элемента управления fm, вы должны поместить книгу стилей формы и создать в ней стиль или загрузить стиль платформы stylebook и внести в нее изменения.

Также очень важно, когда вы загружаете стиль платформы в книгу стилей, вы можете захотеть, чтобы у экземпляра приложения не было двух копий стиля платформы (одна - system в пакете fmx и другая копия в вашей книге стилей). Для этого вы должны установить флаг true в TStylebook.UseStyleManager. В этом случае стиль в книге стилей заменит стиль платформы.

Хорошо, поэтому я считаю, что мне нужно создать собственный стиль. Как мне создать собственный стиль, чтобы переопределить только свойства шрифта и фона?

Я думаю, я могу переопределить процедуру 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?

2 ответа

Решение

Хорошо, одна вещь, которую я узнал, - то, что шрифты не могут быть изменены в FireMonkey! Вы можете установить другой шрифт, но когда вы запустите его на устройстве, он перейдет к стандартному.

Если вы хотите изменить цвет фона для заметки, вам нужно добавить в форму книгу стилей и загрузить нужный файл стиля (например, стиль iOS по умолчанию). Когда вы загрузите стиль, перейдите в memostyle и измените фон.

Надеюсь это поможет!

Надеюсь, вы найдете этот обходной путь полезным

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;
Другие вопросы по тегам