Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.01.09;
Скачать: CL | DM;

Вниз

Стиль кисти bsClear в метафайле   Найти похожие ветки 

 
Pavel_P   (2003-12-24 16:43) [0]

Уважаемые Господа, подскажите пожалуйста: как узнать был ли стиль у кисти bsClear при чтении метафайла (emf, wmf). Проблема в том, что я создаю пробный метафайл (рисую Rectangle) со стилем кисти bsClear, а затем считываю его, но в PEMRCreateBrushIndirect(Ptr).lb.lbStyle = BS_SOLID, а не BS_NULL (или BS_HOLLOW)...


 
MBo ©   (2003-12-24 17:02) [1]

Windows какие?


 
MBo ©   (2003-12-24 17:07) [2]

Возможно, используется просто SelectObject(.. GetStockObject)


 
Pavel_P   (2003-12-24 17:07) [3]

Windows 9x (не NT, хотя данная проблема, по-моему, не зависит от ОС)


 
Pavel_P   (2003-12-24 17:23) [4]

в смысле не PEMRSelectObject(P)?.. Т.е. я не совсем понял... Я считываю созданный заранее метафайл функцией EnumEnhMetaFile(0, Metafile.Handle, @MFProc, Self, Rect(0,0,0,0)), где в MFProc есть некий case-переход (в зависимости от константы, например EMR_CREATEBRUSHINDIRECT) на создание Brush (как она создаётся, я написал выше)


 
MBo ©   (2003-12-24 17:48) [5]

Попробовал под XP - если в метафайл нарисовать фигуру, ничего не делая с кистью - в перечислении есть EMR_CREATEBRUSHINDIRECT с солид белой кистью.

Select Obj: 00000001
CREATEBRUSH Brush Style: 0 Color 00FFFFFF
Select Obj: 00000002

Если же вставить emc.Brush.Style:=bsClear;
то EMR_CREATEBRUSHINDIRECT отсутствует!
Select Obj: 00000001
Select Obj: 80000005


 
MBo ©   (2003-12-24 18:01) [6]

Да, точно, эта строка дает тот же результат

emc.Brush.Handle:=GetStockObject(NULL_BRUSH);

Select Obj: 00000001
Select Obj: 80000005


 
Pavel_P   (2003-12-24 18:01) [7]

Ну да, есть такой момент, но это другой вопрос, извиняюсь, что, наверно, неправильно выразился выше... У меня она в этом случае "входит" в EMR_SELECTOBJECT: и тут-то я уже вызываю функцию, которая делает PEMRSelectObject(Ptr) - когда это будет кисть, я вызываю конструктор кисти TMyBrush.Create, в котором делаю PEMRCreateBrushIndirect(P).lb.lbStyle и т.д. (см. выше)... вот... во! может кисть только для bsClear и "проходит" через PEMRSelectObject?.. тогда, мне нужно добавить нечто вроде проверки - если кисть "из" PEMRSelectObject, то она bsClear, а?


 
MBo ©   (2003-12-24 18:05) [8]

нет, GetStockObject(NULL_BRUSH) дает Select Obj: 80000004

{$EXTERNALSYM BLACK_BRUSH}
BLACK_BRUSH = 4;
{$EXTERNALSYM NULL_BRUSH}
NULL_BRUSH = 5;

Так что $80000000+StockObjectIndex


 
MBo ©   (2003-12-24 18:13) [9]

И вот это еще
{ Stock object flag used in the object handle index in the enhanced
metafile records.
E.g. The object handle index (META_STOCK_OBJECT or BLACK_BRUSH)
represents the stock object BLACK_BRUSH. }

{$EXTERNALSYM ENHMETA_STOCK_OBJECT}
ENHMETA_STOCK_OBJECT = DWORD($80000000);


 
Pavel_P   (2003-12-24 18:25) [10]

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


 
Pavel_P   (2003-12-24 18:39) [11]

... то есть когда будет bsClear???


 
MBo ©   (2003-12-25 09:55) [12]

Когда Select Obj: $80000005


 
Pavel_P   (2003-12-25 11:38) [13]

оk... да, всё... понял куда вставить проверку (просто не я до этого эту прогу писал, хрен разберёшься)... Большое спасибо!



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

Текущий архив: 2004.01.09;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.03 c
4-25654
Testerman
2003-11-05 19:03
2004.01.09
Помогите заменить кнопку


9-25178
Дмитрий К.
2003-06-20 16:55
2004.01.09
Сохранение изображения текущей сцены OpenGL


1-25433
djon
2003-12-25 17:20
2004.01.09
Работа с датами


4-25644
One man
2003-11-06 20:12
2004.01.09
Помогите с кодом, пожалуйста!


1-25284
tria
2003-12-22 18:23
2004.01.09
Можно ли убрать свойство, кот. не нужно?