Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Теория и практика работы с ресурсами.


Страницы:   1 2

Андрей Сенченко ©   (2002-02-11 10:27:00) 

Теория мне известна:
1.Создать некий RC файл.
2.Обработать его программой brcc32.exe
3.Подключить готовый ресурс через {+R}
4.Наслаждаться использованием.

С практикой сложнее:
1.В свой ресурс нужно вставить:
(1.1.) несколько иконок ( надоело грузить просто с диска - хочу чтоб красиво было )
(1.2.) ДОС-овский RAR. Ну не хочу я хранить его отдельно на диске, а использую активно.
Вопрос* :а собственно каков формат того самого RC файла ? Хотя бы в моем конкретном случае. И где найти его описание на будущее ? Запуск brcc32.exe /? не совсем помог - слишком быстро гасится окно - читать не успеваю :)

2.и 3.Вопросов вроде как нет

4.Наслаждаться не совсем получаеися - тупым поиском по F1 не удалось найти тот самый набор функций, который отвечает за обработку ресурсов ( может неправильно слово по-английски пишу ).
Вопрос* :Подскажите пожалуйста хотябы процедуру типа LoadFromМойРесурс - дальше сам по ссылкам накопаю.

Спасибо


Иван Шихалев   (2002-02-20 16:48:00) [1]

Просто вопросы нужно в отдельной ветке задавать.


Esa   (2002-02-20 09:40:00) [2]

Извините, но я что-то не понял, почему мой вопрос был удален модератором?
Я не по теме спросил или что-то другое?


Anatoly Podgoretsky   (2002-02-19 23:19:00) [3]

Андрей Сенченко © (11.02.02 11:35)
Это пред-определенный тип, наряду с другими, приведенными в ответах, но МС не ограничивает тебя в использование типов, сожешь создавать свои пользовательские с любым именем, например

FARRES FAR PATH\FAR.EXE

То есть в упрощенном синтаксисе

ИМЯ ТИП ПУТЬ


Esa   (2002-02-19 11:34:00) [4]

Удалено модератором


Иван Шихалев   (2002-02-11 21:00:00) [5]

Во-первых, не "RT_ICON", а RT_ICON, а во-вторых, не RT_ICON, а RT_ICON_GROUP, а потом его разбираешь и загружаешь уже RT_ICON. Дело в том, что иконки и курсоры хранятся не единым куском, а достаточно хитрой структурой. В качестве примера работы с ней я уже давно выложил в кладовку "Icon Extractor" http://delphi.mastak.ru/cgi-bin/download.pl?look=1&id=1004556220&n=2. Он извлекает только иконки, работа с курсорами выглядит полностью аналогично, только вместо RT_ICONи RT_ICON_GROUP, RT_CURSORи RT_CURSOR_GROUPсоответственно.


NailS   (2002-02-11 19:30:00) [6]

Исходя из исходников TResourceStream
if HResInfo = 0 then Error;
procedure Error;
begin
raise EResNotFound.CreateFmt(SResNotFound, [Name]);
end;

SResNotFound = "Resource %s not found";

А SysErrorMessage(GetLastInfo) возвращает "Указанный тип ресурса в файле образа отсутствует"
Подставлял другие значения ResType, рузультат тот же.
Причем MicroAngelo эти иконки в длл отоброжает правильно.
Может я длл неправильно собрал или имя ресурса ввожу неверно?


Digitman   (2002-02-11 18:34:00) [7]

А ты вообще в курсе, что, когда какой-либо WinAPI-вызов дает отказ, можно (и следует !) получить детальную инф-цию об отказе, как сие предписывает MS ?

"возвращает значение 0, т.е. ресурс не найден " - на основании чего ты сделал такой вывод ? Ты получил сообщение об исключении именно с таким "приговором" или это только предположение твое ?


NailS   (2002-02-11 18:04:00) [8]

> Digitman

Сорри, в предыдущем сообщении написал сумбурно.
FindResource вызывается в функции Initialize класса TResourceStream,
HResInfo := FindResource(Instance, Name, ResType);
if HResInfo = 0 then Error;

а Initialize , в свою очередь, вызывается уже в конструкторе класса TResourceStream.
И вот, собственно говоря, FindResource 0 и возвращает.

А как мне иконки достать?


Digitman   (2002-02-11 17:51:00) [9]

>NailS
1. TResourceStream предназначен, в 1-ю очередь, для работы с ресурсами типа RT_RCDATA, хранящих потоковый образ сохраненных объектов класса TComponent.

2.>>"В результате функция FindResource возвращает значение 0, т.е. ресурс не найден"
В каком результате ? Где в твоем коде хоть какое-то упоминание о вызове FindResource() ? Как ты вызываешь эту ф-цию ? Зачем она вообще тебе потребоваоась, если всю рутинную работу по поиску и загрузке ресурса ты уже переложил на тело конструктора объекта TResourceStream ? Тем более, что, насколько понятно из твоего объяснения, вызов конструктора не вызвал исключение, а, значит, указанный ресурс был локализован и загружен в память успешно !


