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;

Как грязный хак, не могли бы вы отключить перенос слов в своей заметке, затем выполнить задание и затем снова включить перенос слов? Это неприятный хак, но он может помочь вам, если будет какое-то странное поведение.

Другие вопросы по тегам