Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Перемещать Image / 25 сообщений из 32, страница 1 из 2
04.07.2012, 13:47
    #37865994
Перемещать Image
Подскажите как сделать что бы Image можно было перемещать только по линии? И как вообще таскать Image мышкой?
...
Рейтинг: 0 / 0
04.07.2012, 13:55
    #37866009
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещать Image
На MouseDown на этом Image запоминать текущие координаты
На MouseMove изменять координаты Image в соответствии с разницей изменения координат мыши относительно MouseDown
На MouseUp прекращать обработку
...
Рейтинг: 0 / 0
04.07.2012, 14:08
    #37866031
Перемещать Image
Shocker.Pro,

Спасибо. Сделал.
А как сделать чтобы только по линии перемещать?
...
Рейтинг: 0 / 0
04.07.2012, 14:16
    #37866048
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещать Image
Чистая математика. Координаты после вычисления надо приводить к координатам линии. То есть мы знаем - линия проходит по координатам 1:1, 2:2, 3:3, 4:4. А мышь выдала координаты 6:8. Приводим их к 6:6.

например.
...
Рейтинг: 0 / 0
04.07.2012, 15:18
    #37866162
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещать Image
Перемещать ImageСпасибо. Сделал.Проверил хоть? Этот код
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then
Image1.Left = X - (Image1.Width / 2)
Image1.Top = Y - (Image1.Height / 2)

End If
End Sub

никогда не сработает. Курсор все время будет над Image, а не над формой.
...
Рейтинг: 0 / 0
04.07.2012, 15:19
    #37866165
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещать Image
Antonariy,

Я проверил. Работает. )
...
Рейтинг: 0 / 0
04.07.2012, 15:23
    #37866179
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещать Image
Image ползает исключительно вдоль линии? Его невозможно утащить в сторону?
Не верю, проект в студию.
...
Рейтинг: 0 / 0
04.07.2012, 15:26
    #37866184
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещать Image
AntonariyImage ползает исключительно вдоль линии?Нет, читай топик сначала. Пока автор сделал (какой молодец без лишних глупых вопросов) движение за мышью. Теперь он думает над тем, как сделать вдоль линии.

ЗЫ: Я в первом посте ответил на второй его вопрос, а не на первый, это я не указал, виноват
...
Рейтинг: 0 / 0
04.07.2012, 15:45
    #37866233
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещать Image
AntonariyПеремещать ImageСпасибо. Сделал.Проверил хоть? Этот код
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then
Image1.Left = X - (Image1.Width / 2)
Image1.Top = Y - (Image1.Height / 2)

End If
End Sub

никогда не сработает. Курсор все время будет над Image, а не над формой.А вообще-то работает.
Нипонял...

Хотя это можно и без кода сделать.
...
Рейтинг: 0 / 0
04.07.2012, 15:53
    #37866253
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещать Image
А, понял. Если нажать мышкой вне image и начать движение, он подтянется к курсору, а форма продолжит получать MouseMove. Если же по Image, то не работает.
...
Рейтинг: 0 / 0
04.07.2012, 15:53
    #37866254
