Список форумов www.integro.ru www.integro.ru
ЦСИ ИНТЕГРО
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Простой (надеюсь) вопрос по координатам мышки

 
Начать новую тему   Ответить на тему    Список форумов www.integro.ru -> Вопросы разработчиков
Предыдущая тема :: Следующая тема  
Автор Сообщение
Алексей Васильев



Зарегистрирован: 20.05.2009
Сообщения: 105
Откуда: Самара

СообщениеДобавлено: Пт 18 Мар 2011 16:02    Заголовок сообщения: Простой (надеюсь) вопрос по координатам мышки Ответить с цитатой

Прошу прощения за, видимо, ламерский вопрос, но как получить в расширении координаты мышки относительно нуля карты (можно по щелчку, а можно и в динамике?) В библиотеке есть модули "MouseMove" "MouseDown", но как их вызвать, чтобы они работали? У меня есть знаменитый документ по GIS API, и список методов, но что-то извилин не хватает ими воспользоваться. Либо возвращает мусор, либо дает аварийную ошибку... Нельзя ли как-нибуль популярно, в двух (ну или двадцати двух) словах?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Михаил Власов



Зарегистрирован: 14.02.2005
Сообщения: 580
Откуда: ИНТЕГРО

СообщениеДобавлено: Пн 21 Мар 2011 10:06    Заголовок сообщения: Re: Простой (надеюсь) вопрос по координатам мышки Ответить с цитатой

Например, так:
Код:
' Вызывается при нажатии клавиши мыши над окном карты
sub MapEditors_MouseDown(aButton, aShift, aX, aY)
   dim aWorldX, aWorldY
   Application.MainWindow.MapWindow.Surface.sPointDeviceToWorld aX, aY, aWorldX, aWorldY
   MsgBox _
      "Координаты в пикселах окна карты: " & aX & " " & aY & vbNewLine & _
      "Координаты в системе координат территории: " & aWorldX & " " & aWorldY
end sub

_________________
С уважением, Михаил Власов.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Foton



Зарегистрирован: 09.10.2006
Сообщения: 158
Откуда: Ярославль

СообщениеДобавлено: Пн 21 Мар 2011 12:33    Заголовок сообщения: Ответить с цитатой

Код:

unit PointEditor;

interface

uses
   Windows, M2Addon, M2AddonD, .....;

type
   TPointEditor = class(TM2CustomEditor)
   private
      .....
   public
......


      procedure MouseMove(aShift: TM2ShiftState; aMouse: TPoint); override;
      procedure MouseDown(aButton: TM2MouseButton; aShift: TM2ShiftState; aMouse: TPoint); override;

      end;

var
   gPointEditor: TPointEditor = nil;


implementation

......

procedure TPointEditor.MouseDown(aButton: TM2MouseButton; aShift: TM2ShiftState; aMouse: TPoint);
var
  ....
begin

  if aButton = kmbLeft then
    begin
    aNewPt := FAddon.MapView.PointFromDevice(aMouse);
    .....
    end;
end;


......
end.


примерно так для API. если нужно еще маусмув обрабатывать то пишешь обработчик в соответствующей процедуре.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Алексей Васильев



Зарегистрирован: 20.05.2009
Сообщения: 105
Откуда: Самара

СообщениеДобавлено: Пн 21 Мар 2011 18:37    Заголовок сообщения: Ответить с цитатой

Спасибо. А не могли бы вы обрисовать инициализирующую часть? Дьявол, видимо, гнездится именно там...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Foton



Зарегистрирован: 09.10.2006
Сообщения: 158
Откуда: Ярославль

СообщениеДобавлено: Пн 21 Мар 2011 18:56    Заголовок сообщения: Ответить с цитатой

что именно? целиком же практически модуль запостил
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Алексей Васильев



Зарегистрирован: 20.05.2009
Сообщения: 105
Откуда: Самара

СообщениеДобавлено: Вт 22 Мар 2011 11:44    Заголовок сообщения: Ответить с цитатой

Заработало! Действительно, дьявол был в инициализации.
Что тут больше повлияло, сказать затрудняюсь, но то, что в TPointEditor.GetEditorOptions нужно было заказывать не только eopMouseDown, но и eopProcessPhase - это совершенно точно. Без этого процедура не вызывалась. Кроме того, оказалось критично расположение и момент вызова процедуры подключения редактора. Я имею в виду
Цитата:
if not Assigned(gPointEditor) then begin
gPointEditor := TPointEditor.Create(Self);
try MapView.AddEditor(gPointEditor.IEditor);
finally gPointEditor.IEditor._Release;
end;
end;

Возможно, это случайное совпадение, но заработало только после того, как я включил ее в класс TFirstAddon, а не TPointEditor, и вызов этой инициализации сделал заблаговременно, в момент FormActivate. а не непосредственно перед запросом координат.
Вам же Special Thanks за подсказку насчет PointFromDevice... Very Happy
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов www.integro.ru -> Вопросы разработчиков Часовой пояс: GMT + 5
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете добавлять приложения в этом форуме
Вы можете скачивать файлы в этом форуме


© phpBB Group
Русская поддержка phpBB