我在将备忘录的内容复制到 Richedit 组件时遇到问题。
我以为会
Richedit.text := memo.text;
但是,如果我使用它,当备忘录文本换行到一个新的新行(不是 CR/LF)但只是换行时,Richedit 会开始一个新行。当备忘录开始一个新行时,richedit 也会开始一个新行,这很好。
任何人都知道如何将备忘录中的文本复制到richeditbox中,而不会在备忘录文本换行时在Richedit中中断行
谢谢
科林
我在将备忘录的内容复制到 Richedit 组件时遇到问题。
我以为会
Richedit.text := memo.text;
但是,如果我使用它,当备忘录文本换行到一个新的新行(不是 CR/LF)但只是换行时,Richedit 会开始一个新行。当备忘录开始一个新行时,richedit 也会开始一个新行,这很好。
任何人都知道如何将备忘录中的文本复制到richeditbox中,而不会在备忘录文本换行时在Richedit中中断行
谢谢
科林
当我做
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;
作为一个肮脏的黑客,你能不能在你的备忘录上关闭自动换行,然后做作业,然后再打开自动换行?这是一个讨厌的黑客,但如果有一些奇怪的行为,它可能会为你解决问题。