如何在 Rich Edit 中获取所选文本的字体名称

How to get Font Name of selected text in Rich Edit

出于某种原因,我需要在 TRichEdit 中获取所选文本的字体名称。如果用户仅使用 1 种字体,此代码可以正常工作:

ShowMessage(redt1.SelAttributes.Name);

但现在用户使用的字体不止一种。我扫描了 RichEdit 的属性,但没有找到可以帮助我解决问题的函数。它已经花了我一些时间。如何获取所选文本的字体名称?

我刚刚创建了一个包含三行文本的 RTF 文档,每行都使用不同的字体。

以下代码正确列出了使用的字体:

procedure TForm1.GetRTFFonts;
var
  i,
  Len : Integer;
  S : String;
begin
  Len := 0;
  for i := 0 to redt1.Lines.Count - 1 do begin
    redt1.SelStart := Len;
    S := redt1.SelAttributes.Name;
    if Memo1.Lines.IndexOf(S) < 0 then
      Memo1.Lines.Add(S);
    inc(Len, Length(redt1.Lines[i]) + 2);
  end;
end;

逻辑上,redt1.SelAttributes.Name 一次只能命名一种字体,因此要列出所有使用的字体,您需要在文档中一次移动 SelStart 位置一个字符, 而不是一次一行。您可以通过对上面 GetRTFFont 的简单补充来做到这一点。

同样,您可以调整代码以将其限制为 RichEdit 中的当前选择,方法是保存当前选择的开始及其长度,使用上述方法仅检查该范围内的字符,然后恢复原始选择.