Перемещать Image
Я пока только до этого додумался. Но что делать если линия ломаня будет и с петлями и если Image утащить ниже линии - не знаю.
...
Рейтинг: 0 / 0
04.07.2012, 16:04
    #37866283
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещать Image
Но что делать если линия ломаня будет и с петлямиДелить на участки, каждый участок это график отдельной функции. В каждом участке (или в нескольких, если они пересекаются) вычисляются координаты пересечения нормали к графику функции и ее длина (от курсора до пересечения). Какая нормаль оказалась короче, к тому пересечению и лепим image.
...
Рейтинг: 0 / 0
04.07.2012, 16:05
    #37866284
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещать Image
Так ты делай нужные расчеты не в MouseUp, а в MouseMove
...
Рейтинг: 0 / 0
04.07.2012, 16:11
    #37866298
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещать Image
Я пока только до этого додумался.Это тупик. Нужно сабклассить форму, без этого после захвата image mouse-событий на форме не дождешься. Там же можно ограничить перемещения самого курсора, не только image. В стандартной vb-модели событий этого не сделаешь без дёрганий.
...
Рейтинг: 0 / 0
04.07.2012, 16:18
    #37866313
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещать Image
AntonariyЭто тупик. Нужно сабклассить формуДа нафига? Надо просто отслеживать события не на форме, а на Image1
...
Рейтинг: 0 / 0
04.07.2012, 16:24
    #37866331
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещать Image
Shocker.ProAntonariyЭто тупик. Нужно сабклассить формуДа нафига? Надо просто отслеживать события не на форме, а на Image1Какие?
...
Рейтинг: 0 / 0
04.07.2012, 16:35
    #37866354
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещать Image
все те же - MouseDown, MouseMove, MouseUp.
...
Рейтинг: 0 / 0
04.07.2012, 16:49
    #37866382
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещать Image
Shocker.Proвсе те же - MouseDown, MouseMove, MouseUp.AntonariyНужно сабклассить форму, без этого после захвата image mouse-событий на форме не дождешься .
Какое из выделенных слов не понятно?

Сабклассить, впрочем, не обязательно, но желательно. Вот минимальный рабочий вариант:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Option Explicit

Private Sub Form_DragDrop(Source As Control, X As Single, Y As Single)
    Source.Left = X - (Image1.Width / 2)
    Source.Top = Y - (Image1.Height / 2)
End Sub

Private Sub Form_Load()
    Me.Line (10, 10)-(600, 600), vbBlack
    Image1.Left = 10
    Image1.Top = 10
    
    Image1.DragMode = vbAutomatic
End Sub
...
Рейтинг: 0 / 0
04.07.2012, 16:50
    #37866385
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещать Image
Поправочка.
Код: vbnet
1.
2.
    Source.Left = X - (Source.Width / 2)
    Source.Top = Y - (Source.Height / 2)
...
Рейтинг: 0 / 0
04.07.2012, 16:53
    #37866387
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещать Image
AntonariyAntonariyНужно сабклассить форму, без этого после захвата image mouse-событий на форме не дождешься .
Какое из выделенных слов не понятно?А зачем мне захватывать Mouse-события на форме? Задача стоит - таскать Image и именно событиями Image все и ограничится
...
Рейтинг: 0 / 0
04.07.2012, 16:58
    #37866402
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещать Image
Shocker.ProА зачем мне захватывать Mouse-события на форме? Задача стоит - таскать Image и именно событиями Image все и ограничитсяОк. Как определишь текущие координаты курсора относительно формы?
...
Рейтинг: 0 / 0
04.07.2012, 17:02
    #37866409
Перемещать Image
AntonariyКак определишь текущие координаты курсора относительно формы?
Да с этим как раз и засада у меня сейчас.
...
Рейтинг: 0 / 0
04.07.2012, 17:02
    #37866410
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещать Image
AntonariyShocker.ProА зачем мне захватывать Mouse-события на форме? Задача стоит - таскать Image и именно событиями Image все и ограничитсяОк. Как определишь текущие координаты курсора относительно формы?А мне они не нужны )
...
Рейтинг: 0 / 0
04.07.2012, 17:09
    #37866428
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещать Image
Shocker.ProAntonariyпропущено...
Ок. Как определишь текущие координаты курсора относительно формы?А мне они не нужны )я посмотрел алгоритм, да, теоретически там есть недостаток, если мышь двинется так резко, что выскочит за пределы Image, то Image "потеряется". Но практически обходилось только движением мыши внутри объекта, никто не разу не жаловался
...
Рейтинг: 0 / 0
04.07.2012, 17:30
    #37866458
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещать Image
Shocker.ProAntonariyпропущено...
Ок. Как определишь текущие координаты курсора относительно формы?А мне они не нужны )Показывай.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Перемещать Image / 25 сообщений из 32, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]