Windows 如何在Richedit控件中呈现软返回?
在显示richedit控件的应用程序中,我希望能够直观地区分软退货(使用SHIFT-ENTER生成)和硬退货(使用ENTER生成) 我已经在使用JVCL richedit,不想在那个时候切换 你将如何着手做那件事 微软Word可能是一个灵感来源,他们展示了↵ 每行末尾的软回报和硬回报分别签名 我只是在寻找一些提示,好主意,你将如何处理这个项目。当然,我不是要求任何人做我的工作。:-) 我已经在使用JVCL richedit,不想在那个时候切换 JVCL富编辑控件包装Windows富编辑控件。Windows rich edit控件不会按您希望的方式显示空白。它没有这样做的功能。如果你想让控件显示这样的符号,你需要自己绘制它们,我怀疑这是否能以一种非常有效和流畅的方式完成 听起来像是在显示代码,因为您提到了语法突出显示。在这种情况下,丰富的编辑控件是错误的选择。您应该使用设计用于显示和/或编辑代码的控件 我已经在使用JVCL richedit,不想在那个时候切换 JVCL富编辑控件包装Windows富编辑控件。Windows rich edit控件不会按您希望的方式显示空白。它没有这样做的功能。如果你想让控件显示这样的符号,你需要自己绘制它们,我怀疑这是否能以一种非常有效和流畅的方式完成Windows 如何在Richedit控件中呈现软返回?,windows,delphi,richedit,Windows,Delphi,Richedit,在显示richedit控件的应用程序中,我希望能够直观地区分软退货(使用SHIFT-ENTER生成)和硬退货(使用ENTER生成) 我已经在使用JVCL richedit,不想在那个时候切换 你将如何着手做那件事 微软Word可能是一个灵感来源,他们展示了↵ 每行末尾的软回报和硬回报分别签名 我只是在寻找一些提示,好主意,你将如何处理这个项目。当然,我不是要求任何人做我的工作。:-) 我已经在使用JVCL richedit,不想在那个时候切换 JVCL富编辑控件包装Windows富编辑控件。Wi
听起来像是在显示代码,因为您提到了语法突出显示。在这种情况下,丰富的编辑控件是错误的选择。您应该使用设计用于显示和/或编辑代码的控件 虽然不能直接回答您的问题,但对于您提到的需要在一个控件中同时使用Richedit和语法突出显示的问题,有一个可能的解决方案,那就是使用SynEdit SynEdit包括一些允许导出语法格式文本的非可视组件,其中一个组件是
TSynExporterRTF
假设您的richedit中有一段纯文本代码,并且您希望语法突出显示该部分,您可以选择该文本并将其复制到TSynEdit
,然后将其导出到TSynExporterRTF
,该文本现在将包含语法格式的文本(假设已正确定义高亮显示)。然后,您只需将数据写入TMemoryStream
,并用现在语法格式的代码替换选定的richedit文本
为此,您可以尝试以下方法:
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控件所能提供的范围。虽然不是您问题的直接答案,对于您提到的需要在一个控件中同时使用Richedit和语法高亮显示的问题,有一个可能的解决方案,那就是使用SynEdit SynEdit包括一些允许导出语法格式文本的非可视组件,其中一个组件是
TSynExporterRTF
假设您的richedit中有一段纯文本代码,并且您希望语法突出显示该部分,您可以选择该文本并将其复制到TSynEdit
,然后将其导出到TSynExporterRTF
,该文本现在将包含语法格式的文本(假设已正确定义高亮显示)。然后,您只需将数据写入TMemoryStream
,并用现在语法格式的代码替换选定的richedit文本
为此,您可以尝试以下方法:
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控件所能提供的功能,您所需的要求可能超出了范围。我会使用一个像synedit或闪烁那样已经具有此类功能的控件。我会使用一个像synedit或闪烁那样已经具有此类功能的控件。@EmmanuelIchbiah:您可以随时从划痕如果做得好,这永远是一种能给你想要的东西的方法。像大卫一样,我怀疑RichEdit是否适合你。@EmmanuelIchbiah:你总是可以从头开始编写自己的控件!如果做得好,这永远是一种能给你想要的东西的方法。和David一样,我怀疑RichEdit是否适合您。如果程序可以从剪贴板导入或导出到剪贴板,那么它也可以从/导出到剪贴板memory@DavidHeffernan我已经用代码编辑了我的答案,现在在内存中工作,而不是在剪贴板上,尽管我不确定这与原始海报的需求有多离题/相关?我没有足够的分数来写一个简单的评论,我想你的回答是非常相关的。“我投了更高的票。”大卫·费弗南非常感谢你,和+1表示您对不使用剪贴板而使用内存的评论,这显然是更自然的方法。如果程序可以从剪贴板导入或导出到剪贴板,那么它可以从/到执行相同的操作memory@DavidHeffernan我已经用代码编辑了我的答案,现在可以在内存中工作,而不是在剪贴板中工作,尽管我不确定这与原始海报需求有多脱离主题/相关?我没有足够的分数来写一个简单的评论,我想你的回答是非常相关的。我投了更高的票。@DavidHeffernan非常感谢你,并且+1感谢你关于不使用剪贴板而使用内存的评论,这显然是更自然的方式。