GrooverMD
GrooverMD

Reputation: 137

Changing a TMemo font size @ runtime

How does one change a FMX.TMemo font size @ runtime? In the following app the Spinbox1.Change method does not change the Memo.Font.Size. I have tried the BeginUpdate() and EndUpdate() methods of the TMemo. I have also tried Memo1.Repaint() and nothing seems to work. I have looked at every property, function and procedure for TMemo, but, I can't find what I need. Later versions of Delphi have TTextSettings for TMemo, but, XE5 does not. I also tried a class helper for TMemo to add a TTextSettings property, but, to no avail.

unit Unit13;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Graphics, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.StdCtrls, 
  FMX.Edit, FMX.Layouts, FMX.Memo;

type
  TForm13 = class(TForm)
    Memo1: TMemo;
    ToolBar1: TToolBar;
    SpinBox1: TSpinBox;
    procedure FormCreate( Sender : TObject );
    procedure SpinBox1Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form13: TForm13;

implementation

{$R *.fmx}

procedure TForm13.FormCreate( Sender : TObject );
  begin
    Memo1.Font.Size := SpinBox1.Value;
  end;

procedure TForm13.SpinBox1Change(Sender: TObject);
  begin
    Memo1.Font.Size := SpinBox1.Value;
  end;

end.

working with FMX is certainly not like the VCL.

Upvotes: 0

Views: 411

Answers (1)

Tom Brunberg
Tom Brunberg

Reputation: 21033

The TMemo as many other controls has a property StyledSettings which has a few subfields, Family, Size, Style, FontColor and Other.

All except Other are True by default, so the control would automatically follow any used style setting. Set StyledSettings.Size = False in the Object Inspector and the TMemo will follow your own font size settings.

enter image description here

As I don't have any older XE-version than XE7, the above is tested with XE7. If XE5 doesn't have the corresponding settings, I will remove this answer as it doesn't answer your question.

Alternatively, in code you can write:

with Memo1 do
  StyledSettings := StyledSettings - [TStyledSetting.ssSize];

This should work in XE5.

Upvotes: 1

Related Questions