Здравствуйте господа разработчики !
Имеется некий графический объект нарисованный в диалоге medChoicePointImage для болванки "HOBJ" и скопированный оттуда функциями mapDrawParameters mapDrawImageв память
В Итоге, у меня в памяти нормальная структура типа IMGMULTIMARK. Используя указатель на эту структуру, я корректно и правилно создаю объекты на карте НО у меня стоит задача
ДО того как выполнено нанесение (на этапе настройки вида) отобразить этот дамп на TPanel или TForm неважно на потомке TControl
Пересмотре все возможные варианты функций остановился на mapPaintExample
Подготовил структуру котрая передаётся вторым параметром
fTmpMark : TPAINTEXAMPLE;
fRect : TRect;
------------
fRect := imgDraw.ClientRect;
FillChar(fTmpMark, sizeof(fTmpMark), 0);
fTmpMark.DC := GetDC(imgDraw.Handle); // imgDraw это TPanel
fTmpMark.Rect := @fRect;
fTmpMark.Func := IMG_MULTIMARK;
fTmpMark.Local := OL_MARK;
fTmpMark.VisualType := cVT_SCREEN;
fTmpMark.FillIntensity := 100;
-------------------------
теперь заливаю "начинку" в Parm
obj : HOBJ;
ref : Pointer;
obj := mapCreateSiteObject(fTask.FHMap,fTask.FHMap);
mapRegisterDrawObject(obj, 0, OL_MARK);
if Assigned(fTmpMark.Parm) then // если уже есть вид передаём в диалог
mapAppendDraw(obj, IMG_MULTIMARK, fTmpMark.Parm);
if (medChoicePointImage(fTask.FHMap, fTask.FParm, obj, 0, 0)<>0) and (mapDrawImage(obj,1) = IMG_MULTIMARK) then
begin
if Assigned(fTmpMark.Parm) then FreeMem(fTmpMark.Parm);
fTmpMark.Parm := nil;
ref := mapDrawParameters(obj, 1);
if Assigned(ref) then // запоминаем вид в памяти
begin
GetMem(fTmpMark.Parm, PIMGMULTIMARK(ref)^.Head.Length);
move(ref^, fTmpMark.Parm^, PIMGMULTIMARK(ref)^.Head.Length); // залил
end;
end;
mapFreeObject(obj);
---------------------
отрисовка - НА ПАНЕЛИ НИЧЕГО НЕ ВИДНО
procedure TdlgLoadParcel.FormPaint(Sender: TObject);
begin
if Assigned(fTask) and (fTmpMark.DC<>0) and Assigned(fTmpMark.Parm) then
mapPaintExample(fTask.FHMap, fTmpMark);
end;
ВОПРОС, что я не правильно заполнил ?
Хотел бы получить эффект по типу "предварительного просмотра вида объекта
в редакторе классфикатора
Имеется некий графический объект нарисованный в диалоге medChoicePointImage для болванки "HOBJ" и скопированный оттуда функциями mapDrawParameters mapDrawImageв память
В Итоге, у меня в памяти нормальная структура типа IMGMULTIMARK. Используя указатель на эту структуру, я корректно и правилно создаю объекты на карте НО у меня стоит задача
ДО того как выполнено нанесение (на этапе настройки вида) отобразить этот дамп на TPanel или TForm неважно на потомке TControl
Пересмотре все возможные варианты функций остановился на mapPaintExample
Подготовил структуру котрая передаётся вторым параметром
fTmpMark : TPAINTEXAMPLE;
fRect : TRect;
------------
fRect := imgDraw.ClientRect;
FillChar(fTmpMark, sizeof(fTmpMark), 0);
fTmpMark.DC := GetDC(imgDraw.Handle); // imgDraw это TPanel
fTmpMark.Rect := @fRect;
fTmpMark.Func := IMG_MULTIMARK;
fTmpMark.Local := OL_MARK;
fTmpMark.VisualType := cVT_SCREEN;
fTmpMark.FillIntensity := 100;
-------------------------
теперь заливаю "начинку" в Parm
obj : HOBJ;
ref : Pointer;
obj := mapCreateSiteObject(fTask.FHMap,fTask.FHMap);
mapRegisterDrawObject(obj, 0, OL_MARK);
if Assigned(fTmpMark.Parm) then // если уже есть вид передаём в диалог
mapAppendDraw(obj, IMG_MULTIMARK, fTmpMark.Parm);
if (medChoicePointImage(fTask.FHMap, fTask.FParm, obj, 0, 0)<>0) and (mapDrawImage(obj,1) = IMG_MULTIMARK) then
begin
if Assigned(fTmpMark.Parm) then FreeMem(fTmpMark.Parm);
fTmpMark.Parm := nil;
ref := mapDrawParameters(obj, 1);
if Assigned(ref) then // запоминаем вид в памяти
begin
GetMem(fTmpMark.Parm, PIMGMULTIMARK(ref)^.Head.Length);
move(ref^, fTmpMark.Parm^, PIMGMULTIMARK(ref)^.Head.Length); // залил
end;
end;
mapFreeObject(obj);
---------------------
отрисовка - НА ПАНЕЛИ НИЧЕГО НЕ ВИДНО
procedure TdlgLoadParcel.FormPaint(Sender: TObject);
begin
if Assigned(fTask) and (fTmpMark.DC<>0) and Assigned(fTmpMark.Parm) then
mapPaintExample(fTask.FHMap, fTmpMark);
end;
ВОПРОС, что я не правильно заполнил ?
Хотел бы получить эффект по типу "предварительного просмотра вида объекта
в редакторе классфикатора
Не тот глуп кто не знает, а тот, кто не знает где искать.