![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Контейнер с файлами [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]