Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.01.2013, 06:27   #1
Volkogriz
Форумчанин
 
Аватар для Volkogriz
 
Регистрация: 11.10.2007
Сообщений: 384
Вопрос програмно включить res файл в exe

Доброе время суток!
Вопрос собственно такой:
есть архив res есть заготовка exe как всунуть программно res файл внутрь exe?
Не при помощи {$R архив.res} а программно smile
Заранее благодарен.
С уважением,
Volkogriz!
Не количеством плюсов измеряется репутация человека...!
Volkogriz вне форума Ответить с цитированием
Старый 13.01.2013, 10:46   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

есть такие программы, называются редакторы ресурсов (их множество, найдете легко), они умеют делать то, что Вам надо. Гуглите исходники, разбирайте...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.01.2013, 15:13   #3
Volkogriz
Форумчанин
 
Аватар для Volkogriz
 
Регистрация: 11.10.2007
Сообщений: 384
По умолчанию

Мне не нужен редактор ресурсов!
Я спросил не про Resource Hacker и не про остальные программы
Мне нужно из своей программы добавлять ресурс в заготовку исполняемого файла!
Заранее благодарен.
С уважением,
Volkogriz!
Не количеством плюсов измеряется репутация человека...!
Volkogriz вне форума Ответить с цитированием
Старый 13.01.2013, 15:32   #4
Кольша
Далеко не
Участник клуба
 
Аватар для Кольша
 
Регистрация: 11.08.2011
Сообщений: 1,512
По умолчанию

В какую заготовку...как?зачем почему? вы дали слишком мало данных..если вам надо добавить к ЧУЖОМУ exe файлу ресурс тоSerge_Bliznykov вам правильно сказал копайтесь в исходниках там это есть..ну а если в свой то гугля вам в помощь)
Кольша вне форума Ответить с цитированием
Старый 13.01.2013, 15:33   #5
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Ресурс нужен только этому приложению? Приложение собственное?
Просто допиши к концу exe через TFileStream.Write свои данные.
А сам exe должен будет извлечь эти данные через TFileStream.Read.
Главное знать откуда начинать читать (можно заранее жёстко прописать позицию с которой будут писаться и читаться данные)
eoln вне форума Ответить с цитированием
Старый 13.01.2013, 15:43   #6
beegl
instagram
Участник клуба
 
Аватар для beegl
 
Регистрация: 24.05.2008
Сообщений: 1,451
По умолчанию

1. Пишем в блокноте RC-файл, куда прописываем все нужные нам программы, например:
Код:
ARJ EXEFILE C:\ARHIVERS\ARJ.EXE
2. Компилируем его в ресурс при помощи Brcc32.exe. Получаем RES- файл.

3. Далее в тексте нашей программы:

Код:
implementation
{$R *.DFM}
{$R test.res} //Это наш RES-файл

// Процедура для извлечения ресурса в указанный файл
procedure ExtractRes(ResType, ResName, ResNewName : String);
var
  Res : TResourceStream;
begin
  Res := TResourceStream.Create(Hinstance, Resname, Pchar(ResType));
  Res.SavetoFile(ResNewName);
  Res.Free;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
 // Записывает в текущую папку arj.exe
 ExtractRes('EXEFILE', 'ARJ', 'ARJ.EXE');
end;
beegl вне форума Ответить с цитированием
Старый 13.01.2013, 16:21   #7
Volkogriz
Форумчанин
 
Аватар для Volkogriz
 
Регистрация: 11.10.2007
Сообщений: 384
По умолчанию

Извлекать, создавать я умею программно!
До меня просто не может доходить
Опишу подробнее:
резервирую директорию в архив создаю Res файл:

Код:
procedure CreateResourceFile(
  DataFile, ResFile: string;  // имена файлов
  ResID: Integer              // id ресурсов
);
var
  FS, RS: TFileStream;
  FileHeader, ResHeader: TResHeader;
  Padding: array[0..SizeOf(DWORD)-1] of Byte;
begin
  { Open input file and create resource file }
  FS := TFileStream.Create(  // для чтения данных из файла
    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 old
    rubbish 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;

procedure TForm1.Button1Click(Sender: TObject);
begin
CreateResourceFile('Mozilla.zip','Mozilla.res',08);
end;
Теперь у меня есть уже готовый Backup.exe файл, в нём все процедуры для распаковки архива.
мне нужно засунуть 'Mozilla.res' в этот exe файл, в принципе всё!
Заранее благодарен.
С уважением,
Volkogriz!
Не количеством плюсов измеряется репутация человека...!

Последний раз редактировалось Volkogriz; 13.01.2013 в 16:23.
Volkogriz вне форума Ответить с цитированием
Старый 13.01.2013, 16:57   #8
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Почему для решения простых проблем люди находят самые идиотские и трудные решения?

Искать в гугле и примеры и описания: BeginUpdateResource,UpdateREsource, EndUpdateResource
Человек_Борща вне форума Ответить с цитированием
Старый 13.01.2013, 17:16   #9
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

http://programmersforum.ru/showthread.php?t=221370
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не находится файл .res Metallzton Общие вопросы Delphi 4 02.12.2012 22:08
програмно вызвать brcc.exe, то не собирает ресурсы! Человек_Борща Общие вопросы Delphi 9 30.05.2011 02:10
DynamicSkinForm и Res файл Fok Общие вопросы Delphi 1 23.08.2010 16:47
Как програмно включить\выключить сетевой адаптер SeRhy Общие вопросы Delphi 8 16.03.2010 23:37
Програмно отключить(включить) сетевое подключение oleg kutkov Работа с сетью в Delphi 2 03.09.2007 09:12