Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Файлы WMF и ресурсы


Автор: C4EBA 12.9.2011, 21:31
Добрый день!
Необходимо сохранить в ресурсах программы несколько векторных графических файлов WMF для того, чтобы во время работы программно загружать их в Image.
Изучив на сайте материалы о ресурсах, я освоил работу с ресурсами, в которых содержались ВМР-файлы: создавал файл ресурсов и изображения из него загружал в Image. Учитывая, что и WMF, и ВМР можно на стадии разработки приложения загрузить в Image, я взял за основу работу с ресурсами для файлов BMP. 
Вначале я создал файл WMFRES.rc:
ResTroinik Metafile F:\XE_Projects\Troinik.wmf  
Этот файл и файл Troinik.wmf положил в папку проекта, в проекте в меню Projec\Add to Projec.. выбрал WMFRES.rc. Сохранил и откомпилировал проект. В папке проекта появился файл ресурсов WMFRES.res.
Добавил созданный ресурс в проект: {$R WMFRES.res}
Попытался использовать файл из ресурса в проекте: загрузить его в Image при нажатии кнопки.
По аналогии с кодом для ВМР-файла 

Код

Image1.Picture.Bitmap.LoadFromResourceName(HInstance,'ResTroinik');


 начал записывать:

Код

 procedure TForm1.ButAboutClick(Sender: TObject);
  begin
   Image1.Picture.Metafile.


но для Metafile в выпадающем меню не нашел LoadFromResourceName, поэтому не смог загрузить файл.
Вопросы:
- правильно ли я сделал запись в WMFRES.rc для создания файла ресурсов?
- как загрузить из файла ресурсов файлы WMF?

Автор: bems 13.9.2011, 16:21
вроде нет типа ресурса Metafile, используй RCDATA

Код

uses
  Graphics, Classes;
var
  Stream: TStream;
begin
  Stream := TResourceStream.Create(hInstance, 'ResTroinik', RT_RCDATA);
  try
    Image1.Picture.Metafile.LoadFromStream(Stream);
  finally
    Stream.Free
  end;



Автор: C4EBA 13.9.2011, 17:32
Спасибо за подсказку. Попробую и отпишусь.

Автор: C4EBA 13.9.2011, 22:01
Все получилось, привожу решение.
Создал файл WMFRES.rc:

ResTroinik RCDATA F:\Delphi_XE_Projects\Troinik.wmf
ResDetA RCDATA F:\Delphi_XE_Projects\DetA.wmf
ResDetB RCDATA F:\Delphi_XE_Projects\DetB.wmf
ResDetC RCDATA F:\Delphi_XE_Projects\DetC.wm

Этот файл и файлы Troinik.wmf, DetA.wmf, DetB.wmf, DetC.wmf положил в папку проекта F:\Delphi_XE_Projects, в проекте в меню открыл Projec\Add to Projec.. выбрал WMFRES.rc. Сохранил и откомпилировал проект. В папке проекта появился файл ресурсов WMFRES.res.
Добавил созданный ресурс в проект: 

Код

implementation

{$R *.dfm}
{$R WMFres.res}


Закрыл окно WMFRES.rc. Удалил из окна Project Manager файл WMFRES.rc. Удалил из папки проекта файл WMFRES.rc и файлы Troinik.wmf, DetA.wmf, DetB.wmf, DetC.wmf.
Добавил в обработчик Button1Click:

Код

procedure TForm1.Button1Click(Sender: TObject);
 var
   Stream: TStream;
begin
  Stream := TResourceStream.Create(hInstance, 'ResDetA', RT_RCDATA);
  try
    Image1.Picture.Metafile.LoadFromStream(Stream);
  finally
    Stream.Free
  end;
end;


(вместо ResDetA можно указать ResDetВ, ResDetС или ResTroinik).

Среда разработки - Дельфи ХЕ

Автор: bems 13.9.2011, 22:32
Цитата(C4EBA @  13.9.2011,  22:01 Найти цитируемый пост)
Удалил из окна Project Manager файл WMFRES.rc. Удалил из папки проекта файл WMFRES.rc и файлы Troinik.wmf, DetA.wmf, DetB.wmf, DetC.wmf.
а это зачем? обычно делают для ресурсов отдельную поддиректорию

Автор: C4EBA 14.9.2011, 08:39
Цитата(bems @  13.9.2011,  22:32 Найти цитируемый пост)
обычно делают для ресурсов отдельную поддиректорию

Согласен. И к этой поддиректории указывают путь в rc-файле. То есть в моем примере создания rc-файла вместо

... ... ... F:\Delphi_XE_Projects\Troinik.wmf 

указывается путь к поддиректории, например

... ... ... F:\Delphi_XE_Projects\Resurs\Troinik.wmf 

И файлы WMFRES.rc, Troinik.wmf, DetA.wmf, DetB.wmf, DetC.wmf должны быть в поддиректории F:\Delphi_XE_Projects\Resurs\. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)