|
Вопрос # 4 870/ вопрос решён / |
|
Доброго времени суток, уважаемые эксперты!
помогите найти способ для решения такой задачи:
на канве строится какое либо изображение график функции или что какя либо картинка, но при этом некоторые части например графика не выходят за пределы канвы и их не видно. Как сделать чтобы при нажатии мыши на канве можно было двигать изображение чтобы не видимые части изображения попадали в обзор. Такое я часто встречал во многих Flash играх.
 |
Вопрос задал: ierihon1 (статус: 1-ый класс)
Вопрос отправлен: 29 декабря 2010, 18:27
Состояние вопроса: решён, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 36; последнее сообщение — 2 января 2011, 17:25; участников в обсуждении: 5.
Страницы: [1] [2] [Следующая »]
|
7Ghost (статус: 1-ый класс), 29 декабря 2010, 19:38 [#1]:
Используйте ScrollBox и PaintBox! Разместите компонент PaintBox в ScrollBox-e и двигайте сколько влезет!
|
|
ierihon1 (статус: 1-ый класс), 29 декабря 2010, 19:46 [#2]:
7Ghost: вариант конечно очень хороший... но к сожалению не подходит.. это не очень удобно пользователю, потому что двигать можно будет только горизонтально или вертикально... гораздо лучше если можно будет одновременно двигать в любых направлениях.
|
|
7Ghost (статус: 1-ый класс), 29 декабря 2010, 19:49 [#3]:
Вообще Canvas вещь очень прихотливая! Стирается даже при наложении одного окна на другого. Единственный способ восстановить или двигать рисунок заново перерисовывать все в Canvas-e
|
|
7Ghost (статус: 1-ый класс), 29 декабря 2010, 19:54 [#4]:
Вобщем, если вы используете Delphi 2010 то там есть прекрасные компоненты в кладке Gestures. Они позволяют устанавливать любые движения на компоненте и события при этом движении и даже легко создавать свои собственные. Работает, как с мышью, так и на мульти-тач мониторах при движении пальцев. Очень изящная вещь
|
|
ierihon1 (статус: 1-ый класс), 29 декабря 2010, 19:54 [#5]:
ну это понятно и легко исправить, но как его вообще двигать... в эом проблема... я сейчас эксперементирую с OnMouseMove...
|
|
ierihon1 (статус: 1-ый класс), 29 декабря 2010, 20:01 [#6]:
я работаю с 2011... но там это тоже есть... только я не понимаю как этим пользоваться...
|
|
ierihon1 (статус: 1-ый класс), 29 декабря 2010, 20:07 [#8]:
я так понял программа запоминает движение мыши и при их выполнении выполняет определённые для этого движения задачи?
|
|
7Ghost (статус: 1-ый класс), 29 декабря 2010, 20:12 [#9]:
Безусловно вы правы) Если Canvas вы рисуете на форме то для формы вы можете создать движения указать диапазоны и формы для движения. И так как эти функции встроенные то они будут работать даже на той машине где этих модулей нет
|
|
ierihon1 (статус: 1-ый класс), 29 декабря 2010, 20:15 [#10]:
а как сделать так чтобы движение происходила ровно на столько на сколько перемещается мышка?
|
|
ierihon1 (статус: 1-ый класс), 29 декабря 2010, 20:17 [#11]:
в пикселях конечно)
|
|
7Ghost (статус: 1-ый класс), 29 декабря 2010, 20:20 [#12]:
Хм... То есть захватывать изображение указателем мыши и при движении не отпуская указатель перемещать в том направлении в котором движется указатель мыши? Дайте ссылку на исходник...
|
|
ierihon1 (статус: 1-ый класс), 29 декабря 2010, 20:22 [#13]:
вот уже сколько спрашивал как это сделать... но так никто и не рассказал.. может вы расскажете как сюда выложить исходник?
|
|
7Ghost (статус: 1-ый класс), 29 декабря 2010, 20:31 [#14]:
Вообщем решить вашу задачу можно так! Сначало необходимо использовать события MouseDown и MouseUp. Для этого нужно создать глобальную переменную типа b : boolean в блоках private или public затем в блоке MouseDown написать b := true, а в событии MouseUp b := false и в событии FormShow вашей формы тоже написать и и b := false. Затем написать в событии MouseMove
if b = true then и сейчас допишу схожу в туалет только а то ноутбук весь мочевой пузырь сдавил)) Извините
|
|
7Ghost (статус: 1-ый класс), 29 декабря 2010, 20:42 [#16]:
Так думаю вам понятно зачем мы сделали переменную B и я могу перейти дальше?
|
|
ierihon1 (статус: 1-ый класс), 29 декабря 2010, 20:45 [#17]:
да конечно)
|
|
7Ghost (статус: 1-ый класс), 29 декабря 2010, 20:55 [#18]:
В общем все будет происходить так если произошло событие опустить кнопку мыши) и держим ее зажатой то мы в блоке MouseMove а именно if b = true then происходит какое-то действие и в этом действии необходимо определить какую-нибудь точку например верхнего левого угла допустим вашей формы. Затем отталкиваясь от этой точки... Короче если указатель мыши по X увеличивает значение относительно значения X нашей точки то значит мы двигаем с лева на право! Если уменьшается в сторону X то значит с права на лево!! Тоже самое описать для Y и перерисовываем Canvas так как движутся наши Y и X. Если мы отпустили кнопку мыши то срабатывает b = false в MouseUp и ваши действия в MouseUp тоже прекращаются! Думаю все ясно?????
|
|
ierihon1 (статус: 1-ый класс), 29 декабря 2010, 20:59 [#19]:
ну пока попробую)) а дальше посмотрим)
|
|
7Ghost (статус: 1-ый класс), 29 декабря 2010, 21:02 [#20]:
Ну пробуйте конечно! Если что пишите в форум. Я также завтра посмотрю ваш исходник. Надеюсь вы не торопитесь с этим так сказать проетом, просто потому-что я сейчас в Алма-ате и здесь уже 12 часов ночи. Думаю что через 10 часов я буду снова в эфире ну а вам удачи конечно)
|
Страницы: [1] [2] [Следующая »]
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|