Delphi复制备忘录到Richedit问题

Delphi复制备忘录到Richedit问题,delphi,word-wrap,line-breaks,tmemo,trichedit,Delphi,Word Wrap,Line Breaks,Tmemo,Trichedit,将备忘录内容复制到richedit组件时出现问题 我以为会的 Richedit.text := memo.text; 但是,如果我使用此选项,当备忘录文本换行到新行(不是CR/LF)时,Richedit会开始一个新行,而只是换行。当备忘录开始一个新行时,richedit也开始一个新行,这很好 有人知道如何将备忘录中的文本复制到richeditbox中,而不会在备忘录文本换行时在Richedit中断行吗 谢谢 科林当我这样做的时候 RichEdit1.Text := Memo1.Text Me

将备忘录内容复制到richedit组件时出现问题

我以为会的

Richedit.text := memo.text;
但是,如果我使用此选项,当备忘录文本换行到新行(不是CR/LF)时,Richedit会开始一个新行,而只是换行。当备忘录开始一个新行时,richedit也开始一个新行,这很好

有人知道如何将备忘录中的文本复制到richeditbox中,而不会在备忘录文本换行时在Richedit中断行吗

谢谢

科林

当我这样做的时候

RichEdit1.Text := Memo1.Text
Memo1
中的虚拟“换行符”不会在
RichEdit
中神奇地转换为换行符(CRLF),它们不应该被转换。这些“换行符”不存储在备忘录文本缓冲区中。事实上,官方的Embarcadero文件指出

将WordWrap设置为true,使编辑控件将文本换行到右边距,使其适合客户端区域。包装只是装饰性的。文本不包含任何未显式输入的返回字符

无论如何,另一种方法是

RichEdit1.Lines.Assign(Memo1.Lines);
尽管这将保留虚拟换行符,如下所述

更新 很可能您的代码中还有其他一些奇怪之处(bug),或者您的问题措辞过于模糊。但是,为了消除VCL包装出现任何问题的风险,请尝试以下方法:

procedure TForm4.FormClick(Sender: TObject);
var
  buf: PChar;
const
  MAX_BUF_SIZE = 65536;
begin
  GetMem(buf, MAX_BUF_SIZE * sizeof(char));
  Memo1.Perform(WM_GETTEXT, MAX_BUF_SIZE, buf);
  RichEdit1.Perform(WM_SETTEXT, 0, buf);
  FreeMem(buf);
end;

作为一个卑鄙的黑客,你能不能先关掉备忘录上的自动换行功能,然后再做作业,然后再重新打开自动换行功能?这是一个令人讨厌的黑客攻击,但如果有一些奇怪的行为,它可能会对你起作用。

这些根本不是换行符,事实上,正如我所写,它们有时被称为“虚拟换行符”。实际上,当我尝试RichEdit1.Lines.Assign(Memo1.Lines)时,虚拟换行符确实会转移到RichEdit。这实际上是有道理的。基本的TStringList为每一条绘制的线都有一个项目,而不仅仅是硬中断。我更不明白文本属性的赋值是如何正确地获得中断的。@请注意,当您读取
Text
属性时,便笺会向自己发送一条
wm_GetText
消息,以读取底层编辑控件拥有的整个字符串。它没有使用基本的
TStrings
类的方法来连接每个项目,并用换行符分隔。2 Andreas Rejbrand:是否要在这些“虚拟换行符”上包含校对链接?目前,我确信所绘制的文本没有任何变化。TMemo和类似的控件目前没有64k的限制,顺便问一下,您能指定Delphi版本和OS版本吗?在windows vista上是Delphi 7