Андрей Сенченко   (2002-02-11 17:28:00) [10]

>> Pete © (11.02.02 16:50)
>> Зачем досовский РАР??? есть в раре PAS с прототипами

Надо значит надо :) Есть определенные требования начальства, от которых лучше не отходить - пусть он хоть Лексикон захочет в свое приложение встроить


NailS   (2002-02-11 17:18:00) [11]

Что-то не получается найти ресурс по идентификатору (и имени тоже).
Поправте, где я не правильно делаю.
Собрал Res файл, который содержит 2 иконки.
(RC-файл выглядит как
123 ICON "0.ico"
222 ICON "1.ico")

Далее включил этот файл в длл, как
library Test;
{$R Oper.RES}
begin
end.


В приложении пытаюсь достать иконки таким способом


ResourceHandle := LoadLibrary("test.dll");
aResStream := TResourceStream.Create(ResourceHandle,"#123","RT_ICON");


В результате функция FindResource возвращает значение 0, т.е. ресурс не найден ;(


Pete   (2002-02-11 16:50:00) [12]

Зачем досовский РАР??? есть в раре PAS с прототипами


Юрий Зотов   (2002-02-11 16:17:00) [13]

NailS © (11.02.02 15:10)

Cм. TResourceStream.


NailS   (2002-02-11 15:10:00) [14]

Возник вопрос собственно по теме.
Как динамически (в RunTime) загрузить ресурсы в приложение и потом их использовать?


Андрей Сенченко   (2002-02-11 12:58:00) [15]

YES !!!
Вот теперь ОГРОМНОЕ СПАСИБО !!!


Digitman   (2002-02-11 12:53:00) [16]

RCDATA - нетипизированный ресурсный тип. В ресурсах такого типа может храниться все, что угодно, но интерпретация/обработка считанных ресурсов такого типа возлагается на приложение, поскольку ОС не имеет никаких предположений о содержимом таких ресурсов : она лишь грузит/выгружает из в/из памяти. Прочие ресурсные типы (CURSOR, ICON, MENU, ACCELERATOR и т.п.) являются стандартными ресурсами Windows, и их интерпретация/обработка может производиться встроенными средствами ОС

Вот здесь скачиваешь дистрибутив ResHacker.
http://rpi.net.au/~ajohnson/resourcehacker/

Открыв с помощью него, к примеру, EXCEL.EXE, сохраняешь его ресурсы в формате *.RC, открываешь полученный RC-файл с помощью любого текст.ред-ра и внимательно изучаешь его содержимое, сопоставляя с уже имеющимися у тебя представлениями и описанием вышеупомянутых Win32API-вызовов (FindResource и LoadResource) в Delphi Win32API SDK help и MSDN.


McSimm   (2002-02-11 12:44:00) [17]

Есть способ приятнее brcc32.exe. Достаточно добавить к проекту файл .rc (Project/Add to Project), или в файле проекта вставить:
{$R "myfile.res" "myfile.rc"}
После этого компилятор сам будет отслеживать изменения и компилировать файл ресурсов.
Описание формата я и не искал - пользовался найденными образцами. Но оно есть в MSDN: вот неполный перечень тех самых ключевых слов:
ACCELERATORS,BITMAP,CURSOR,DIALOG,DIALOGEX,FONT,ICON,MENU,MENUEX,MESSAGETABLE,POPUP,RCDATA,STRINGTABLE,VERSIONINFO


Андрей Сенченко   (2002-02-11 11:35:00) [18]

Угумс. Осталось выяснить возможные варианты того самого RCDATA
Это ведь может быть и программа и, и иконка, и все что угодно. Ну Сергей, ну что так сложно ссылку дать на раздел хелпа или книжку ? Я ведь не прошу писать этот файл за меня - у самого руки имеются.


Digitman   (2002-02-11 11:31:00) [19]

Вот, к примеру, строчка, которую нужно поместить в *.RC-файл для подключения к ресурсам некоего файла :

MYFILE RCDATA "SOMEFILE.EXT"


Андрей Сенченко   (2002-02-11 11:27:00) [20]

Digitman © (11.02.02 11:17)
>> Не понял) *.RC - обычный текстовый формат, описывающий
>> ресурсы на спец.языке. Ты же сам его и создавал для
>> передачи на обработку в brcc32, а теперь формат его выясняешь ?

Ну не создавал я его. Не создавал. Смотри собствеено мой первый вопрос. Я ЗНАЮ, что его НУЖНО создать, но я НЕ ЗНАЮ как его написать


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо