Delphi将备忘录复制到Richedit问题

时间:2010-11-24 23:05:59

标签: delphi word-wrap line-breaks tmemo trichedit

我在将备忘录的内容复制到richedit组件时遇到问题。

我以为会是

Richedit.text := memo.text;

然而,如果我使用它,当备忘录文本换行到新的新行(不是CR / LF)而只是换行时,Richedit会开始一个新行。当备忘录开始一个很好的新行时,richedit也会开始一个新行。

任何人都知道如何将备忘录中的文本复制到richeditbox中,而当备忘录文本换行时,Richedit中的行不会破坏

由于

科林

2 个答案:

答案 0 :(得分:2)

当我这样做时

RichEdit1.Text := Memo1.Text

Memo1中的RichEdit的虚拟“换行符”并未神奇地转换为RichEdit1.Lines.Assign(Memo1.Lines); 中的换行符(CRLF),它们不应该是。{1}}。这些“换行符”不存储在备忘录文本缓冲区中。事实上,官方的Embarcadero文件说明了

  

将WordWrap设置为true可使编辑控件在右边距处换行文本,使其适合客户区。包装只是化妆品。该文本不包含任何未明确输入的返回字符。

无论如何,另一种方法是做

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;

虽然这会保留虚拟换行符,如下所示。

更新

您的代码中很可能还有其他一些陌生感(错误),或者您过于模糊地表达了您的问题。但是,要消除VCL包装器出现任何问题的风险,请尝试以下操作:

{{1}}

答案 1 :(得分:0)

作为一个肮脏的黑客,你可以关闭你的备忘录上的自动换行然后做任务,然后重新开启自动换行?这是一个讨厌的黑客,但如果有一些奇怪的行为,它可能会帮助你。