Модераторы: Snowy, MetalFan, bems, Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как запихнуть ЛЮБОЙ файл в ресурс, чтобы я мог работать с ним как с файлом 
V
    Опции темы
DeMoNN
Дата 3.1.2009, 00:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 21.3.2008

Репутация: 1
Всего: 2



Доброго времени суток. Можно ли как-нибудь впихнуть любой файл в ресурс или прилинкковать его к самой программе так, чтобы с ним можно было работать как с файлом (копировать на диск, а там, собственно, работать, если быть точнее ), и как это сделать?
PM MAIL ICQ   Вверх
Borland_Delphi_6
Дата 3.1.2009, 00:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


LoneLINEss
****


Профиль
Группа: Участник Клуба
Сообщений: 2509
Регистрация: 5.11.2002
Где: in fortune dreams ...

Репутация: нет
Всего: 20



Вроде бы тип RCDATA позволяет любые бинарные данные хранить, разве нет?


--------------------
Blind Guardian Fan :: BMSTU Student :: A polar bear is a rectangular bear after a coordinate transform.

Мои фотографии
PM MAIL WWW   Вверх
DeMoNN
Дата 3.1.2009, 00:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 21.3.2008

Репутация: 1
Всего: 2



позволять то он позволяет - я о нем только это и нашел. А вот как с ним работать?
PM MAIL ICQ   Вверх
AntonN
Дата 3.1.2009, 00:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.8.2006

Репутация: 3
Всего: 18



создаешь ресурс с файлом:
копируешь в одну папку brcc32.exe, файл для ресурса, создаешь файл 1.rc в котором пишешь FILEEXE MEGARES "file.exe". Запускаешь brcc32.exe 1.rc, в этой же папке создастся файл 1.res. Его прикрепляешь к своей проге.

В самой проге для извлечения ресурса делаешь что то типа этого:
Код

var
  stream: TResourceStream;
begin
  stream := TResourceStream.Create(HInstance, 'FILEEXE', 'MEGARES');
  with TFileStream.Create('file.exe', fmCreate) do begin
    CopyFrom(stream, stream.Size);
    Free;
  end; 



--------------------
user posted image
PM MAIL WWW   Вверх
DeMoNN
Дата 3.1.2009, 01:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 21.3.2008

Репутация: 1
Всего: 2



 smile  а что такое MEGARES и работает ли это с другими типами файлов. И куда попадает file.exe?

Это сообщение отредактировал(а) DeMoNN - 3.1.2009, 01:10
PM MAIL ICQ   Вверх
AntonN
Дата 3.1.2009, 01:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.8.2006

Репутация: 3
Всего: 18



DeMoNN, о brcc32.exe стоит почитать сначала smile формат строки файла описывающего ресурс:
FILEEXE MEGARES "file.exe"
1 - имя ресурса
2 - нахвание секции
3 - сам файл, который будет загнан в ресурс.

По TResourceStream тоже достаточно информации, спрашивай поконкретней smile


--------------------
user posted image
PM MAIL WWW   Вверх
DeMoNN
Дата 3.1.2009, 01:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 21.3.2008

Репутация: 1
Всего: 2



так я же конкректно спросил: куда попадает file.exe smile 
А про TResourceStream сейчас попробую погуглить.
PM MAIL ICQ   Вверх
AntonN
Дата 3.1.2009, 01:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.8.2006

Репутация: 3
Всего: 18



DeMoNN, file.exe попадает в файл ресурса, а тот в свою очередь прикрепляется к твоей программе.


--------------------
user posted image
PM MAIL WWW   Вверх
DeMoNN
Дата 3.1.2009, 01:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 21.3.2008

Репутация: 1
Всего: 2



AntonN, я имел в виду не это - это и так понятно smile 
А куда он попадает после CopyFrom(stream, stream.size)
Погуглил, понял. Нашел очень похожий но чуть более понятный для меня код. Спасибо!

PM MAIL ICQ   Вверх
AntonN
Дата 3.1.2009, 01:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.8.2006

Репутация: 3
Всего: 18



в случае с копированием в TFileStream - на диск, в TMemoryStream - в "память".


--------------------
user posted image
PM MAIL WWW   Вверх
DeMoNN
Дата 3.1.2009, 01:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 21.3.2008

Репутация: 1
Всего: 2



 smile уже понял smile 
Спасибо
PM MAIL ICQ   Вверх
JackA
Дата 6.8.2011, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 4.10.2010

Репутация: нет
Всего: нет



     Чайницкий вопрос. Мне нужно в ресурс занести 2 ВМР и 1 WAV. Можно это сделать в одном .rc или для каждого файла делать отдельный .rc ? И правильно ли я понимаю : файл из ресурса воспринимается как обычный файл, но только находящийся в памяти самой программы, а не на носителе,  и доступен по имени,  как и обычный файл, только только с несколько видоизмененным вызовом ?


Это сообщение отредактировал(а) JackA - 6.8.2011, 22:10
PM MAIL   Вверх
Snowy
Дата 6.8.2011, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 31
Всего: 484



В один rc файл можно заносить любое количество файлов, не превышающее 2Гб.
Файл из ресурсов воспринимается, как набор данных, а не как файл.
Что касается обращения, то оно тоже отлично. Но, если использовать TResourceStream, то получаем единообразную работу со стримами, которая сходна с работой с файлами.
PM MAIL   Вверх
JackA
Дата 7.8.2011, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 4.10.2010

Репутация: нет
Всего: нет



    Thanks !
    Значит, в *.rc  каждый  свой включаемый  файл  описываю  одной  строкой ?  Или через запятую ?

PM MAIL   Вверх
Snowy
Дата 7.8.2011, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 31
Всего: 484



Каждый файл отдельной строкой
PM MAIL   Вверх
JackA
Дата 27.10.2011, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 4.10.2010

Репутация: нет
Всего: нет



  Нужны 2 кнопки с рисунком типа BitBtn, чтобы картинка грузилась из ресурсов.

  Скомпилил файл BitBMP.res из rc вида :
  MYBMPU RCDATA "UP.BMP"
  MYBMPD RCDATA "DOWN.BMP"
  ( почему-то один из источников настаивает, что надо именно в верхнем регистре )

  Но вот подключать - засада : любой из методов требует Cardinal, где взять этого кардинала - непонятка.

BitBtn1.Glyph.LoadFromResourceName (Instance:Cardinal; const ResNam:String),
BitBtn1.Glyph.LoadFromResourcelD (Instance:Cardinal; ResID:Integer),

   В случае со звуком из ресурса было без проблем : 

 
Код


  hResource := LoadResource(hInstance, FindResource(hInstance, 'MyWAVe',
      RT_RCDATA));

    try
      pData := LockResource(hResource);

      if pData = nil then
        raise Exception.Create('Cannot read MyWave');

    // Здесь pData указывает на MyWave
    // Теперь можно, например, проиграть его (Win32):
    finally
    end;
    PlaySound(pData, 0, SND_MEMORY);
 

   Попытался вместо кардинала подсунуть ему pData - ругается на несовместимость типов.

    Как быть, подскажите, плииз.

Это сообщение отредактировал(а) JackA - 27.10.2011, 12:25
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1095 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.