В процессе миграции программного обеспечения с Delphi 7 на Delphi 2010 разработчики часто сталкиваются с различными незначительными препятствиями. Одной из таких проблем является изменение поведения компонента TRichEdit, который ранее корректно отображал RTF-текст, полученный из BLOB-поля в базе данных MSSQL. В Delphi 7 код для отображения RTF-текста в TRichEdit выглядел следующим образом:
rtfStream := sql.CreateBlobStream(sql.FieldByName('rtftext'), BmRead) as TMemoryStream;
RichEdit.PlainText := False;
RichEdit.Lines.LoadFromStream(rtfStream);
Этот код работал исправно, но после обновления до Delphi 2010 RTF-текст начал отображаться как обычный текст с табуляциями между символами. Предполагается, что проблема связана с переходом от ANSI к Unicode, однако исправить её самостоятельно не удалось.
Решение проблемы
Для корректного отображения RTF-текста в TRichEdit после миграции на Delphi 2010, необходимо изменить подход к загрузке данных из базы данных. Вот шаги, которые помогут решить проблему:
Получение RTF-текста из базы данных в виде AnsiString:
if (stream.Size > 0) then begin
SetLength(rtfString, stream.Size);
if (stream.Read(rtfString[1], stream.Size) <= 0) then
raise EStreamError.CreateFmt('End of stream reached with %d bytes left to read.', [stream.Size]);
end;
Не забудьте освободить поток после операции чтения:
stream.Free;
Заключение
Использование AnsiString для загрузки и сохранения RTF-текста в TRichEdit после миграции на Delphi 2010 позволяет избежать проблем, связанных с переходом на Unicode. Эта проблема оказалась достаточно распространённой, и её решение может помочь многим разработчикам, столкнувшимся с аналогичной ситуацией.
В процессе миграции программного обеспечения с Delphi 7 на Delphi 2010 возникла проблема отображения RTF-текста в компоненте `TRichEdit`, связанная с переходом от ANSI к Unicode.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.