Вложение файлов в качестве ресурсов в исполняемый делфи
Вы можете научиться создавать свое собственное программное обеспечение для любой ситуации с выбором <ем><Стронг>Требования к программному обеспечению развязалисильные>ем>. Если вам нужно знать как вставлять иконки, курсоры, анимированные курсоры, растровые изображения, JPEG-изображения, звуковые файлы, текстовые файлы и любой другой файл в исполняемый Делфи, просто продолжайте читать!
вложение файлов в качестве ресурсов в Делфи исполняемый
вполне возможно, для размещения какой-либо файл в исполняемый файл, используя файлы ресурсов (*.РЭС). Некоторые виды ресурсов признаются API и может быть использован непосредственно. Другие просто приняты как двоичные данные и его до вас, чтобы использовать их. В этой статье мы рассмотрим примеры обоих видов.
чтобы создать файл ресурсов, мы начнем с исходного файла (*.РЦ), например именованные ресурсы.Ру, который представляет собой простой текстовый файл, который содержит записи ресурсов (фамилия, имя, класс и файл):р><р> sample_bmp растрового образца.БМП и
на sample_ico значок образца.ико и
на sample_cur курсор образца.шавка, что
В sample_ani ANICURSOR образец.Ани и
на sample_jpg в формате JPEG sample.jpg в
на sample_wav волны образца.WAV ир><р> sample_txt текст sample.txt
В имена ресурсов (sample_bmp, sample_ico и т. д.) являются произвольными. Такой ресурс может быть признан API-приложения (значок растрового изображения, курсора) или произвольным (в формате JPEG, волна, текст). Имена файлов указать файлы, которые будут включены в .Файл res (и позднее .ЕХЕ).
теперь нам нужно скомпилировать .RC-файл для получения .Файл res. Для этого мы можем использовать компилятора Borland ресурса (brcc32.exe), которые вы можете найти в папке Делфи БИН. Это простая утилита командной строки, которая ожидает, что имя исходного файла в качестве параметра:р><р> C:\DELPHI\P0025>brcc32 ресурсы
на ресурсе Борланд компилятор версии 5.40 для
на Авторское право (C) 1990, 1999 корпорации Inprise. Все права защищены.
C:\DELPHI\P0025>_
и указывает компоновщику добавьте файл ресурсов в исполняемый файл, мы используем ресурс файл директивой ($R или $ресурсов) в наш Паскаль исходным кодом:р><р> {$р ресурсов.рес}
и загрузка ресурсов в приложении-это легко "сталеплавильных" ресурсы, такие как растровые, иконки и курсор с окна API предоставляет функции (LoadBitmap, LoadIcon и LoadCursor соответственно), чтобы сделать ручки для этих элементов, что, например, мы можем присвоить свойство handle соответствующего объекта:р><р> Рис1.Изображение.Растрового изображения.Ручка :=р><р> LoadBitmap(hInstance, 'sample_bmp') р><р> значок.Ручка := LoadIcon(hInstance, 'sample_ico') и
На экране.Курсоры[1] := LoadCursor(hInstance, 'sample_cur')
для больше альтернатив при загрузке изображения ресурсов, увидеть LoadImage API-интерфейс.
другие ресурсы немного сложнее управлять. Начнем с изображений в формате JPEG. Следующая функция использует TResourceStream, чтобы загрузить ресурс, как поток, который будет загружен в объект TJPEGImage:р><р> функция GetResourceAsJpeg(с const resname: string значение): TJPEGImage р><р> варр><р> поток: TResourceStream р><р> начатьр><р> поток := TResourceStream.Создать(hInstance, ResName, 'в формате JPEG') р><р> попробуй
В результате := TJPEGImage.Создать
В результате.LoadFromStream(поток) р><р> наконец,
на поток.Бесплатно р><р> конец р><р> конец
к примеру:р><р> варр><р> в формате JPG: TJPEGImage р><р> начатьр><р> // ...р><р> в формате JPG := GetResourceAsJpeg('sample_jpg') р><р> Рис2.Изображение.Растрового изображения.Назначение(в формате JPG) и
в формате JPG.Бесплатно р><р> // ...р><р> конец
для WAV-файлов, нам нужен указатель на ресурс загружается в память, и текстовый файл нужен для загрузки ресурса в строку. Мы можем сделать это с помощью TResourceStream, но давайте рассмотрим пример с использованием API:р><р> функция GetResourceAsPointer(ResName: pchar ресурс: pchar р><р> вне Размер: длинное): указатель р><р> варр><р> Инфоблока: HRSRC р><р> GlobalMemoryBlock: HGLOBAL р><р> начатьр><р> Инфоблока := метода findresource(hInstance, resname, ресурс), что
Если Инфоблока = 0 тогдар><р> поднимите исключение.Создать(SysErrorMessage(код последней ошибки)) р><р> Размер := SizeofResource(hInstance, Инфоблока), а
Если Размер = 0 тогдар><р> поднимите исключение.Создать(SysErrorMessage(код последней ошибки)) р><р> GlobalMemoryBlock := LoadResource(hInstance, Инфоблока) и
Если GlobalMemoryBlock = 0 тогдар><р> поднимите исключение.Создать(SysErrorMessage(код последней ошибки)) р><р> результат := LockResource(GlobalMemoryBlock) и
если результат = нулю, тор><р> поднимите исключение.Создать(SysErrorMessage(код последней ошибки)) р><р> конец р><р> функция GetResourceAsString(ResName: pchar ресурс: pchar): строке р><р> варр><р> ResData: PChar р><р> ResSize: длинное р><р> начатьр><р> ResData := GetResourceAsPointer(resname, ресурс, ResSize) р><р> метод setstring(итоге ResData, ResSize) р><р> конец
как пример вызовов:р><р> варр><р> sample_wav: указатель р><р> процедура TForm1.FormCreate(Отправитель: TObject) р><р> варр><р> Размер: длинное р><р> начатьр><р> ...р><р> sample_wav := GetResourceAsPointer('sample_wav', 'волна', размер) и
с наименованием "memo1".Линии.Текст := GetResourceAsString('sample_txt', 'текст') р><р> конец
и как только мы получим волну ресурс загружается в память, мы можем играть в нее столько раз, сколько мы хотим с помощью API не sndplaysound объявлен в MMSystem блок:р><р> процедура TForm1.Button1Click(Отправитель: TObject) р><р> начатьр><р> не sndplaysound(sample_wav, SND_MEMORY или SND_NODEFAULT или SND_ASYNC) р><р> конец
есть несколько ресурсов (например, шрифтов и анимационных курсоров), которые не могут быть использованы из памяти. Мы обязательно должны сохранить эти ресурсы во временный файл на диске и загружать их оттуда. Следующая функция позволяет экономить ресурс файл:р><р> процедура SaveResourceAsFile(как const ResName: string значение ресурс: pchar р><р> константным именем: строка) р><р> начатьр><р> с TResourceStream.Создать(hInstance, ResName, ресурс) сделать
на попробовать.
на SaveToFile(именем) р><р> наконец,
бесплатно р><р> конец р><р> конец
есть следующая функция делает использование предыдущей, чтобы сохранить ресурс во временный файл:р><р> функция SaveResourceAsTempFile(с const ResName: строке р><р> ресурс: pchar): строке р><р> начатьр><р> результат := CreateTempFile р><р> SaveResourceAsFile(ResName, ресурс, результат) р><р> конец
при обсуждении функции CreateTempFile выходит за рамки данной статьи и ее реализация может быть прикреплен к новости.р><р> следующая функция использует SaveResourceAsTempFile, чтобы сохранить анимированный курсор ресурс во временный файл, затем загружает курсор из файла с LoadImage и, наконец, временный файл удаляется. Функция возвращает дескриптор, возвращенный LoadImage:р><р> функция GetResourceAsAniCursor(как const ResName: string значение): HCursor р><р> варр><р> CursorFile: строке р><р> начатьр><р> CursorFile := SaveResourceAsTempFile(ResName, 'ANICURSOR') р><р> результат := LoadImage(0, PChar(CursorFile), IMAGE_CURSOR, 0,р><р> 0, LR_DEFAULTSIZE или LR_LOADFROMFILE) р><р> это(CursorFile) и
если результат = 0 тогдар><р> поднимите исключение.Создать(SysErrorMessage(код последней ошибки)) р><р> конец
как пример назвать так:
На экране.Курсоры[1] := GetResourceAsAniCursor('sample_ani') и
на форму form1.Курсор := 1
А, вот оно. Я надеюсь, что вы найдете ее полезной. Вы можете найти более подробную информацию о ресурсе файлов в библиотеке MSDN:р><р> http://msdn.microsoft.com/library/en-us/winui/hh/winui/rc_6cs3.asp в
Вы можете найти полный исходный код этой статьи в архиве, который сопровождает Паскаль Бюллетень #25.
Вложение файлов в качестве ресурсов в исполняемый делфи
Вложение файлов в качестве ресурсов в исполняемый делфи : Несколько тысяч советов, которые сделают вашу жизнь проще.
Вы можете научиться создавать свое собственное программное обеспечение для любой ситуации с выбором <ем><Стронг>Требования к программному обеспечению развязалисильные>ем>. Если вам нужно знать как вставлять иконки, курсоры, анимированные курсоры, растровые изображения, JPEG-изображения, звуковые файлы, текстовые файлы и любой другой файл в исполняемый Делфи, просто продолжайте читать!
вложение файлов в качестве ресурсов в Делфи исполняемый
вполне возможно, для размещения какой-либо файл в исполняемый файл, используя файлы ресурсов (*.РЭС). Некоторые виды ресурсов признаются API и может быть использован непосредственно. Другие просто приняты как двоичные данные и его до вас, чтобы использовать их. В этой статье мы рассмотрим примеры обоих видов.
чтобы создать файл ресурсов, мы начнем с исходного файла (*.РЦ), например именованные ресурсы.Ру, который представляет собой простой текстовый файл, который содержит записи ресурсов (фамилия, имя, класс и файл):р><р> sample_bmp растрового образца.БМП и
на sample_ico значок образца.ико и
на sample_cur курсор образца.шавка, что
В sample_ani ANICURSOR образец.Ани и
на sample_jpg в формате JPEG sample.jpg в
на sample_wav волны образца.WAV ир><р> sample_txt текст sample.txt
В имена ресурсов (sample_bmp, sample_ico и т. д.) являются произвольными. Такой ресурс может быть признан API-приложения (значок растрового изображения, курсора) или произвольным (в формате JPEG, волна, текст). Имена файлов указать файлы, которые будут включены в .Файл res (и позднее .ЕХЕ).
теперь нам нужно скомпилировать .RC-файл для получения .Файл res. Для этого мы можем использовать компилятора Borland ресурса (brcc32.exe), которые вы можете найти в папке Делфи БИН. Это простая утилита командной строки, которая ожидает, что имя исходного файла в качестве параметра:р><р> C:\DELPHI\P0025>brcc32 ресурсы
на ресурсе Борланд компилятор версии 5.40 для
на Авторское право (C) 1990, 1999 корпорации Inprise. Все права защищены.
C:\DELPHI\P0025>_
и указывает компоновщику добавьте файл ресурсов в исполняемый файл, мы используем ресурс файл директивой ($R или $ресурсов) в наш Паскаль исходным кодом:р><р> {$р ресурсов.рес}
и загрузка ресурсов в приложении-это легко "сталеплавильных" ресурсы, такие как растровые, иконки и курсор с окна API предоставляет функции (LoadBitmap, LoadIcon и LoadCursor соответственно), чтобы сделать ручки для этих элементов, что, например, мы можем присвоить свойство handle соответствующего объекта:р><р> Рис1.Изображение.Растрового изображения.Ручка :=р><р> LoadBitmap(hInstance, 'sample_bmp') р><р> значок.Ручка := LoadIcon(hInstance, 'sample_ico') и
На экране.Курсоры[1] := LoadCursor(hInstance, 'sample_cur')
для больше альтернатив при загрузке изображения ресурсов, увидеть LoadImage API-интерфейс.
другие ресурсы немного сложнее управлять. Начнем с изображений в формате JPEG. Следующая функция использует TResourceStream, чтобы загрузить ресурс, как поток, который будет загружен в объект TJPEGImage:р><р> функция GetResourceAsJpeg(с const resname: string значение): TJPEGImage р><р> варр><р> поток: TResourceStream р><р> начатьр><р> поток := TResourceStream.Создать(hInstance, ResName, 'в формате JPEG') р><р> попробуй
В результате := TJPEGImage.Создать
В результате.LoadFromStream(поток) р><р> наконец,
на поток.Бесплатно р><р> конец р><р> конец
к примеру:р><р> варр><р> в формате JPG: TJPEGImage р><р> начатьр><р> // ...р><р> в формате JPG := GetResourceAsJpeg('sample_jpg') р><р> Рис2.Изображение.Растрового изображения.Назначение(в формате JPG) и
в формате JPG.Бесплатно р><р> // ...р><р> конец
для WAV-файлов, нам нужен указатель на ресурс загружается в память, и текстовый файл нужен для загрузки ресурса в строку. Мы можем сделать это с помощью TResourceStream, но давайте рассмотрим пример с использованием API:р><р> функция GetResourceAsPointer(ResName: pchar ресурс: pchar р><р> вне Размер: длинное): указатель р><р> варр><р> Инфоблока: HRSRC р><р> GlobalMemoryBlock: HGLOBAL р><р> начатьр><р> Инфоблока := метода findresource(hInstance, resname, ресурс), что
Если Инфоблока = 0 тогдар><р> поднимите исключение.Создать(SysErrorMessage(код последней ошибки)) р><р> Размер := SizeofResource(hInstance, Инфоблока), а
Если Размер = 0 тогдар><р> поднимите исключение.Создать(SysErrorMessage(код последней ошибки)) р><р> GlobalMemoryBlock := LoadResource(hInstance, Инфоблока) и
Если GlobalMemoryBlock = 0 тогдар><р> поднимите исключение.Создать(SysErrorMessage(код последней ошибки)) р><р> результат := LockResource(GlobalMemoryBlock) и
если результат = нулю, тор><р> поднимите исключение.Создать(SysErrorMessage(код последней ошибки)) р><р> конец р><р> функция GetResourceAsString(ResName: pchar ресурс: pchar): строке р><р> варр><р> ResData: PChar р><р> ResSize: длинное р><р> начатьр><р> ResData := GetResourceAsPointer(resname, ресурс, ResSize) р><р> метод setstring(итоге ResData, ResSize) р><р> конец
как пример вызовов:р><р> варр><р> sample_wav: указатель р><р> процедура TForm1.FormCreate(Отправитель: TObject) р><р> варр><р> Размер: длинное р><р> начатьр><р> ...р><р> sample_wav := GetResourceAsPointer('sample_wav', 'волна', размер) и
с наименованием "memo1".Линии.Текст := GetResourceAsString('sample_txt', 'текст') р><р> конец
и как только мы получим волну ресурс загружается в память, мы можем играть в нее столько раз, сколько мы хотим с помощью API не sndplaysound объявлен в MMSystem блок:р><р> процедура TForm1.Button1Click(Отправитель: TObject) р><р> начатьр><р> не sndplaysound(sample_wav, SND_MEMORY или SND_NODEFAULT или SND_ASYNC) р><р> конец
есть несколько ресурсов (например, шрифтов и анимационных курсоров), которые не могут быть использованы из памяти. Мы обязательно должны сохранить эти ресурсы во временный файл на диске и загружать их оттуда. Следующая функция позволяет экономить ресурс файл:р><р> процедура SaveResourceAsFile(как const ResName: string значение ресурс: pchar р><р> константным именем: строка) р><р> начатьр><р> с TResourceStream.Создать(hInstance, ResName, ресурс) сделать
на попробовать.
на SaveToFile(именем) р><р> наконец,
бесплатно р><р> конец р><р> конец
есть следующая функция делает использование предыдущей, чтобы сохранить ресурс во временный файл:р><р> функция SaveResourceAsTempFile(с const ResName: строке р><р> ресурс: pchar): строке р><р> начатьр><р> результат := CreateTempFile р><р> SaveResourceAsFile(ResName, ресурс, результат) р><р> конец
при обсуждении функции CreateTempFile выходит за рамки данной статьи и ее реализация может быть прикреплен к новости.р><р> следующая функция использует SaveResourceAsTempFile, чтобы сохранить анимированный курсор ресурс во временный файл, затем загружает курсор из файла с LoadImage и, наконец, временный файл удаляется. Функция возвращает дескриптор, возвращенный LoadImage:р><р> функция GetResourceAsAniCursor(как const ResName: string значение): HCursor р><р> варр><р> CursorFile: строке р><р> начатьр><р> CursorFile := SaveResourceAsTempFile(ResName, 'ANICURSOR') р><р> результат := LoadImage(0, PChar(CursorFile), IMAGE_CURSOR, 0,р><р> 0, LR_DEFAULTSIZE или LR_LOADFROMFILE) р><р> это(CursorFile) и
если результат = 0 тогдар><р> поднимите исключение.Создать(SysErrorMessage(код последней ошибки)) р><р> конец
как пример назвать так:
На экране.Курсоры[1] := GetResourceAsAniCursor('sample_ani') и
на форму form1.Курсор := 1
А, вот оно. Я надеюсь, что вы найдете ее полезной. Вы можете найти более подробную информацию о ресурсе файлов в библиотеке MSDN:р><р> http://msdn.microsoft.com/library/en-us/winui/hh/winui/rc_6cs3.asp в
Вы можете найти полный исходный код этой статьи в архиве, который сопровождает Паскаль Бюллетень #25.
Вложение файлов в качестве ресурсов в исполняемый делфи
By russiatips
Вложение файлов в качестве ресурсов в исполняемый делфи : Несколько тысяч советов, которые сделают вашу жизнь проще.