| 
| 
 | Вопрос # 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] [Следующая »]  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |