Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как создать и заполнить EMF? [D5, Win95/98, WinXP]


mari_ra ©   (2002-05-15 10:44:00) 

Помогите, пожалуйста: нужно создать EMF и запихнуть в него кусок из другого EMF. Разобрать входящий EMF с помощью EnumEnhMetaFile я могу, проанализировать, какие функции из него мне нужны, а какие нет, тоже. А вот как из отобранных функций составить новый EMF... Help, pls!!!


valery_f   (2002-05-15 16:33:00) [1]

Есть идея. Энумератор просто бьет на части метафайл. Что мешает сделать свой энумератор? А в довесок - плейер, который для каждой команды зовет соответствующую API функцию... Блин, о чем я раньше думал?


mari_ra   (2002-05-15 14:41:00) [2]

Насколько я знаю, WIN95 некорректно выполняет DeleteEnhMetaFile. Точнее - не освобождает дескриптор вообще %(. Как бороться - тоже пока нигде не нашла...


valery_f   (2002-05-15 14:24:00) [3]

Да, забыл спросить. У тебя GDI ресурсы не уплывают? У меня просто кошмар - прокачал сотню-другую файлов и хана. Спасает только перезагрузка... Не знаю что и думать...


valery_f   (2002-05-15 14:17:00) [4]

Есть 2 варианта:

1) Для нового метафайла "исполнить" нужные команды, вызывая соответствующие им функции API.

2) Свалить новый набор команд вместе с заголовком в какой-нибудь stream или в файл (прямо в двоичном формате метафайла) и потом юзать как метафайл. Это должно сработать, т.к. в памяти (и в файле) эти команды идут в том же виде, в каком их выдает енумератор (он просто выдает их по очереди, а не сплошным потоком).


mari_ra   (2002-05-15 13:40:00) [5]

Sorry, все-таки не поняла...

Создаю новый метафайл
var cuthdc: HEnhMetaFile;
begin
cuthdc:=CreateEnhMetafile(0, PChar("hBuff.emf"), nil, "");
...

Загружаю исходный метафайл, разбираю по функциям (EnumEnhMetaFile). В том, что правильно определяю, какие функции нужны, какие - нет - уверена, поскольку могу все это дело отрисовать на панели. Но какая фунцкия добавляет эти функции в новый метафайл?


valery_f   (2002-05-15 12:18:00) [6]

Я думаю - так и составить, по порядку. Единственная проблема - не запутаться с управляющими командами (типа масштабирования window/viewport, параметры заливки и т.д. и т.п.), а возни тут, наверное, будет много (это, конечно, если делать "честно" :).

Но если речь идет просто о выборке из существующего EMF (без добавления), то проще выкинуть из исходного файла лишние команды отрисовки (но только отрисовки (!), заменив их на MoveTo в конец выкинутого объекта, если пакет команд модифицирует положение пера).


Наверх

Титульная страница Поиск, карта сайта Написать письмо