Форум: "Основная";
Текущий архив: 2004.01.09;
Скачать: [xml.tar.bz2];
ВнизСтиль кисти 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.01 c