Ресурсы

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Аватара пользователя
grigoreo
постоялец
Сообщения: 195
Зарегистрирован: 10.03.2009 14:43:43
Откуда: С нашей Раши

Ресурсы

Сообщение grigoreo »

подскажите как удобнее и проще запихать ресурсы в бинарник(изображения,иконки,возможно звуки),чтобы потом подгружать к динамически созданым компонентам ?
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

grigoreo
Проще всего запихать примерно таким образом:

Код: Выделить всё

{$R файл_ресурса.rc}

Файл ресурса откомпилируется автоматически.
Аватара пользователя
grigoreo
постоялец
Сообщения: 195
Зарегистрирован: 10.03.2009 14:43:43
Откуда: С нашей Раши

Сообщение grigoreo »

Vadim писал(а):grigoreo
Проще всего запихать примерно таким образом:

Код: Выделить всё

{$R файл_ресурса.rc}

Файл ресурса откомпилируется автоматически.


Хорошо Vadim а можете еще дать подсказочку каким кодом потом подгрузить в TBitmap к примеру мой ресурс подключеный таким образом,

а какой вариант еще есть?(ведь если не ошибаюсь данный способ будет работать только в Windows)
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

grigoreo

Код: Выделить всё

Bitmap.Handle := LoadBitmap(hInstance, PChar(Идентификатор_картинки_в_ресурсе));

Как это будет выглядеть в Linux - не знаю, т.к. ресурсами в Linux никогда не интересовался.
Павел Ишенин
постоялец
Сообщения: 475
Зарегистрирован: 24.03.2007 09:16:52

Сообщение Павел Ишенин »

Код: Выделить всё

Bitmap.LoadFromResourceName('...')
Аватара пользователя
grigoreo
постоялец
Сообщения: 195
Зарегистрирован: 10.03.2009 14:43:43
Откуда: С нашей Раши

Сообщение grigoreo »

Vadim писал(а):grigoreo
Проще всего запихать примерно таким образом:

Код: Выделить всё

{$R файл_ресурса.rc}

Файл ресурса откомпилируется автоматически.


А можно еще уточнить в какую часть кода вставить эту дериктиву
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

Без разницы. А вообще обычно вставляют после implementation :wink:
Аватара пользователя
grigoreo
постоялец
Сообщения: 195
Зарегистрирован: 10.03.2009 14:43:43
Откуда: С нашей Раши

Сообщение grigoreo »

Хорошо с Windows все понятно а под линуксом как хранить ресурсы? или остается по возможности распихивать их в компоненты изображения в тот же TImage , или отдельными файлами деражть(т.к rc файлы я так понимаю в линуксе не функционируют и не компилятся это чисто Windows момент)

Фанаты Линукса подскажите как ресурсы в исполняемом бинарнике хранить?
Аватара пользователя
NXP
постоялец
Сообщения: 187
Зарегистрирован: 02.01.2008 15:11:56
Откуда: Воронеж
Контактная информация:

Сообщение NXP »

grigoreo писал(а):а под линуксом как хранить ресурсы?

Ресурс - это фич WinAPI, и я бы не сказал, что хороший, особенно если ресурсов много и они жирные.
Включай картинки, иконки и тд. в компоненты, либо храни во внешних файлах.
Это разумно и полезно для ОЗУ :D
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

Да все там нормально с ОЗУ. Секция ресурсов отображается в адресное пространство ровно так же, как и секция кода, и ни байта ОЗУ не занимает, если не считать всяких системных кэшей. Одинаково в винде и в линуксе.

grigoreo
В Линуксе действительно не принято упаковывать ресурсы в исполняемый файл, их хранят отдельно. Поддержка ресурсов в FPC/Linux - это исключение из правил, впрочем, достаточно приятное.
Но проблема состоит только в том, чтобы скомпилировать .rc в .res. Можно заменить {$r file.rc} на {$r file.res} и собирать .res вручную, с помощью виндового компилятора под wine, например. Благо ресурсы - вещь более-менее статическая и их не нужно пересобирать каждый раз вместе с кодом.
Павел Ишенин
постоялец
Сообщения: 475
Зарегистрирован: 24.03.2007 09:16:52

Сообщение Павел Ишенин »

Насколько мне известно windres есть и под linux и под osx.
Аватара пользователя
Attid
долгожитель
Сообщения: 2589
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

но только для 32 разрядных систем, для 64 я пока не видел =(
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

Windres делает 2 преобразования: .rc -> .res и .res -> .o
Формат .res одинаковый для 32 и 64 бит, а второе преобразование делается с помощью fpcres из комплекта поставки, который с 64 бит вроде как дружит. Так что можно обойтись 32-битным windres.
Ответить