You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi XE5下FMX.TMemo运行时修改字体大小无效的求助

Delphi XE5 FMX TMemo运行时修改字体大小的解决办法

在Delphi XE5的FMX框架中,直接修改TMemo.Font.Size无法在运行时更新显示,调用BeginUpdate()/EndUpdate()、Repaint()等方法也无效,且XE5不支持后续版本的TTextSettings属性。

方法1:重置文本触发样式刷新

修改SpinBox1Change方法,通过临时清空再恢复文本的方式,强制Memo重新渲染内容并应用新字体大小:

procedure TForm13.SpinBox1Change(Sender: TObject);
var
  SavedText: string;
begin
  SavedText := Memo1.Text;
  Memo1.Text := '';
  Memo1.Font.Size := SpinBox1.Value;
  Memo1.Text := SavedText;
end;

方法2:遍历更新每行文本的字体

如果需要保留Memo的原有行结构,可直接遍历每行对应的TText样式对象,逐个修改字体大小:

procedure TForm13.SpinBox1Change(Sender: TObject);
var
  I: Integer;
  TextObj: TText;
begin
  Memo1.BeginUpdate;
  try
    // 设置默认字体(后续新增行将使用此大小)
    Memo1.Font.Size := SpinBox1.Value;
    // 更新已有行的字体
    for I := 0 to Memo1.Lines.Count - 1 do
    begin
      TextObj := Memo1.Lines.Objects[I] as TText;
      if Assigned(TextObj) then
        TextObj.Font.Size := SpinBox1.Value;
    end;
  finally
    Memo1.EndUpdate;
    Memo1.Repaint;
  end;
end;

原理说明

FMX的TMemo与VCL版本逻辑不同:其内部已渲染的文本由独立的样式对象管理,直接修改Memo.Font仅会影响后续新增的文本,不会同步到已存在的内容。通过重置文本或直接更新每行的样式对象,才能让已有的文本应用新的字体大小。

内容的提问来源于stack exchange,提问作者GrooverMD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 10:50:37