|
www.integro.ru ЦСИ ИНТЕГРО
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Tulon
Зарегистрирован: 11.07.2006 Сообщения: 77 Откуда: Сочи
|
Добавлено: Пн 25 Авг 2008 14:39 Заголовок сообщения: Использование методов объекта Surface на VBScript |
|
|
Имеется простая скриптовая программка, которая будет создавать точечный объект по щелчку левой кнопкой мыши на карте ИнГео.
Переменные EndPointX и EndPointY глобальные.
Вот фрагмент программы:
Код: |
dim EndPointX, EndPointY
sub MapEditors_MouseDown(aButton, aShift, aX, aY)
dim MapObjects, MapObject, Shape
if IsActive=1 then
if aButton=inmbLeft then
Application.MainWindow.MapWindow.Surface.PointDeviceToWorld aX, aY, EndPointX, EndPointY 'Строка №1
set MapObjects = Application.ActiveDB.MapObjects 'Строка №2
set MapObject = MapObjects.AddObject(Application.ActiveProjectView.ActiveLayerView.Layer.ID) 'Строка №3
set Shape = MapObject.Shapes.Insert(-1, Application.ActiveProjectView.ActiveLayerView.StyleViews.Item(0).Style.ID) 'Строка №4
Shape.Contour.Insert(-1).InsertVertex -1, EndPointX, EndPointY, -1 'Строка №5
end if
end if
end sub |
Если координаты устройства передать COM объекту и в нем произвести пересчет координат и рисование точки, то всё обрабатывается нормально.
В том же виде, который я привел выше, отладчик скриптов не ругается, но при запуске программки в режиме "разработчика", то при клике мышкой на карте вызывается окно с кодом и курсор устанавливается на строку №1. Если её полностью убрать и точку создавать с координатами (aX,aY), то всё прекрасно создается.
Вопрос - почему из скриптов у меня не получается обратиться к методу PointDeviceToWorld?
PS. Я пытался передать параметры методу в скобках, но отладчик ругается. _________________ Нет ни чего сложнее, чем достигнуть простоты. |
|
Вернуться к началу |
|
|
Tulon
Зарегистрирован: 11.07.2006 Сообщения: 77 Откуда: Сочи
|
Добавлено: Пн 25 Авг 2008 15:07 Заголовок сообщения: |
|
|
После того, как скачал и установил QScript, он сообщил мне, что в строке №1 несоответствие типов(((
Забавно, что он не пропустил даже вот такой вариант кода (танец с бубном):
Код: | option explicit
dim aX, aY
dim EndPointX, EndPointY
aX = 316
aY = 438
EndPointX = 0.1
EndPointY = 0.1
Application.MainWindow.MapWindow.Surface.PointDeviceToWorld aX, aY, EndPointX, EndPointY |
Я думал там всё идет через Variant и несоотвествия дробных/целых значений быть не может. Можете пояснить ситуацию?[/code] _________________ Нет ни чего сложнее, чем достигнуть простоты. |
|
Вернуться к началу |
|
|
Tulon
Зарегистрирован: 11.07.2006 Сообщения: 77 Откуда: Сочи
|
Добавлено: Пн 25 Авг 2008 15:39 Заголовок сообщения: |
|
|
Извините, конечно, за флуд, но у меня уже мозг подкипать начинает от того, что я не могу понять где в моем коде ошибка(((
Сделал следующее:
Код: | option explicit
sub MakeDouble(int1, int2, dbl1, dbl2)
dbl1 = int1/2
dbl2 = int2/3
end sub
dim aX, aY
dim EndPointX, EndPointY
aX = 316
aY = 437
MakeDouble aX, aY, EndPointX, EndPointY
MsgBox EndPointX&" "&EndPointY |
Всё обрабатывается, результат выводится %-(
А через PointDeviceToWorld не выдает. _________________ Нет ни чего сложнее, чем достигнуть простоты. |
|
Вернуться к началу |
|
|
andreichernov
Зарегистрирован: 14.02.2005 Сообщения: 209 Откуда: Самара
|
Добавлено: Вт 26 Авг 2008 08:21 Заголовок сообщения: |
|
|
Вместо
Surface.PointDeviceToWorld
в скриптах следует использовать
Surface.sPointDeviceToWorld
С уважением, Андрей Чернов |
|
Вернуться к началу |
|
|
Tulon
Зарегистрирован: 11.07.2006 Сообщения: 77 Откуда: Сочи
|
Добавлено: Вт 26 Авг 2008 10:03 Заголовок сообщения: |
|
|
Андрей, спасибо. Именно в этом и была проблема. _________________ Нет ни чего сложнее, чем достигнуть простоты. |
|
Вернуться к началу |
|
|
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете добавлять приложения в этом форуме Вы можете скачивать файлы в этом форуме
|
|