Delphi Copy Memo для Richedit проблема
У меня проблема с копированием содержимого заметки в компонент richedit.
Я думал, что это будет
Richedit.text := memo.text;
Однако, если я использую это, Richedit начинает новую строку, когда текст заметки переносится на новую новую строку (не CR/LF), а просто перенос. Richedit также начинает новую строку, когда памятка начинает новую строку, что хорошо.
У любого есть идея, как скопировать текст из заметки в richeditbox без разрывов строк в Richedit при переносе текста заметки
Спасибо
Colin
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;
Как грязный хак, не могли бы вы отключить перенос слов в своей заметке, затем выполнить задание и затем снова включить перенос слов? Это неприятный хак, но он может помочь вам, если будет какое-то странное поведение.