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

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

например.
...
Рейтинг: 0 / 0
Перемещать Image
    #37866162
Фотография 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
Перемещать Image
    #37866165
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,

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

ЗЫ: Я в первом посте ответил на второй его вопрос, а не на первый, это я не указал, виноват
...
Рейтинг: 0 / 0
Перемещать Image
    #37866233
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Перемещать Image
    #37866253
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, понял. Если нажать мышкой вне image и начать движение, он подтянется к курсору, а форма продолжит получать MouseMove. Если же по Image, то не работает.
...
Рейтинг: 0 / 0
Перемещать Image
    #37866254
Я пока только до этого додумался. Но что делать если линия ломаня будет и с петлями и если Image утащить ниже линии - не знаю.
...
Рейтинг: 0 / 0
Перемещать Image
    #37866283
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но что делать если линия ломаня будет и с петлямиДелить на участки, каждый участок это график отдельной функции. В каждом участке (или в нескольких, если они пересекаются) вычисляются координаты пересечения нормали к графику функции и ее длина (от курсора до пересечения). Какая нормаль оказалась короче, к тому пересечению и лепим image.
...
Рейтинг: 0 / 0
Перемещать Image
    #37866284
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так ты делай нужные расчеты не в MouseUp, а в MouseMove
...
Рейтинг: 0 / 0
Перемещать Image
    #37866298
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я пока только до этого додумался.Это тупик. Нужно сабклассить форму, без этого после захвата image mouse-событий на форме не дождешься. Там же можно ограничить перемещения самого курсора, не только image. В стандартной vb-модели событий этого не сделаешь без дёрганий.
...
Рейтинг: 0 / 0
Перемещать Image
    #37866313
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyЭто тупик. Нужно сабклассить формуДа нафига? Надо просто отслеживать события не на форме, а на Image1
...
Рейтинг: 0 / 0
Перемещать Image
    #37866331
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProAntonariyЭто тупик. Нужно сабклассить формуДа нафига? Надо просто отслеживать события не на форме, а на Image1Какие?
...
Рейтинг: 0 / 0
Перемещать Image
    #37866354
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
все те же - MouseDown, MouseMove, MouseUp.
...
Рейтинг: 0 / 0
Перемещать Image
    #37866382
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Перемещать Image
    #37866385
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поправочка.
Код: vbnet
1.
2.
    Source.Left = X - (Source.Width / 2)
    Source.Top = Y - (Source.Height / 2)
...
Рейтинг: 0 / 0
Перемещать Image
    #37866387
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyAntonariyНужно сабклассить форму, без этого после захвата image mouse-событий на форме не дождешься .
Какое из выделенных слов не понятно?А зачем мне захватывать Mouse-события на форме? Задача стоит - таскать Image и именно событиями Image все и ограничится
...
Рейтинг: 0 / 0
Перемещать Image
    #37866402
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProА зачем мне захватывать Mouse-события на форме? Задача стоит - таскать Image и именно событиями Image все и ограничитсяОк. Как определишь текущие координаты курсора относительно формы?
...
Рейтинг: 0 / 0
Перемещать Image
    #37866409
AntonariyКак определишь текущие координаты курсора относительно формы?
Да с этим как раз и засада у меня сейчас.
...
Рейтинг: 0 / 0
Перемещать Image
    #37866410
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyShocker.ProА зачем мне захватывать Mouse-события на форме? Задача стоит - таскать Image и именно событиями Image все и ограничитсяОк. Как определишь текущие координаты курсора относительно формы?А мне они не нужны )
...
Рейтинг: 0 / 0
Перемещать Image
    #37866428
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProAntonariyпропущено...
Ок. Как определишь текущие координаты курсора относительно формы?А мне они не нужны )я посмотрел алгоритм, да, теоретически там есть недостаток, если мышь двинется так резко, что выскочит за пределы Image, то Image "потеряется". Но практически обходилось только движением мыши внутри объекта, никто не разу не жаловался
...
Рейтинг: 0 / 0
Перемещать Image
    #37866458
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProAntonariyпропущено...
Ок. Как определишь текущие координаты курсора относительно формы?А мне они не нужны )Показывай.
...
Рейтинг: 0 / 0
25 сообщений из 32, страница 1 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Перемещать Image
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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