1

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

我以为会

Richedit.text := memo.text;

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

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

谢谢

科林

4

2 回答 2

2

当我做

RichEdit1.Text := Memo1.Text

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

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

无论如何,另一种方法是

RichEdit1.Lines.Assign(Memo1.Lines);

尽管这将保留虚拟换行符,如下所述。

更新

很可能您的代码中还有其他一些奇怪之处(错误),或者您的问题措辞过于含糊。但是,要消除 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;
于 2010-11-24T23:18:18.290 回答
0

作为一个肮脏的黑客,你能不能在你的备忘录上关闭自动换行,然后做作业,然后再打开自动换行?这是一个讨厌的黑客,但如果有一些奇怪的行为,它可能会为你解决问题。

于 2010-11-25T22:00:51.217 回答