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

Вниз

Поместить файл данных в файл ресурсов и затем прочитаь его   Найти похожие ветки 

 
Начинака   (2003-05-08 20:18) [0]

Получил несколько хороших советов, надеюсь на очередную подсказку или ссылку. Достаточно понятно, что могу положить эти данные в константу (Const), но хотелось бы сделать элегантней.
Спасибо


 
Alexandr3   (2003-05-09 20:13) [1]

На королевстве дельфи естьпроект AKM там Дмитрий Логинов
показывает несколько возможных способов этого дела и даже с шифрованием ресурса


 
Bokus ©   (2003-05-10 03:49) [2]

Это как читать из ресурса а как заносить непомню -)
==================================================
...Pic:=TResourceStream.Create(HInstance, "NEW_ABITUR", "Icon_Button");


 
Начинака   (2003-05-10 09:20) [3]

2 Alexandr3 (09.05.03 20:13)
Сходил на АКМ ( http://www.delphikingdom.ru/mastering/safe/), к сожалению похожего не нашел. Если возможно, уточни линк. Спасибо


 
Юрий Зотов ©   (2003-05-10 09:42) [4]

1. Делаете текстовый файл с расширением RC. В нем одна строка:
RCDATA AnyResourceName YourFileName

2. Натравливаете на него BRCC32.exe (лежит в каталоге Delphi\Bin) и получаете файл RES.

3. Подключаете этот RES к проекту директивой $R.

И все. Извлекаете ресурс по его имени AnyResourceName (например, через TResourceStream).


 
Начинака   (2003-05-10 09:46) [5]

2 Юрий Зотов © (10.05.03 09:42)
Спасибо. Попробую


 
Great_Lesh   (2003-05-10 09:49) [6]

Вообще необходимо будет использовать две программы - одна для записи в ресурс, а вторая и будет твоей программой, она будет читать из ресурса. Нужен пример - скажи, я его сейчас быстро заеб... забабахаю (с) Гоблин


 
Начинака   (2003-05-10 13:10) [7]

2 Great_Lesh
Вышли, если не затруднит.
Можно на мыло: an-vitaly@mail.ru


 
Начинака   (2003-05-10 15:26) [8]

2 Юрий Зотов
Не получается прочитать из ресурса. Если найдете немного времени, пожалуста, подбросьте несколь строк кода


 
Юрий Зотов ©   (2003-05-10 16:23) [9]

> Начинака (10.05.03 15:26)

Sorry, я понадеялся на свою память, но немного ошибся и невольно ввел Вас в заблуждение. Имя ресурса и тип ресурса надо поменять местами. То есть, строка в файле RC должна иметь такой формат:

AnyResourceName RCDATA YourFileName

Причем имя ресурса AnyResourceName и тип ресурса RCDATA нужно писать большими буквами (по крайней мере, так было в Win16, а в Win32 не уверен, но лучше тоже большими - это точно сработает). Тип ресурса, вообще говоря, можно указывать собственный, а не обязательно стандартный RCDATA. Но если в ресурсы зашивается не любой файл, а стандартный (например, файл иконки), то надо указывать именно стандартный тип (например, ICON) - иначе не смогут работать функции API, которые грузят ресурсы именно данного стандартного типа (например, LoadIcon).

В качестве компенсации за свою оплошность привожу пример программы, которая запускает вшитую в ее ресурсы другую программу (Project2.exe). Зашивка была выполнена компиляцией с помощью BRCC32 файла Prj2exe.rc, содержавшего такую строку:
PROJECT2 EXEFILE Project2.exe

unit Unit1;

interface

uses
Classes, Controls, Forms, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
private
FExeName: string;
end;

var
Form1: TForm1;

implementation

{$R *.DFM}
{$R Prj2exe.res} // Подключаем свой файл ресурсов

uses
Windows, SysUtils;

procedure TForm1.Button1Click(Sender: TObject);
begin
// 1. Формируем уникальное имя будущего EXE-файла.
SetLength(FExeName, MAX_PATH + 1);
repeat
GetTempFileName(PChar(GetCurrentDir), "Tmp", 0, PChar(FExeName));
DeleteFile(FExeName);
FExeName := Copy(FExeName, 1, Pos("TMP", FExeName) - 1) + "exe";
until not FileExists(FExeName);
// 2. Извлекаем EXE-файл из ресурсов программы и записываем его на диск.
with TResourceStream.Create(HInstance, "PROJECT2", "EXEFILE") do
try
SaveToFile(FExeName)
finally
Free
end;
// 3. Запускаем EXE-файл.
WinExec(PChar(FExeName), SW_SHOWNORMAL)
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if FExeName <> "" then
Application.MessageBox(PChar("Не забудьте удалить все файлы " + ExtractFilePath(FExeName) + "Tmp*.exe"),
"До свидания!", MB_OK or MB_ICONEXCLAMATION)
end;

end.



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

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

Наверх




Память: 0.49 MB
Время: 0.022 c
14-70482
Zhenya
2003-05-02 21:12
2003.05.22
Вопрос по ХП???


7-70552
OlegM
2003-03-24 11:38
2003.05.22
А можно ли под 2000 помигать лампочками на клаве как в 98


14-70524
Дмитрий К.К.
2003-05-05 11:04
2003.05.22
Именинники 5 мая


14-70441
thing
2003-05-01 20:26
2003.05.22
Графика


14-70462
Antosik
2003-05-01 19:09
2003.05.22
Отчёты в дельфях