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

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

Контейнер с файлами [D7, WinXP]


Димыч ©   (2005-09-28 04:23:00) 

Уважаемые мастера такой вопрос: как в программу еще до компиляции поместить содержимое какого-нибудь файла, чтоб после компиляции программы я смог это содержимое записать снова в файл. Файл может быть любого типа. Запись в файл должна происходить без искажения содержимого. Наприер если бы я смог вставить содержимое какого-нибудь Exe файла в программу, а потом скомпилировать прогу, и сохранить полученное содержимое снова в ЕхЕ, то экзэшник запустился.  Мне надо типа что-то, например, свойства Image - Picture, когда картинку в Image вставляешь из файла, то картинка в файле dfm представляется ввиде символов. Помогите пожалуйста, как все таки мне можно сделать своеобразный котейнер для файлов.


Федор   (2005-09-28 08:27:00) [1]

http://delphibase.spb.ru/?action=viewfunc&topic=appres&id=10036


Джо   (2005-09-28 04:54:00) [2]


>  [2] Джо ©   (28.09.05 04:51)

Переработал я сегодня :))
Достаточно пункт 2 сделать таким образом:
procedure TForm1.Button1Click(Sender: TObject);
var
 AStream: TResourceStream;
begin
 AStream := TResourceStream.Create(HInstance,'MY_EXE','EXEFILE');
 try
   AStream.SaveToFile('d:\testfile.exe');
 finally
   AStream.Free;
 end;
end;


Джо   (2005-09-28 04:51:00) [3]

Легче всего это сделать при помощи ресурсов (resources).
Включим например в тело своего файла (в секцию ресурсов) содержимое исполнимого файла notepad.exe.

1. В папке с программой создаешь файл exe.rcследующего содержания:
MY_EXE   EXEFILE  "c:\windows\notepad.exe"
(путь к файлу notepad.exe указываешь свой).
После этого добавляешь этот скрипт к своему проекту:
Project/Add to project и указываешт exe.rc.
Перекомпилируешь программу, notepad.exe теперь включен в тело твоего приложения.

2. "Достать" ресурс можно разными способами. Например, вот очень наглядный способ того, как можно извлечь ресурс и сохранить его в отдельном файле.
procedure TForm1.Button1Click(Sender: TObject);
var
 AStream: TResourceStream;
 AFile: TFileStream;
begin
 AStream := TResourceStream.Create(HInstance,'MY_EXE','EXEFILE');
 try
   AFile := TFileStream.Create('d:\testfile.exe',fmCreate);
   try
     AFile.CopyFrom(AStream,AStream.Size);
   finally
     AFile.Free;
   end;
 finally
   AStream.Free;
 end;
end;

Код, надеюсь, очевидный и в комментариях не нуждается :)


Adder   (2005-09-28 04:49:00) [4]

http://www.delphimaster.ru/cgi-bin/forum.pl?id=1127492451&n=18
FBI Agent   (23.09.05 20:40) [2]


Наверх

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