nesco писал(а):
tsdima, зачем у тебя указано два вызова DrawSource
Что означает константа nFunc
Первый вызов инициализирует переменную dc, второй - соответственно, чистит.
То есть предполагалость сделать так:
#pas
procedure THIImg.Context(var _Data:TData; var dc:HDC; nFunc:word);
begin
case nFunc of
1: begin
dc := ReadInteger(_Data,_data_Bitmap,0);
end;
end;
end;
procedure THIImg.Bitmap(var _Data:TData; var dc:HDC; nFunc:word);
begin
case nFunc of
1: begin
bmp := ReadBitmap(_Data,_data_Bitmap,nil);
dc := bmp.Canvas.Handle;
end;
end;
end;
procedure THIImg.Handle(var _Data:TData; var dc:HDC; nFunc:word);
begin
case nFunc of
1: begin
wnd := ReadInteger(_Data,_data_Bitmap,0);
dc := GetDC(wnd);
end;
2: begin
ReleaseDC(wnd, dc);
end;
end;
end;
procedure THIImg_Line._work_doDraw;
var dc:HDC; c:integer; hp:HPEN;
begin
_prop_DrawSource(_Data, dc, 1);
ReadXY(_Data); // -- это, возможно, делать внутри _prop_DrawSource и с учётом MapMode
c := ReadInteger(_Data,_data_Color,_prop_Color);
hp := CreatePen(0,ReadInteger(_Data,_data_Size,_prop_Size),c);
SelectObject(DC,hp);
MoveToEx(DC,x1,y1,nil);
LineTo(DC,x2,y2);
DeleteObject(hp);
_prop_DrawSource(_Data, dc, 2);
_hi_CreateEvent(_Data,@_event_onDraw,dt);
end;
nesco писал(а):
как передать и определить разницу между hWnd и hDC -- использовать разницу типов, я правильно понял Использовать dtObject
nesco писал(а):
Как получить MapMode GetMapMode(dc);
------------ Дoбавленo:
dc можно сделать членом базового класса
_prop_DrawSource числом, а вместо вызовов _prop_DrawSource нормальные процедуры imgGetDC, imgReleaseDC, imgMapPoint
в базовом классе можно добавить свойство "еденицы измерения координат", которое будет использовать imgMapPoint, чтобы привести координаты к нужному MapMode (текущий в контексте)
------------ Дoбавленo:
Хотя по моему убеждению, всегда можно сделать SetMapMode, чтобы установить еденицы измерения координат.