Отображение текстового поля BLOB в TRichedit

Здравствуйте! Почему, при просмотре содержимого поля "BLOB" в “Delphi 7 Lite” символы отображаются как положено, а в “Delphi 10.4” выходят посторонние символы?
Ссылка для скачивания проекта - https://delphibooks.ucoz.ru/proekt.rar
Проект сначала создал в “Delphi 7 Lite.” После этого перекомпилировал его в “Delphi 10.4”, появились посторонние символы вместо русских.
Символы отображаются вот так:
{\rtf1\ansi\ansicpg1251\deff0\deflang1049{\fonttbl{\f0\fnil\fcharset0 Arial Narrow;}{\f1\fnil\fcharset204{*\fname Times New Roman;}Times New Roman CYR;}}
{\colortbl ;\red0\green0\blue255;\red0\green0\blue0;}
\viewkind4\uc1\pard\qc\cf1\b\f0\fs36\u1050?\u1088?\u1072?\u1090?\u1082?\u1086?\u1077? \u1086?\u1087?\u1080?\u1089?\u1072?\u1085?\u1080?\u1077? MySQL
\par \pard\cf2\b0\f1\fs28’dd’f2’ee \ul\i’f0’e5’eb’ff’f6’e8’ee’ed’ed’e0’ff 'f1’e8’f1’f2’e5’ec’e0 'f3’ef’f0’e0’e2’eb’e5’ed’e8’ff 'e1’e0’e7’e0’ec’e8 'e4’e0’ed’ed’fb’f5\ulnone .\i0 'd2’e0’ea’ee’e2’ee 'ee’f4’e8’f6’e8’e0’eb’fc’ed’ee’e5 'ee’ef’f0’e5’e4’e5’eb’e5’ed’e8’e5.
\par \b MySQL\b0 'f1’ee’e7’e4’e0’e2’e0’eb’e0’f1’fc 'f1’e8’eb’e0’ec’e8 'f8’e2’e5’e4’f1’ea’e8’f5 'f0’e0’e7’f0’e0’e1’ee’f2’f7’e8’ea’ee’e2 'e8’e7 'ee’e4’ed’ee’e8’ec’e5’ed’ed’ee’e9 'ea’ee’ec’ef’e0’ed’e8’e8 'e2 1994 'e3’ee’e4’f3. 'd2’ee’e3’e4’e0 'e8 'f1’ee’f1’f2’ee’ff’eb’f1’ff 'e5’e5 'f0’e5’eb’e8’e7 'ef’ee’e4 'f1’e2’ee’e1’ee’e4’ed’ee’e9 'eb’e8’f6’e5’ed’e7’e8’e5’e9. 'cf’ee’e7’e6’e5 'ea’ee’ec’ef’e0’ed’e8’fe 'ef’ee’e3’eb’ee’f2’e8’eb’e0 \b Oracle. MySQL\b0 'f0’e0’f1’ef’f0’ee’f1’f2’f0’e0’ed’ff’e5’f2’f1’ff 'e1’e5’f1’ef’eb’e0’f2’ed’ee 'e8 'e2’f5’ee’e4’e8’f2 'e2 'f1’f2’e0’ed’e4’e0’f0’f2’ed’fb’e9 'ed’e0’e1’ee’f0 'f3’f2’e8’eb’e8’f2 \b LAMP\b0 'e4’eb’ff 'f0’e0’e7’f0’e0’e1’ee’f2’ea’e8 'f1’e0’e9’f2’ee’e2 'ed’e0 'e1’e0’e7’e5 \b Linux.\b0\fs24
\par \pard
\par }
В Delphi 10.4 снизу установлен "ANSI", а в базе данных “Firebird” - WIN1251.

Так это RTF же … его не так просто кодировать. Надо в соответствии со спецификацией.

Как настроить спецификацию RTF текста в Delphi 10.4? В Delphi 7 спецификация настраивается автоматически. Почему Delphi 10.4. так спотыкается? Delphi 10.4. должен быть гораздо лучше, чем Delphi 7.

Так если просто

то видимо с кодировкой что-то не то.

В новых Дельфи юникод. Ну и желательно везде использовать юникод, чтоб не было таких проблем )

Как этот текст попадает из БД в TRichEdit?
Надо определить на каком этапе появляется проблема (сразу в результате запроса к БД или где-то дальше), так что смотрите значения переменных отладчиком.

Где именно снизу?) Как оно называется?


И что это за шедевры? :clkolcrazy:

procedure TF_Adres.PM_BoldClick(Sender: TObject);
begin
  //нажатие горячих клавиш "Ctrl+B"
   if PM_Bold.ShortCut=16450 then
   begin
        //увеличиваем счётчик
         Bold_i:=Bold_i+1;
            //не чётное нажатие - жирный щрифт. чётное нажатие - не жирный щрифт.
             case Bold_i of
               1: begin
                   //продавливаем кнопку
                    BBold.Down:=true;
                    RichEdit1.SelAttributes.Style:=RichEdit1.SelAttributes.Style+[fsBold];
                  end;
               2: begin
                   //отпускаем кнопку
                    BBold.Down:=false;
                    RichEdit1.SelAttributes.Style:=RichEdit1.SelAttributes.Style-[fsBold];
                  end;
               3: begin
                   //продавливаем кнопку
                    BBold.Down:=true;
                    RichEdit1.SelAttributes.Style:=RichEdit1.SelAttributes.Style+[fsBold];
                  end;
               4: begin
                   //отпускаем кнопку
                    BBold.Down:=false;
                    RichEdit1.SelAttributes.Style:=RichEdit1.SelAttributes.Style-[fsBold];
                  end;
               ...
             224: begin
                   //отпускаем кнопку
                    BBold.Down:=false;
                    RichEdit1.SelAttributes.Style:=RichEdit1.SelAttributes.Style-[fsBold];
                  end;
             255: begin
                   //продавливаем кнопку
                    BBold.Down:=true;
                    RichEdit1.SelAttributes.Style:=RichEdit1.SelAttributes.Style+[fsBold];
                  end;
             end;
   end;
end;

хз что тут за значения вообще, но если нужна просто четность, то оно ж легко определяется например по
Bold_i mod 2

Кто вам это сказал?? Delphi остановилась в развитии лет 20 назад. С тех пор ничего практически не изменилось. Среда так и осталась деревянной. Сам язык тоже мало что нового приобрел.

Все там то. Просто РТФ формат представляет символы в своем виде с учетом шрифта, он похож на pdf где существует своя карта символов особенно для нестандартных шрифтов или языков.
В студии например у RichText компонентов есть два поля. Одно возвращает текст в формате ртф а другое чисто текст. Может и тут такое же есть?

ScreenShot, где установлен ANSI.

Шедевры я конечно переделаю, по вашему совету.
Delphi 10.4. должен быть действительно лучше, чем Delphi 7, так как эта среда позволяет создавать программы не только для Windows, но и для Android или Linux, чего не было в Delphi 7.
Как всё таки просмотреть текст, как он был изначально добавлен?

Это наверно просто про кодировку текста в редакторе кода.

Так что на вывод данных из БД оно никак не повлияет.

:arrow_down:

И я так и не понял в каком виде оно сейчас выводится. Покажите скриншот ричедита с этим полем )

Проблема появляется сразу, после добавления данных. Компиляция или выполнение программы проходит без ошибок.
Вот как добавляю текст, в таблицу БД Firebird - просмотр текста отображается так, как если в программе IBExpert перейти на вкладку Data и навести курсор мыши к полю Blob.
И ешё если в программе IBExpert делаю двойной щелчок кнопкой мыши, текст отображается как положено (в отдельном окне).
Вот как сделать так, чтобы текст отображался адекватно из программы созданной в Delphi 10.4.

Текст выводится так же

А как должен? В Дельфи 7 оно было как обычный текст с форматированием и т.д. без всех этих {\rtf1\...?

Так это про доставание текста из него, а не про то, как он выводит.
Тут тоже есть для сохранения/загрузки файлов и т.п. Vcl.ComCtrls.TCustomRichEdit.PlainText - RAD Studio API Documentation

Да в Delphi 7 у меня никогда не было проблем с просмотром форматированного текста. Без всяких {\rtf1…? и так далее.
Ссылка для скачивания программы созданной в Delphi 7 - https://booksdelphi.ucoz.ru/Delphi7_Lite.rar
Что там есть такого, чего нет в новых версиях Delphi?

Текст из первого сообщения выглядит как корректный ртф.
Если сохранить его текстовым редактором в 1251 кодировке, то офисы нормально открывают

Основное отличие между старыми и новыми Дельфи, которое может сломать совместимость — изменения связанные с юникодом.

Наверно в ричедит этот текст почему-то попадает в UTF-16, он пугается и не может обработать.

Потому и говорю, что

например если оно выводится так

RichEdit1.Text:=FBlob.IBDS_BlobTEXT_BLOB.Value;

то для начала можно посмотреть отладчиком что лежит в FBlob.IBDS_BlobTEXT_BLOB.Value, и какого типа строка (AnsiString, UnicodeString, …).

Еще посмотреть не выдает ли компилятор предупреждение на этом при перекомпиляции, он бывает предупреждает когда что-то опасное делается со строками, например, присваивание не того типа.

Тип поля (строки) FBlob.IBDS_BlobTEXT_BLOB.Value - AnsiString.

Значение переменных отладчиком ни чего существенного не дало. Проблема появляется сразу, после добавления данных. Может быть есть какая нибудь функция - например: это может выглядеть так - RichEdit1.Text:=Функция(FBlob.IBDS_BlobTEXT_BLOB.Value);
Как отобразить в RichEdit1 адекватный текст с кодировкой Win1251? Без разницы какая кодировка. Главное чтобы текст отображался как положено.