Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Nick4
Зарегистрирован: 15.10.2011 Сообщения: 95
|
Добавлено: Сб Окт 15, 2011 7:31 pm Заголовок сообщения: Изменить шаг масштабирование колесиком мыши |
|
|
Как в mapinfo можно изменить масштабирование при помощи колесика мышки? Хотелось бы сделать меньше шаг и центр масштабирования-указатель мыши. Примерно как в AutoCad. |
|
Вернуться к началу |
|
|
Nick4
Зарегистрирован: 15.10.2011 Сообщения: 95
|
Добавлено: Вс Окт 16, 2011 8:04 pm Заголовок сообщения: Дело сдвинулось |
|
|
Шаг масштаба я изменил. Осталось центр масштабирования. |
|
Вернуться к началу |
|
|
Андрей Могильный
Зарегистрирован: 21.03.2006 Сообщения: 864
|
Добавлено: Пн Окт 17, 2011 9:59 pm Заголовок сообщения: |
|
|
Расскажите, как? |
|
Вернуться к началу |
|
|
Nick4
Зарегистрирован: 15.10.2011 Сообщения: 95
|
Добавлено: Пн Окт 17, 2011 11:55 pm Заголовок сообщения: Изменение масштаба |
|
|
Вешаемся на функцию winchangedhandler. Перед этим создаём глобальную переменную типа float для запоминания предыдущего масштаба. При увеличении карты срабатывает winchangedhandler. Масштаб увеличивается вдвое, я его тут же меняю на предыдущий*коэффициент. В конце функции предыдущему масштабу присваиваем текущий. Я применил коэффициент 1.5. Всё отлично работает.
Сейчас заканчиваю изменение масштаба на указателе мыши. Осталось "расковырять" как получить координаты мыши в пикселях. |
|
Вернуться к началу |
|
|
Андрей Могильный
Зарегистрирован: 21.03.2006 Сообщения: 864
|
Добавлено: Вт Окт 18, 2011 6:37 am Заголовок сообщения: |
|
|
Как с морганием карты? Сильно заметно?
Координаты мыши можно получить только со статус-бара, предварительно переключив карту в показ координат там:
Set Map Display Position |
|
Вернуться к началу |
|
|
Nick4
Зарегистрирован: 15.10.2011 Сообщения: 95
|
Добавлено: Ср Окт 19, 2011 12:59 am Заголовок сообщения: |
|
|
Моргания нет. Программа отрабатывает быстрее, чем дисплей начинает реагировать. Т.е. дисплею умножили масштаб на 2, пока он это понял, уже переделали на 1.5. Это если на словах. На деле все работает идеально. Если надо, опубликую исходник. |
|
Вернуться к началу |
|
|
Nick4
Зарегистрирован: 15.10.2011 Сообщения: 95
|
Добавлено: Ср Окт 19, 2011 1:51 am Заголовок сообщения: |
|
|
Считать строку statusbar пока не нашел |
|
Вернуться к началу |
|
|
Nick4
Зарегистрирован: 15.10.2011 Сообщения: 95
|
Добавлено: Вс Ноя 13, 2011 1:23 pm Заголовок сообщения: Победа. |
|
|
Сделал. Масштабируется с нужным шагом относительно указателя мыши. Работает отлично. Совет по Статус бар оказался тупиковым, только время потерял. |
|
Вернуться к началу |
|
|
Андрей Могильный
Зарегистрирован: 21.03.2006 Сообщения: 864
|
Добавлено: Вс Ноя 13, 2011 2:37 pm Заголовок сообщения: |
|
|
Через статус-бар координаты мыши можно считать только через OLE-взаимодействие. У вас видимо программа на чистом MapBasic? Тогда да, события такого в MapBasic нет.
Поделитесь, как получилось считать координаты мыши в MapBasic? Создали свою кнопку и перекрыли ей стандартные ZoomIn/ZoomOut? |
|
Вернуться к началу |
|
|
Nick4
Зарегистрирован: 15.10.2011 Сообщения: 95
|
Добавлено: Чт Ноя 17, 2011 12:52 am Заголовок сообщения: |
|
|
Считал текущий курсор мыши в пикселях при помощи user32. Получил текущие координаты окна в пикселях (та же user32). Получил минимальную и максимальную широту-долготу окна (тут уже MapBasic палок в колеса не ставит). Дальше чистая математика. |
|
Вернуться к началу |
|
|
Nick4
Зарегистрирован: 15.10.2011 Сообщения: 95
|
Добавлено: Чт Ноя 17, 2011 8:27 pm Заголовок сообщения: |
|
|
Хотелось бы все таки получить координаты напрямую. Не подскажете как через OLE? |
|
Вернуться к началу |
|
|
Андрей Могильный
Зарегистрирован: 21.03.2006 Сообщения: 864
|
Добавлено: Пт Ноя 18, 2011 6:16 am Заголовок сообщения: |
|
|
Через координаты экрана это круто... А если проекция посложнее, чем широта/долгота?
В OLE нужно вешать callback-объект на события MapInfo. И штатный callback-метод SetStatusText:
Если Вы используете метод MapInfo SetCallback, MapInfo может автоматически генерировать обратные вызовы для вашего объекта IDispatch. Обратные вызовы стандарта MapInfo имеют следующий синтаксис:
SCODE SetStatusText(LPCTSTR lpszMessage)
MapInfo вызывает метод SetStatusText всякий раз, когда изменяется содержание строки сообщений в MapInfo. Единственный аргумент - новый этой строки.
Смотрите раздел Интегрированная Картография в справке по MapBasic. |
|
Вернуться к началу |
|
|
Nick4
Зарегистрирован: 15.10.2011 Сообщения: 95
|
Добавлено: Пн Ноя 21, 2011 11:06 pm Заголовок сообщения: |
|
|
Моя задача привязать указатель мыши к карте. Думаю изменение проекцие ничего не меняет, ведь физически экран двухмерный. CallBack, по моему мнению, не то что надо, ведь в этом случае MapBasic теряет управление, что меня не устраивает. |
|
Вернуться к началу |
|
|
Dashiva
Зарегистрирован: 25.04.2008 Сообщения: 20
|
Добавлено: Ср Ноя 23, 2011 5:55 pm Заголовок сообщения: Re: Победа. |
|
|
Nick4 писал(а): |
Сделал. Масштабируется с нужным шагом относительно указателя мыши. Работает отлично. Совет по Статус бар оказался тупиковым, только время потерял. |
Nick, то есть вам удалось написать утилиту, которая меняет стандартную схему навигации на аналогичную автокаду? Круто! А можете выложить для широкого доступа? Или только за отдельную плату?)))) |
|
Вернуться к началу |
|
|
Nick4
Зарегистрирован: 15.10.2011 Сообщения: 95
|
Добавлено: Вс Ноя 27, 2011 12:23 pm Заголовок сообщения: |
|
|
Я не жадный. Завтра выложу. Хотя интересно, а сколько вы готовы бы заплатить за копию? Ваш ответ ничего не меняет. Утилиту выложу. |
|
Вернуться к началу |
|
|
|