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

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

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

Delphi.int.ru Expert

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

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

#   

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


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

Подробнее »



Вопрос # 4 870

/ вопрос решён /

Доброго времени суток, уважаемые эксперты!
помогите найти способ для решения такой задачи:
на канве строится какое либо изображение график функции или что какя либо картинка, но при этом некоторые части например графика не выходят за пределы канвы и их не видно. Как сделать чтобы при нажатии мыши на канве можно было двигать изображение чтобы не видимые части изображения попадали в обзор. Такое я часто встречал во многих Flash играх.

ierihon1 Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: ierihon1 (статус: 1-ый класс)
Вопрос отправлен: 29 декабря 2010, 18:27
Состояние вопроса: решён, ответов: 0.


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

Всего сообщений: 36; последнее сообщение — 2 января 2011, 17:25; участников в обсуждении: 5.

Страницы: [1] [2] [Следующая »]

7Ghost

7Ghost (статус: 1-ый класс), 29 декабря 2010, 19:38 [#1]:

Используйте ScrollBox и PaintBox! Разместите компонент PaintBox в ScrollBox-e и двигайте сколько влезет!
ierihon1

ierihon1 (статус: 1-ый класс), 29 декабря 2010, 19:46 [#2]:

7Ghost: вариант конечно очень хороший... но к сожалению не подходит.. это не очень удобно пользователю, потому что двигать можно будет только горизонтально или вертикально... гораздо лучше если можно будет одновременно двигать в любых направлениях.
7Ghost

7Ghost (статус: 1-ый класс), 29 декабря 2010, 19:49 [#3]:

Вообще Canvas вещь очень прихотливая! Стирается даже при наложении одного окна на другого. Единственный способ восстановить или двигать рисунок заново перерисовывать все в Canvas-e
7Ghost

7Ghost (статус: 1-ый класс), 29 декабря 2010, 19:54 [#4]:

Вобщем, если вы используете Delphi 2010 то там есть прекрасные компоненты в кладке Gestures. Они позволяют устанавливать любые движения на компоненте и события при этом движении и даже легко создавать свои собственные. Работает, как с мышью, так и на мульти-тач мониторах при движении пальцев. Очень изящная вещь
ierihon1

ierihon1 (статус: 1-ый класс), 29 декабря 2010, 19:54 [#5]:

ну это понятно и легко исправить, но как его вообще двигать... в эом проблема... я сейчас эксперементирую с OnMouseMove...
ierihon1

ierihon1 (статус: 1-ый класс), 29 декабря 2010, 20:01 [#6]:

я работаю с 2011... но там это тоже есть... только я не понимаю как этим пользоваться...
7Ghost

7Ghost (статус: 1-ый класс), 29 декабря 2010, 20:05 [#7]:

Вот здесь все показано полностью http://delphiexpert.ru/view_lesson.php?id=82 да и сайт сам очень полезен!
ierihon1

ierihon1 (статус: 1-ый класс), 29 декабря 2010, 20:07 [#8]:

я так понял программа запоминает движение мыши и при их выполнении выполняет определённые для этого движения задачи?
7Ghost

7Ghost (статус: 1-ый класс), 29 декабря 2010, 20:12 [#9]:

Безусловно вы правы) Если Canvas вы рисуете на форме то для формы вы можете создать движения указать диапазоны и формы для движения. И так как эти функции встроенные то они будут работать даже на той машине где этих модулей нет
ierihon1

ierihon1 (статус: 1-ый класс), 29 декабря 2010, 20:15 [#10]:

а как сделать так чтобы движение происходила ровно на столько на сколько перемещается мышка?
ierihon1

ierihon1 (статус: 1-ый класс), 29 декабря 2010, 20:17 [#11]:

в пикселях конечно)
7Ghost

7Ghost (статус: 1-ый класс), 29 декабря 2010, 20:20 [#12]:

Хм... То есть захватывать изображение указателем мыши и при движении не отпуская указатель перемещать в том направлении в котором движется указатель мыши? Дайте ссылку на исходник...
ierihon1

ierihon1 (статус: 1-ый класс), 29 декабря 2010, 20:22 [#13]:

вот уже сколько спрашивал как это сделать... но так никто и не рассказал.. может вы расскажете как сюда выложить исходник?
7Ghost

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 и сейчас допишу схожу в туалет только а то ноутбук весь мочевой пузырь сдавил)) Извините
ierihon1

ierihon1 (статус: 1-ый класс), 29 декабря 2010, 20:32 [#15]:

http://depositfiles.com/files/ilgtaxj1n
всё нашёл способ))
7Ghost

7Ghost (статус: 1-ый класс), 29 декабря 2010, 20:42 [#16]:

Так думаю вам понятно зачем мы сделали переменную B и я могу перейти дальше?
ierihon1

ierihon1 (статус: 1-ый класс), 29 декабря 2010, 20:45 [#17]:

да конечно)
7Ghost

7Ghost (статус: 1-ый класс), 29 декабря 2010, 20:55 [#18]:

В общем все будет происходить так если произошло событие опустить кнопку мыши) и держим ее зажатой то мы в блоке MouseMove а именно if b = true then происходит какое-то действие и в этом действии необходимо определить какую-нибудь точку например верхнего левого угла допустим вашей формы. Затем отталкиваясь от этой точки... Короче если указатель мыши по X увеличивает значение относительно значения X нашей точки то значит мы двигаем с лева на право! Если уменьшается в сторону X то значит с права на лево!! Тоже самое описать для Y и перерисовываем Canvas так как движутся наши Y и X. Если мы отпустили кнопку мыши то срабатывает b = false в MouseUp и ваши действия в MouseUp тоже прекращаются! Думаю все ясно?????
ierihon1

ierihon1 (статус: 1-ый класс), 29 декабря 2010, 20:59 [#19]:

ну пока попробую)) а дальше посмотрим)
7Ghost

7Ghost (статус: 1-ый класс), 29 декабря 2010, 21:02 [#20]:

Ну пробуйте конечно! Если что пишите в форум. Я также завтра посмотрю ваш исходник. Надеюсь вы не торопитесь с этим так сказать проетом, просто потому-что я сейчас в Алма-ате и здесь уже 12 часов ночи. Думаю что через 10 часов я буду снова в эфире ну а вам удачи конечно)

Страницы: [1] [2] [Следующая »]

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

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