Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 846

/ вопрос открыт /

Приветствую, уважаемые эксперты!
Доброго дня всем участникам форума! =)
Имеется программа для построения графиков функций. Нужно сделать так, чтобы при наведении мышкой на график функции (при условии, что нажата, скажем, заданная горячая клавиша) курсор мыши "приклеивается" к графику, после чего его нельзя убрать с линии графика, а лишь водить курсором по ней (пока нажата клавиша). При этом программа должна отображать текущие координаты по осям X и Y, над которыми в текущий момент находится этот "приклеенный" к линии графика курсор. Мне говорили, подобное есть в какой-то из версий MathCAD. Как это можно реализовать?
Спасибо заранее за ответы!

Roxanne Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задала: Roxanne (статус: Посетитель)
Вопрос отправлен: 26 мая 2009, 23:02
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, Roxanne!
Привязывать/ограничивать курсор в целом плохая идея (можно получить слишком много жалоб от пользователей - и будут правы!).
Поэтому лучше делать так - создать свой курсор, но пустой (без единой точки) и когда нужно прятать курсор - просто заменяем на наш. В таком случае, если выйти за пределы формы, то он станет нормальным. А во время отладки его можно вообще не прятать.
А вот "курсор" на графике лучше рисовать самостоятельно.
Остается только последнее - как связать курсор на графике и реальный курсор. Можно например пользоваться только координатой x. а y можно расчитать (Вам же функция известна). А можно в центре графика поставить условную точку и подбирать положения так, что бы они все были на одной линии.

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 27 мая 2009, 00:07


Мини-форум вопроса

Всего сообщений: 5; последнее сообщение — 27 мая 2009, 14:31; участников в обсуждении: 2.
Яуген Таляныч

Яуген Таляныч (статус: Посетитель), 27 мая 2009, 12:01 [#1]:

Позволю себе развить тему. У меня почти похожая ситуация: закачиваю .BMP карты местности, кликаю на исходный пункт, перемещаю в след. точку, кликаю - протягивается линия от предыдущей и т.д. А вот как бы, как в электронных картах городов, при перемещении за курсором тянулась линия ("резинка"), при клике фиксировалась и уже от этой точки тянулась? Кроме как непрерывно перерисовывать по таймеру или по изменению положения курсора в голову не приходит, но не элегантно как-то. Есть решение ?
Вадим К

Вадим К (статус: Академик), 27 мая 2009, 12:21 [#2]:

А почему это "не элегантно"? именно по каждому перемещению мышы и делают. И всё получается красиво. Единственное, что не перерисовывают всю карту. А делают хитрее. Первый раз линия рисуется просто, а вот на следующий раз, когда её переместили, она вначале по старым координатам рисуется, но в режиме xor (тем самым стирая предыдущую линию), а потом уже по новым, текущим координатам.
Галочка "подтверждения прочтения" - вселенское зло.
Яуген Таляныч

Яуген Таляныч (статус: Посетитель), 27 мая 2009, 14:10 [#3]:

Я думал об этом. Но при перерисовке стирается не только старое положение линии, но и детали карты, что были под ней.
Придется, видимо, сохранять обстановку по крайней мере той части карты, что попала под текущее положение линии, и каждый раз ее предварительно восстанавливать перед прокладкой новой линии.
Вадим К

Вадим К (статус: Академик), 27 мая 2009, 14:19 [#4]:

Ещё раз пишу - рисуется в режиме xor. Там не надо "подрисовывать карту".
Посмотрите на это http://www.delphisources.ru/pages/faq/base/move_object_on_complex_background.html
Галочка "подтверждения прочтения" - вселенское зло.
Яуген Таляныч

Яуген Таляныч (статус: Посетитель), 27 мая 2009, 14:31 [#5]:

Самый то! Я сразу не въехал, думаю : в lineto нет же режима XOR, а посмотрел по ссылке - ну прямо ответ на мой вопрос.
Сенкс. Пошел рисовать.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:27
Выполнено за 0.02 сек.