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
相关产品推荐
相关产品推荐

