|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
28.01.2008, 19:06 | #1 |
Пользователь
Регистрация: 09.01.2008
Сообщений: 42
|
Фаил ресурсов
Люди! такая тема. Можно к проекту подключать фаил ресурсов, в котором могут хранится звуки, иконки, картинки и тд.
Для того что бы создать фаил с ресурсами и откомпаилировать его через brcc32.exe (Borland\Delphi7\Bin\) нужно прописать содержание файла ресурсов, производится это в специальном файле source.rc. Формат записи такой: <имя> <тип> <параметры> <имя файла> Далее, к примеру звуковой фаил: Это описывается в source.rc: LOADSOUND RCDATA LOADONCALL zvyk.wav Это функция что бы извлеч в память и воспроизвести: Procedure RetrieveLoadSound; Var hResource: THandle; pData: Pointer; Begin // Загружаем фаил ресурсов и находим звук под именем 'LOADSOUND' hResource: =LoadResource (hInstance, FindResource(hInstance, 'LOADSOUND', RT_RCDATA)); Try //Находим адрес загруженного ресурса pData: = LockResource(hResource); If pData = nil then raise Exception.Create (Ошибка чтения ресурса ‘LOADSOUND’); SndPlaySound (pData, SND_MEMORY); // Воспроизводим Finally // Освобождаем ресурс FreeResource (hResource); End; End; В фаиле source.rc можно прописать сразу много всего, строчку под строчкой. Вопрос! Кто знает какие типы и парматры нужно вписать в source.rc, что бы в source.res добавить картики, иконки? А так же какие функции, что бы вытащить их в image? |
28.01.2008, 19:17 | #2 |
Пользователь
Регистрация: 26.05.2007
Сообщений: 58
|
Для начала подготовь файлы в моём случае это:
BMAP1.bmp BMAP2.bmp BMAP3.bmp Затем в блокноте напиши список ресурсов: BMAP1 BITMAP C:\AAA\BMAP1.BMP BMAP2 BITMAP C:\AAA\BMAP2.BMP BMAP3 BITMAP C:\AAA\BMAP3.BMP 1 столбец – это имя ресурса будет писаться в библиотеке. 2 столбец – это пользовательский тип ресурса 3 столбец – это путь к файлу картинки. Сохраним как BITMAPS.RC В команде выполнить напиши: C:\Program Files\Borland\Delphi7\Bin\BRCC32.EX E C:\AAA\ BITMAPS.RC Прога создаст нам файл BITMAPS.RES Теперь открываем Delphi создаём library (new->other->dll wizard) За место {$R *.res} можно написать {$R BITMAPS.RES} Сохраняем в нашей папке C:\AAA\, компилируем, все dll готова. Как пользоваться ей. …//где-то в программе var LibHandle: Cardinal; begin LibHandle := LoadLibrary(PAnsiChar(Extractfilepa th(Application.ExeName)+'Nasha.dll' )); image1.Picture.Bitmap.LoadFromResou rceName(LibHandle, 'BMAP1'); end; Как видишь этот процесс очень долгий, я предлагаю хранить ресурсы потоком информации. Для создания файла пишем: Procedure TForm1.AddToStream ( Source , Dest : TStream ); var Size : Integer ; begin Source.position := 0 ; // Сохраняем размер, помещая его в первый байт Size := Source.Size ; Dest.Write(Size,SizeOf(Integer)); Dest.CopyFrom(Source,Source.size); end; И на кнопке procedure TForm1.Button1Click(Sender: TObject); var ABigFileStream, SomeSmallFiles : TMemoryStream ; z: Byte; begin ABigFileStream := TMemoryStream.Create ; try SomeSmallFiles := TMemoryStream.Create ; try for z:=0 to 29 do //количество картинок begin SomeSmallFiles.LoadFromFile(Memo1.L ines[z]);// Memo1 – список адресов картинок AddToStream(SomeSmallFiles,ABigFile Stream); end; finally SomeSmallFiles.Free ; end; ABigFileStream.SaveToFile(edit1.Tex t) //Edit1 – адрес файла в котором сохраняем картинки finally ABigFileStream.free ; end; end; Чтобы открыть пиши: Procedure TForm1.GetFromStream ( Source , Dest : TStream ; Index : Integer ); Var Size , I : Integer ; begin Source.Position := 0 ; For i := 0 to index-1 do begin Source.Read(Size,SizeOf(Integer)); Source.Position := Source.Position + Size ; end; // Если маркер в файле равен размеру, то что-то пошло не так if Source.position = Source.Size then Raise EAccessViolation.Create('Index Out Of Bounds') ; // Получаем желаемый размер файла Source.Read(Size,SizeOf(Integer)); // Очищаем буфер у Dest Dest.Position := 0 ; Dest.Size := 0 ; Dest.CopyFrom(Source,Size); end; На кнопке: procedure TForm1.Button2Click(Sender: TObject); var ABigFileStream, SomeSmallFiles : TMemoryStream ; z: Byte; //JpegIm: TJpegImage; begin ABigFileStream := TMemoryStream.Create ; try ABigFileStream.LoadFromFile(edit1.T ext); SomeSmallFiles := TMemoryStream.Create ; try GetFromStream(ABigFileStream,SomeSm allFiles,strtoint(edit2.Text)); SomeSmallFiles.Position:=0; image1.Picture.Bitmap.LoadFromStrea m(SomeSmallFiles);//Только для BMP {Для Jpeg файлов удали строку выше и убери скобки с этого кода JpegIm := TJpegImage.Create; JpegIm.LoadFromStream(SomeSmallFile s); image1.Picture.Bitmap.Assign(JpegIm ); JpegIm.Destroy; } finally SomeSmallFiles.Free ; end; finally ABigFileStream.free ; end; end; |
28.01.2008, 19:29 | #3 |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
Никогда не пользовался всей этой казуистикой - можно столько ошибок понаделать, что мама, не горюй...
В комплекте с Дельфи раньше шла замечательная вещь - ResourceWorkShop (почему-то с семеркой нет). Пользуюсь только им. Процесс наглядный, почти полностью визуальный, любой тип ресурса и т.д. и т.п. Никакого БРЦЦ использовать вручную не надо, только поменять у полученного файла расширение... Найдите ее на дисках с более старыми (5, 6) версиями Дельфей и пользуйтесь. Советую! |
28.01.2008, 19:31 | #4 |
Пользователь
Регистрация: 09.01.2008
Сообщений: 42
|
а без DLL? мне тупо *.res. Мне надо занть типы и парматер для *.jpg и *.ico и функцию для того что бы вытащить из ресурса их в image. Все гораздо проще
|
28.01.2008, 19:41 | #5 |
Пользователь
Регистрация: 26.05.2007
Сообщений: 58
|
Код:
|
28.01.2008, 19:47 | #6 |
Пользователь
Регистрация: 09.01.2008
Сообщений: 42
|
а в source.rc какие <тип> <параметры>?
|
28.01.2008, 20:50 | #7 | |
Участник клуба
Регистрация: 02.09.2007
Сообщений: 1,193
|
Цитата:
Может дистрибутив обрезанный попался... Один раз ставил с чужого диска, при установке вылазила одна и таже ошибка, раз 100 жал кнопку пропустить, в дистрибутиве не оказалось ни одного help файла. Последний раз редактировалось _Dmitry; 28.01.2008 в 20:59. |
|
09.02.2008, 20:52 | #8 |
Старожил
Регистрация: 06.08.2007
Сообщений: 2,183
|
В свободное время достраиваю, улучшаю свою прогу для компиляции ресурса. Собственно типа оболчки, для упрощения внедрения ресурсов.
|
09.02.2008, 22:27 | #9 |
Форумчанин
Регистрация: 01.12.2007
Сообщений: 346
|
А чем не ндравиться Restorator например?
Win 10 x64 | VS 2015 | MSSQL 2014
autovestitv.ru |
10.02.2008, 00:24 | #10 |
Старожил
Регистрация: 06.08.2007
Сообщений: 2,183
|
Как говорится HandMake. Приятно иметь собственно ручную прогу, а также для саморазвития. Если что-то в своей программе ненравиться, можно в любое время исправить, улучшить. Ненужно ждать обновления версий. Плюс к этому мне так хочется. По моему Restorator платная.
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Файлы ресурсов | Черничный | Общие вопросы Delphi | 1 | 14.07.2008 05:49 |
Проблемы с добавлением ресурсов?? | HunterMan | Win Api | 4 | 12.06.2008 02:33 |
Файл ресурсов | Stanislav | Общие вопросы Delphi | 11 | 21.11.2007 08:27 |
Работа с файлом ресурсов (*.res) | Dude_first | Общие вопросы Delphi | 3 | 09.09.2007 20:27 |