(*
Load RTF file from resource:
You can store any kind of file as a RCDATA resource.
The following example shows this with an RTF file.
Create a text file called textres.rc and put the
following line in it:
TESTDOC RCDATA "textdoc.rtf"
Next, compile that using the Borland Resource Compiler,
which is provided with Delphi.
brcc32.exe textres.rc
Your next step is to include the compiled resource (.RES) file into
your executable, which can be done with the {$R} compiler directive.
*)(*
Man kann eine beliebige Datei als RCDATA Ressource in eine
Exe-Datei einbinden.
Das folgende Beispiel zeigt, wie man einen RTF-Text aus
einer Ressource ladt und in einem TRichEdit anzeigt.
Erstelle zuerst eine Datei "textres.rc" mit folgendem Inhalt:
TESTDOC RCDATA "textdoc.rtf"
Kompiliere diese mit brcc32.exe:
brcc32.exe textres.rc
Es wurde nun eine textres.res Datei erzeugt.
*)implementation{$R *.dfm}{$R textres.res}// <---- your resource file! procedure TForm1.Button1Click(Sender: TObject);
var
rs: TResourceStream;
begin
rs := TResourceStream.Create(hinstance, 'TESTDOC', RT_RCDATA);
try
Richedit1.PlainText := False;
TempStream.Position := 0;
Richedit1.Lines.LoadFromStream(rs);
finally
rs.Free;
end;
end;
Перевод контента на русский язык:
Код, который вы предоставили, написан на Delphi и предназначен для загрузки файла формата RTF (Rich Text Format) из ресурса внутри исполняемого файла. Вот подробное описание того, что код делает:
Он начинает с определения двух директив компилятора ({$R *.dfm} и {$R textres.res}), которые указывают, что программа будет использовать ресурсы из указанных файлов.
Главная процедура, Button1Click, вызывается при клике кнопки с надписью "Button1". Эта процедура загружает файл RTF с именем "TESTDOC" (хранящийся в ресурсе внутри исполняемого файла) и отображает его в RichEdit-контроле, называемом Richedit1.
Вот как это делается:
Создается объект TResourceStream, передавая текущий инстансный хэндл (hinstance) и имя ресурса для загрузки ('TESTDOC') вместе с типом ресурса (RT_RCDATA).
Используется блок try-finally, чтобы обеспечить закрытие ресурсного потока даже в случае возникновения исключения.
Внутри этого блока устанавливается Richedit1.Plaintext в False, что указывает RichEdit интерпретировать загруженный текст как RTF, а не как простой текст.
Затем позиция TempStream (который не объявлен в предоставленном коде) перемещается до 0 и загружаются содержимое этого потока в Richedit1. Это эффективно отображает файл RTF внутри RichEdit-контроля.
Однако, есть несколько проблем с этим кодом:
Переменная TempStream не объявлена. Она должна быть заменена на имя потока, который нужно загрузить.
Нет обработки ошибок для случаев, когда ресурс может не существовать или не мог быть загружен правильно.
Вот улучшенная версия кода, которая включает в себя проверку ошибок и объявляет необходимые переменные:
Переменная TempStream объявлена как TStringStream.
Ресурсный поток копируется в временный строковый поток с помощью метода CopyTo.
Обработка ошибок добавлена для ловли исключений, которые могут возникнуть при загрузке или отображении файла RTF.
Загрузить RTF-файл из ресурса своего EXE, используя TResourceStream и загрузив текст в компонент TRichEdit.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.