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

Вниз

подключить ресурс (zip архив)   Найти похожие ветки 

 
12 ©   (2010-06-29 17:23) [0]

правильно делаю?

 Resource := LoadResource(hInstance,
             FindResource(hInstance, "MyText", "TEXT"));

 FS := tFileStream.Create( Resource );

с тем, чтоб сохранить его потом где-то, тоже как файл zip


 
Игорь Шевченко ©   (2010-06-29 17:35) [1]


> правильно делаю?


нет


 
Anatoly Podgoretsky ©   (2010-06-29 18:41) [2]

> 12  (29.06.2010 17:23:00)  [0]

Переведи на русский конец предложения, после где то,


 
Юрий Зотов ©   (2010-06-29 18:52) [3]

Почему бы не использовать TResourceStream?


 
12 ©   (2010-06-30 08:38) [4]

> > правильно делаю?
> нет

почему то сам догадался :)


> TResourceStream?

надо посмотреть, спасибо


> Переведи на русский

Хочу сделать батник, чтоб архивировалось все в папке разработки, brcc32 <полученный_архив>, dcc32 <программа>
а в программе уже написана линковка ресурса, и секретная комбинация манипуляций, чтоб прилинкованный ресурс сохранялся на диск

Чтоб не искать исходники
каждая программа будет их содержать в себе.

Собственно, все могу - только с ресурсами никогда не связывался до этого

http://articles.org.ru/docum/resurs.php
сделал все что там написано, получилось

а на основе, никак не соображу, как ресурс тупо сохранить на диск


 
RWolf ©   (2010-06-30 09:09) [5]


> а на основе, никак не соображу, как ресурс тупо сохранить
> на диск

загрузить ресурс в память и записать содержимое на диск, очевидно же.


 
antonn ©   (2010-06-30 09:21) [6]

http://desksoft.ru/index.php?drkb=202&id=1615&str_path=0|126|147|202&w
пойдет?


 
12 ©   (2010-06-30 09:44) [7]

Спасибо!


 
12 ©   (2010-06-30 10:15) [8]

почему у меня в приведенном примере,
http://desksoft.ru/index.php?drkb=202&id=1615&str_path=0|126|147|202&w
ошибка AV выскакивает?

Вызываю  
 ExtractToFile(application.Handle, 333, "CUSTOM", "RNR2.ZIP");

До этого было
 CreateResourceFile("RNR.zip","RNR.RES",333);
успешно, файл RNR.RES создался, размером равный как если через  brcc32 делать.

в проекте стоит $R
var
 Form1: TForm1;

implementation

{$R *.dfm}
{$R RNR.RES}


//---------------------------------------------------------------
procedure ExtractToFile(Instance:THandle; ResID:Integer; ResType, FileName:String);
var
 ResStream: TResourceStream;
 FileStream: TFileStream;
begin
 try
   ResStream := TResourceStream.CreateFromID(Instance, ResID, pChar(ResType));  //AV ..at 0040950C.. read of ..0000014D ..
   try
     //if FileExists(FileName) then
       //DeleteFile(pChar(FileName));
     FileStream := TFileStream.Create(FileName, fmCreate);
     try
       FileStream.CopyFrom(ResStream, 0);
     finally
       FileStream.Free;
     end;
   finally
     ResStream.Free;
   end;
 except
   on E:Exception do
   begin
     DeleteFile(FileName);
     raise;
   end;
 end;
end;
//---------------------------------------------------------------
procedure CreateResourceFile(
 DataFile, ResFile: string;  // имена файлов
 ResID: Integer              // id ресурсов
);
var
 FS, RS: TFileStream;
 FileHeader, ResHeader: TResHeader;
 Padding: array[0..SizeOf(DWORD)-1] of Byte;
