在显示 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 控件可以提供的范围。