Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Круглый стол
  
Правила КС
>> Настройки

Фильтр вопросов
>> Новые вопросы
отслеживать по
>> Новые ответы

Избранное

Страница вопросов
Поиск по КС


Специальные проекты:
>> К л ю к в а
>> Г о л о в о л о м к и

Вопрос №

Задать вопрос
Off-topic вопросы

Помощь

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  21:22[Войти] | [Зарегистрироваться]
Ответ на вопрос № 61308

15-04-2008 09:10
Прошу помочь мне разобратся с использованием ресурсов (TResourceStream).
Мне нужно загрузить в программу HLP и CNT файлы (справка). И если пользователь произвел выборочную установку программы (без справки), то при необходимости предоставить такую возможность когда это будет необходимо.
Вот только ничего у меня не выходит:(
Добавляю файлы так: Project->Resourses->New->User data.
Далее пытаюсь их извлечь:

function TMain.ExtractRes(ResType, ResName, ResNewName : String) : Boolean;
var
Res : TResourceStream;

begin
{
  ResType - тип
  ResName - имя файла
  ResNewName - в какой файл извлечь
}

  Res:=TResourceStream.Create(Hinstance, Resname, Pchar(ResType));
  Res.SavetoFile(ResNewName);
  Res.Free;

  ExtractRes := True;
end;

...

{
Button9.Click
}

ExtractRes('HELPFILE', 'RCDATA_1', 'help.hlp');

И все! Вылетают ошибки о том, что ресурс не найден. Хотя в инспекторе ресурсов он отображается под таким именем. Или я что-то не правильно понимаю?
Надеюсь на Вашу помощь!

[+] Добавить в избранные вопросы

Отслеживать ответы на этот вопрос по RSS

Ответы:


Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице.
Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.

31-08-2009 13:09 | Комментарий к предыдущим ответам
>>> в какой функции API можно использовать YourPointer
Ни в какой. В большинстве случаев можно только сохранить файл на диск. Если ОЧЕНЬ много предлагают - писать драйвер виртуальной файловой системы. Приложению передавать ссылку на файл виртуальной ФС, а драйвер разберется, что читать данные надо из памяти.

22-08-2009 00:47 | Комментарий к предыдущим ответам

Если извлекать на диск не хотите, то получаете хэндл ресурса, указатель на него и используйте:

h:=FindResource(hInstance, 'DOO_EXE', EXEFILE);
  if h<>0 then begin
    h:=LoadResource(hInstance, h);
    if h<>0 then begin
      YourPointer:=LockResource(h);
      //используете адрес YourPointer...
      UnlockResource(h);
      FreeResource(h);
      end;
    end;



У меня такой вопрос: в какой функции API можно использовать YourPointer для открытия файла (файл имеет расширение PDF).

03-05-2008 11:40
>>> при необходимости предоставить такую возможность когда это будет необходимо
У всех нормальных инсталляторов есть возможность доустановки новых компонентов. Я писал на Inno Setup скрипт, который не только добавлял новые группы, но и был способен удалять группы, с которых было снято выделение.

16-04-2008 06:36 | Сообщение от автора вопроса
Спасибо. Разобрался!

15-04-2008 16:29
Извиняюсь, в "извлечении ошибка: ExtractRes('RCDATA', 'HELP_FOO_2', 'help.cnt');

15-04-2008 16:26
А то, что размер Вашего exe увеличится на Help, ничего? Итак, если не используете Resources Workshop или что-то подобное, то всё делаем руками:
1. В блокноте пишите скрипт:
  HELP_FOO_1 RCDATA C:\ProjectPath\RES\help.hlp
  HELP_FOO_2 RCDATA C:\ProjectPath\RES\help.cnt
  DOO_EXE EXEFILE C:\Borland\Project1.exe
2. Сохраняете в файл (типа myhelpres.rc);
3. Компилируете *.res, в ($DELPHI)\BIN есть утилита-компилятор 32_ресурсов BRCC32.EXE (с командной строкой знакомы?), и получаете файл myhelpres.res;
4. в проекте - {$R myhelpres.res}
5. Извлечение:

procedure InvokeUserHelp(_type, _name, _NewFileName : string);
var res : TResourceStream;
begin
  res := TResourceStream.Create(hInstance, _name, PChar(_type));
  res.SaveToFile(NewFileName);
  res.Free;
end;

procedure TForm1.btnNeedHelpClick(Sender: TObject);
begin
  //извлекаем в текущий каталог
  ExtractRes('RCDATA', 'HELP_FOO_1', 'help.hlp');
  ExtractRes('RCDATA', 'HELP_FOO_2', 'help.hlp');
end;


Если извлекать на диск не хотите, то получаете хэндл ресурса, указатель на него и используйте:

h:=FindResource(hInstance, 'DOO_EXE', EXEFILE);
  if h<>0 then begin
    h:=LoadResource(hInstance, h);
    if h<>0 then begin
      YourPointer:=LockResource(h);
      //используете адрес YourPointer...
      UnlockResource(h);
      FreeResource(h);
      end;
    end;


15-04-2008 09:42
вообще-то вот так resourceStream создаётся: "ResStream := TResourceStream.Create(hInstance, 'MyName', RT_RCDATA);". попробуй.

Добавьте свое cообщение

Вашe имя:  [Войти]
Ваш адрес (e-mail):На Королевстве все адреса защищаются от спам-роботов
контрольный вопрос:
Жил-был у бабушки серенький КТО?
в качестве ответа на вопрос или загадку следует давать только одно слово в именительном падеже и именно в такой форме, как оно используется в оригинале.
Надоело отвечать на странные вопросы? Зарегистрируйтесь на сайте.
Тип сообщения:
Текст:
Жирный шрифт  Наклонный шрифт  Подчеркнутый шрифт  Выравнивание по центру  Список  Заголовок  Разделительная линия  Код  Маленький шрифт  Крупный шрифт  Цитирование блока текста  Строчное цитирование
  • вопрос Круглого стола № XXX

  • вопрос № YYY в тесте № XXX Рыцарской Квинтаны

  • сообщение № YYY в теме № XXX Базарной площади
  • обсуждение темы № YYY Базарной площади
  •  
     Правила оформления сообщений на Королевстве

    Страница избранных вопросов Круглого стола.
      
    Время на сайте: GMT минус 5 часов

    Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
    Функция может не работать в некоторых версиях броузеров.

    Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
    Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

     
    © При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
    Все используемые на сайте торговые марки являются собственностью их производителей.

    Яндекс цитирования