begin

 { Open input file and create resource file }
 FS := TFileStream.Create(  // для чтения данных из файла
   DataFile, fmOpenRead);
 RS := TFileStream.Create(  // для записи файла ресурсов
   ResFile, fmCreate);

 { Создаём заголовок файла ресурсов - все нули, за исключением
   HeaderSize, ResType и ResID }
 FillChar(FileHeader, SizeOf(FileHeader), #0);
 FileHeader.HeaderSize := SizeOf(FileHeader);
 FileHeader.ResId := $0000FFFF;
 FileHeader.ResType := $0000FFFF;

 { Создаём заголовок данных для RC_DATA файла
   Внимание: для создания более одного ресурса необходимо
   повторить следующий процесс, используя каждый раз различные
   ID ресурсов }
 FillChar(ResHeader, SizeOf(ResHeader), #0);
 ResHeader.HeaderSize := SizeOf(ResHeader);
 // id ресурса - FFFF означает "не строка!"
 ResHeader.ResId := $0000FFFF or (ResId shl 16);
 // тип ресурса - RT_RCDATA (from Windows unit)
 ResHeader.ResType := $0000FFFF
   or (WORD(RT_RCDATA) shl 16);
 // размер данных - есть размер файла
 ResHeader.DataSize := FS.Size;
 // Устанавливаем необходимые флаги памяти
 ResHeader.MemoryFlags := $0030;

 { Записываем заголовки в файл ресурсов }
 RS.WriteBuffer(FileHeader, sizeof(FileHeader));
 RS.WriteBuffer(ResHeader, sizeof(ResHeader));

 { Копируем файл в ресурс }
 RS.CopyFrom(FS, FS.Size);

 { Pad data out to DWORD boundary - any old
   rubbish will do!}
 if FS.Size mod SizeOf(DWORD) <> 0 then
   RS.WriteBuffer(Padding, SizeOf(DWORD) -
     FS.Size mod SizeOf(DWORD));

 { закрываем файлы }
 FS.Free;
 RS.Free;
end;


 
12 ©   (2010-06-30 10:30) [9]

если переписать так
ExtractToFile(application.Handle, 333, "CUSTOM", "RNR2.ZIP", "RNR.RES");

procedure ExtractToFile(Instance:THandle; ResID:Integer; ResType, FileName:String; ResName:string = "");
var
 ResStream: TResourceStream;
 FileStream: TFileStream;
begin
 try
//    ResStream := TResourceStream.CreateFromID(Instance, ResID, pChar(ResType));
   ResStream := TResourceStream.Create(Instance,ResName,pAnsiChar(ResType));


то ругается -  Resource RNR.RES not found

подскажите, как мне этот ресурс все-таки сохранить?


 
Leonid Troyanovsky ©   (2010-06-30 10:34) [10]


> 12 ©   (30.06.10 10:15) [8]

>  ExtractToFile(application.Handle, 333, "CUSTOM", "RNR2.
> ZIP");

Какой на application.Handle - HInstance.
И не "CUSTOM", а RT_RCDATA.

--
Regards, LVT.


 
12 ©   (2010-06-30 10:53) [11]

в таком виде
ExtractToFile(hInstance, 333, RT_RCDATA, "RNR2.ZIP");
ошибка
Access violation at address 004042E7 in module "Project1.exe". Read of address 0000000A

сразу на строке ExtractToFile(, не входя в процедуру, если по F7 исполнять

внутри @LStrFromPChar если CPU смореть


 
12 ©   (2010-06-30 11:05) [12]

ExtractToFile(hInstance, 333, "RT_RCDATA", "RNR2.ZIP");
Access violation at address 0040950C in module "Project1.exe". Read of address 0000014D


 
Leonid Troyanovsky ©   (2010-06-30 11:09) [13]


> 12 ©   (30.06.10 10:53) [11]

Я не пойму, зачем так много приседаний.
http://www.dore.ru/perl/nntp.pl?f=1&gid=8&mid=28106

Ресурсный скрипт .rc подключается к проекту путем Shift-F11

--
Regards, LVT.


 
12 ©   (2010-06-30 11:26) [14]

> [13] Leonid Troyanovsky ©   (30.06.10 11:09)

ясно
спасибо
все получилось


 
Anatoly Podgoretsky ©   (2010-06-30 13:59) [15]

> RWolf  (30.06.2010 09:09:05)  [5]

Не очевидно, а очевидно SaveToFile



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

Форум: "Начинающим";
Текущий архив: 2010.09.26;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.004 c
15-1277965959
MonoLife
2010-07-01 10:32
2010.09.26
Рабочий вопрос.


2-1277647865
New555
2010-06-27 18:11
2010.09.26
Обработка события onMouseMove


2-1277877991
AK-47
2010-06-30 10:06
2010.09.26
Конвертация из *.docx в *.doc


15-1277890599
brother
2010-06-30 13:36
2010.09.26
Бесшумная система охлаждения


15-1277647767
tesseract
2010-06-27 18:09
2010.09.26
Жаренное солнце. У меня помер внешний термометр.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский