Главная страница
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.044 c
14-1127748542
Карелин Артем
2005-09-26 19:29
2005.10.16
Вот и база жителей РФ!


1-1127375465
Альф
2005-09-22 11:51
2005.10.16
Как поймать исключение ?


14-1127128986
infom
2005-09-19 15:23
2005.10.16
Оцените программку "Мастерская" пожалуйста


14-1127466173
stone
2005-09-23 13:02
2005.10.16
Трудности перевода или давайте говорить по-русски


14-1127479695
oldman
2005-09-23 16:48
2005.10.16
Вот послали меня читать курсы...