Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.10.16;
Скачать: CL | DM;

Вниз

Контейнер с файлами   Найти похожие ветки 

 
Димыч   (2005-09-28 04:23) [0]

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


 
Adder ©   (2005-09-28 04:49) [1]

http://delphimaster.net/view/2-1127492451/
FBI Agent   (23.09.05 20:40) [2]


 
Джо ©   (2005-09-28 04:51) [2]

Легче всего это сделать при помощи ресурсов (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;

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


 
Джо ©   (2005-09-28 04:54) [3]


>  [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 08:27) [4]

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



Страницы: 1 вся ветка

Текущий архив: 2005.10.16;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.043 c
6-1119435840
Drema
2005-06-22 14:24
2005.10.16
Twebbrowser и события в нем


14-1127307517
Layner
2005-09-21 16:58
2005.10.16
Вот записался на курсы C#


14-1127399020
Карелин Артем
2005-09-22 18:23
2005.10.16
Как давно была установлена Виндовс?


2-1127134150
Fantasy
2005-09-19 16:49
2005.10.16
Сервис HELP


1-1127703560
Laymer
2005-09-26 06:59
2005.10.16
Запрет закрытие программы.