如何在 Richedit 控件中呈现软返回



在显示 richedit 控件的应用程序中,我希望能够直观地区分软回车(使用 SHIFT ENTER 生成)和硬回车(使用 ENTER 生成)。

我已经使用了 JVCL richedit,不想在这一点上切换。

你会怎么做?

Microsoft Word 可能是灵感来源,它们在每行末尾显示一个 ↵ 符号表示软返回,一个 ¶ 符号表示硬返回。

我只是在寻找提示,好主意,您将如何处理这个项目。当然,我不是要求任何人做我的工作。:-)

我已经使用了 JVCL richedit,不想在这一点上切换。

JVCL 富编辑控件包装了 Windows 富编辑控件。Windows 丰富的编辑控件不会按所需方式显示空格。它没有这样做的功能。如果您希望控件显示此类符号,则需要自己绘制它们,我怀疑这是否可以以非常有效和流畅的方式完成。

听起来您正在显示代码,因为您提到了语法突出显示。在这种情况下,丰富的编辑控件是错误的选择。应使用专为显示和/或编辑代码而设计的控件。

虽然不是对您的问题的直接回答,但您提到的需要在一个控件中同时使用 Richedit 和语法突出显示的问题有一个可能的解决方案,那就是使用 SynEdit。

SynEdit 包括一些允许导出语法格式文本的非可视组件,其中一个组件是 TSynExporterRTF

假设您在 richedit 中有一段纯文本代码,并且您希望在语法上突出显示该部分,您可以选择该文本并将其复制到TSynEdit,然后将其导出到现在将包含语法格式文本的TSynExporterRTF(假设已正确定义荧光笔)。然后,您只需将数据写入TMemoryStream,并将选定的富编辑文本替换为现在语法格式的代码。

为此,您可以尝试如下操作:

procedure SyntaxFormatRichEditText(RichEdit: TRichEdit; SynHighlighter: TSynCustomHighlighter);
var
  SynEdit: TSynEdit;
  SynExporterRTF: TSynExporterRTF;
  MS: TMemoryStream;
begin
  SynEdit := TSynEdit.Create(nil);
  try
    SynEdit.Highlighter := SynHighlighter;
    SynEdit.Lines.Text := RichEdit.SelText;
    SynExporterRTF := TSynExporterRTF.Create(nil);
    try
      SynExporterRTF.Highlighter := SynHighlighter;
      MS := TMemoryStream.Create;
      try
        SynExporterRTF.ExportAll(SynEdit.Lines);
        SynExporterRTF.SaveToStream(MS);
        MS.Seek(0, soBeginning);
        RichEdit.SetSelTextBuf(MS.Memory);
        RichEdit.SetFocus;
      finally
        MS.Free;
      end;
    finally
      SynExporterRTF.Free;
    end;
  finally
    SynEdit.Free;
  end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
  SyntaxFormatRichEditText(RichEdit1, SynPasSyn1);
end;

如果有的话,正如其他人所建议的那样,您需要的要求可能超出了 Richedit 控件可以提供的范围。

最新更新