Чтение онлайн

на главную - закладки

Жанры

Советы по Delphi. Версия 1.4.3 от 1.1.2001

Озеров Валентин

Шрифт:

DataFile, fmOpenRead);

 RS := TFileStream.Create( // для записи файла ресурсов

ResFile, fmCreate);

 { Создаём заголовок файла ресурсов - все нули, за исключением HeaderSize, ResType и ResID }

 FillChar(FileHeader, SizeOf(FileHeader), #0);

 FileHeader.HeaderSize := SizeOf(FileHeader);

 FileHeader.ResId := $0000FFFF;

 FileHeader.ResType := $0000FFFF;

 {
Создаём заголовок данных для RC_DATA файла

 Внимание: для создания более одного ресурса необходимо повторить следующий процесс, используя каждый раз различные ID ресурсов }

 FillChar(ResHeader, SizeOf(ResHeader), #0);

 ResHeader.HeaderSize := SizeOf(ResHeader);

 // id ресурса - FFFF означает "не строка!"

 ResHeader.ResId := $0000FFFF or (ResId shl 16);

 // тип ресурса - RT_RCDATA (from Windows unit)

 ResHeader.ResType := $0000FFFF or (WORD(RT_RCDATA) shl 16);

 // размер данных - есть размер файла

 ResHeader.DataSize := FS.Size;

 // Устанавливаем необходимые флаги памяти

 ResHeader.MemoryFlags := $0030;

 { Записываем заголовки в файл ресурсов }

 RS.WriteBuffer(FileHeader, sizeof(FileHeader));

 RS.WriteBuffer(ResHeader, sizeof(ResHeader));

 { Копируем файл в ресурс }

 RS.CopyFrom(FS, FS.Size);

 { Pad data out to DWORD boundary - any oldrubbish will do!}

 if FS.Size mod SizeOf(DWORD) <> 0 then

RS.WriteBuffer(Padding, SizeOf(DWORD) - FS.Size mod SizeOf(DWORD));

 { закрываем файлы }

 FS.Free;

 RS.Free;

end;

Данный код не совсем красив, и отсутствует обработка ошибок. Правильнее будет создать класс, включающий в себя данный пример. Извлечение ресурсов из EXE теперь рассмотрим пример, показывающий, как извлекать ресурсы из исполняемого модуля. Вся процедура заключается в создании потока ресурса, создании файлового потока и копировании из потока ресурса в поток файла.

Листинг 2:

procedure ExtractToFile(Instance:THandle; ResID: Integer; ResType, FileName:String);

var

 ResStream: TResourceStream;

 FileStream: TFileStream;

begin

 try

ResStream := TResourceStream.CreateFromID(Instance, ResID, pChar(ResType));

try

//if FileExists(FileName) then

//DeleteFile(pChar(FileName));

FileStream := TFileStream.Create(FileName, fmCreate);

try

FileStream.CopyFrom(ResStream, 0);

finally

FileStream.Free;

end;

finally

ResStream.Free;

end;

 excepton E:Exception do

begin

DeleteFile(FileName);

raise;

end;

 end;

end;

Всё,

что требуется, это получить Instance exe-шника или dll (у Вашего приложения это Application.Instance или Application.Handle, для dll Вам прийдётся получить его самостоятельно :) ResID тот же самый ID , который был присвоен ресурсу ResType WAVEFILE, BITMAP, CURSOR, CUSTOM – это типы ресурсов, с которыми возможно работать, но у меня получилось успешно проделать процедуру только с CUSTOM FileName – это имя файла, который мы хотим создать из ресурса

Пока ..

Igor Nikolaev aKa The Sprite

[spritesoft@bos.ru] 

IDE 

Копирование проекта в новый каталог

…я скопировал все файлы (и программу, и базу данных) демонстрационного приложения в новый каталог, чтобы поэкспериментировать с программой, не трогая оригинал…

Самый простой путь сделать это:

1. «Save Project As» (сохранить проект как) в ваш новый каталог.

2. Для каждого PAS-файла проекта сделайте операцию «Save As» (сохранить как)

3. Запустите View/ProjectManager для проверки отсутствия ссылок на старый каталог

Если вы уже скопировали PAS-файлы в новый каталог, то в качестве альтернативы к п.(2) могу предложить воспользоваться кнопками плюс/минус в Менеджере Проекта (Project Manager), это поможет вам удалить старое и добавить файлы из нового каталога.

– Mike Orriss

Использование Tools Interface

Поделиться:
Популярные книги

Холодный ветер перемен

Иванов Дмитрий
7. Девяностые
Фантастика:
попаданцы
альтернативная история
6.80
рейтинг книги
Холодный ветер перемен

Идеальный мир для Лекаря 13

Сапфир Олег
13. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 13

Восход. Солнцев. Книга I

Скабер Артемий
1. Голос Бога
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Восход. Солнцев. Книга I

Стеллар. Заклинатель

Прокофьев Роман Юрьевич
3. Стеллар
Фантастика:
боевая фантастика
8.40
рейтинг книги
Стеллар. Заклинатель

Мир-о-творец

Ланцов Михаил Алексеевич
8. Помещик
Фантастика:
альтернативная история
5.00
рейтинг книги
Мир-о-творец

Темный Патриарх Светлого Рода 2

Лисицин Евгений
2. Темный Патриарх Светлого Рода
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Темный Патриарх Светлого Рода 2

Корсар

Русич Антон
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
6.29
рейтинг книги
Корсар

Мимик нового Мира 8

Северный Лис
7. Мимик!
Фантастика:
юмористическая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Мимик нового Мира 8

Рядовой. Назад в СССР. Книга 1

Гаусс Максим
1. Второй шанс
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Рядовой. Назад в СССР. Книга 1

Третий. Том 2

INDIGO
2. Отпуск
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
Третий. Том 2

Курсант: Назад в СССР 11

Дамиров Рафаэль
11. Курсант
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Курсант: Назад в СССР 11

Правила Барби

Аллен Селина
4. Элита Нью-Йорка
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Правила Барби

Его темная целительница

Крааш Кира
2. Любовь среди туманов
Фантастика:
фэнтези
5.75
рейтинг книги
Его темная целительница

Измена. Право на счастье

Вирго Софи
1. Чем закончится измена
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Право на счастье