Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.05.22;
Скачать: [xml.tar.bz2];

Вниз

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

 
Начинака   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.012 c
7-70535
Calm
2003-03-24 16:19
2003.05.22
Как узнать запущен ли процесс с заданным именем?


14-70464
Hawk
2003-05-03 16:10
2003.05.22
Как залогиниться на www сайт, програмно.


3-70107
Евгений
2003-04-28 09:46
2003.05.22
dbExpress


3-70160
Toshanius
2003-05-02 10:39
2003.05.22
Index is out of date!


1-70376
Might
2003-05-10 16:06
2003.05.22
Создание нового формата файлов





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский