Да, теперь все работает.
Спасибо большое.
Спасибо большое.
25.09.2020 16:34:28
Да, теперь все работает.
Спасибо большое. |
|
|
|
30.09.2020 15:17:26
После того, как мы нашли номер нужной нам физической точки и соответственно ее координаты,
есть ли функция, которая нарисует вокруг найденной точки квадрат, чтобы привлечь внимание пользователя, какая именно найдена ближайшая точка? Если такой стандартной функции нет, то просьба подсказать, как написать такую функцию.
Изменено: |
|
|
|
30.09.2020 16:30:50
На вкус и цвет... Поскольку всем не угодишь, то специальную функцию "выделить точку" мы не делали. Но есть все возможности визуально выделить точку разными способами - как Вам больше понравится. Например, в качестве примера можно воспользоваться реализацией выделения узлов объекта при редактировании в компоненте TMapEditMetric:
Только в качестве FObjTemp надо создать объект объект в памяти с одной единственной точкой. |
|||||
|
|
01.10.2020 10:27:48
Сделал так:
Image.Color := $00F0F0F0; // black Image.Thick := 250; // mkm Image.Dash := 1250; // stroke length Image.Blank := 500; // gap length // Для рисования пунктира Form.Image := IMG_DOT; // пунктир Form.Parm := @Image; Form.Mode := R2_NOT; Var MapTopLeft : TDOUBLEPOINT; Form : TPAINTPARM; QFrame : array[1..5] of TDOUBLEPOINT; procedure PaintQuadrate; begin MapTopLeft.X:=form_main.mvMap.MapLeft; MapTopLeft.Y:=form_main.mvMap.MapTop; form_main.mvMap.ConvertMetric(MapTopLeft.X, MapTopLeft.Y, PP_PICTURE, PP_PLANE); QFrame[1].X := Point3.X+10; QFrame[1].Y := Point3.Y-10; QFrame[2].X := Point3.X+10; QFrame[2].Y := Point3.Y+10; QFrame[3].X := Point3.X-10; QFrame[3].X := Point3.X+10; QFrame[4].X := Point3.X-10; QFrame[4].X := Point3.X-10; QFrame[5].X := Point3.X+10; QFrame[5].X := Point3.X-10; mapViewUserObject(form_main.mvMap.MapHandle,form_main.mvMap.Handle,@MapTopLeft,@Form,@QFrame,integer(PP_MAP)); // Компилятор ругается на @MapTopLeft и пишет: Type actual and formal var parametrs must be identical end;
Изменено: |
|
|
|
01.10.2020 12:03:15
Да, вроде все работает. Спасибо.
Ниже привожу код, может кому понадобиться. Var MapTopLeft : TDOUBLEPOINT; QFrame : array[1..5] of TDOUBLEPOINT; QData : TPLACEDATA; PointCount : Integer; procedure PaintQuadrate; begin MapTopLeft.X:=form_main.mvMap.MapLeft; MapTopLeft.Y:=form_main.mvMap.MapTop; form_main.mvMap.ConvertMetric(MapTopLeft.X, MapTopLeft.Y, PP_PICTURE, PP_PLANE); QFrame[1].X := Point3.X+10; QFrame[1].Y := Point3.Y-10; QFrame[2].X := Point3.X+10; QFrame[2].Y := Point3.Y+10; QFrame[3].X := Point3.X-10; QFrame[3].Y := Point3.Y+10; QFrame[4].X := Point3.X-10; QFrame[4].Y := Point3.Y-10; QFrame[5].X := Point3.X+10; QFrame[5].Y := Point3.Y-10; PointCount := 5; QData.Points := @QFrame[1]; QData.PolyCounts := @PointCount; // адрес количества точек QData.Count := 1; // счетчик контуров mapViewUserObject(form_main.mvMap.MapHandle,form_main.mvMap.Handle,MapTopLeft,Form,QData,integer(PP_MAP)); end; |
|
|
|
01.10.2020 14:31:39
В процессе нанесения нового объекта с помощью объекта TMapEditMetric
очередная точка фиксируется нажатием левой клавиши мыши. Как получить это событие, чтобы изменить координату зафиксированной точки. Можно конечно обработать событие по клику мыши на карте procedure Tform_main.mvMapClick(Sender: TObject); begin If EditMode = true then begin // Но тогда как прочитать координату последней нанесенной точки? чтобы ее изменить и как изменить? end; end;
Изменено: |
|
|
|
01.10.2020 16:53:46
Такого события в режиме нанесения/редактирования не предусмотрено.
Вы можете отредактировать метрику объекта по завершению процесса редактирования - по событию TMapEditMetric.OnExecute в связанном TMapEditMetric с экземпляре компонента TMapObj будет заполнена метрика. Событие получения точки OnGetPoint есть только в режиме выбора точки на контуре существующего объекта и то, в обработчике этого события изменить координаты нельзя. |
|
|
|
01.10.2020 16:57:25
Понял так.
Вначале нанес объект на карту, как получиться. Затем выбрал нужную точку на объекте и изменил ее. Правильно я понял? Если понял правильно, вопрос: можно ли автоматически переместить указатель мыши во время нанесения очередного отрезка площадного объекта, в точку на карте, соответствующую другим заданным координатам в метрах без автоматической фиксации? Фиксация будет затем выполнена как обычно по нажатию левой клавиши мыши.
Изменено: |
|
|
|
01.10.2020 18:49:22
Да. Пока без вариантов.
Это ничего не даст. TMapEditMetric помнит где находился курсор и при следующем нажатии или движении мыши курсор вернется на исходную позицию. В этом плане TMapEditMetric не обмануть. Но в целом идея интересная. Подумаем как реализовать и, возможно, в следующих версиях расширим возможности TMapEditMetric, чтобы можно было программно управлять позиционированием и установкой точек. |
|||||
|
|
||||
© КБ Панорама, 1991-2024 Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности |