Перетаскивание мышью...

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Стёпка
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 12.08.2004 (Чт) 4:14

Перетаскивание мышью...

Сообщение Стёпка » 14.09.2004 (Вт) 13:30

Например лайнами на форме нарисован прямоугольник...Как сделать так, чтобы при нажатии и удерживании кнопки мыши в пределах прямоугольника его можно было преретаскивать?...

ZlydenGL
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 148
Зарегистрирован: 13.08.2004 (Пт) 10:02

Сообщение ZlydenGL » 14.09.2004 (Вт) 13:50

Ловишь событие OnMouseDown. Затем отрабатываешь события OnMouseMove чтобы переместить прямоугольник и OnMouseUP чтобы завершить перемещение.

Код: Выделить всё
Dim msDown as Boolean, prevX as Integer, prevY as Integer

Private Sub Rect1_mouseDown(smth)
msDown = True
prevX= X ' записываешь координату Х мыши
prevY= Y ' записываешь координату У мыши
End Sub

Private Sub Rect1_mouseUp(smth)
msDown = False
End Sub

Private Sub Rect1_mouseMove(smth)
Rect1.Left = Rect1.Left + (X - prevX) ' Х - новая абсцисса курсора мыши
Rect1.Top = =Rect1.Top + (Y - prevY) ' У - новая ордината курсора мыши
prevX = X
prevY = Y
End Sub


Надо только растянуть события на несколько объектов Line, вместо процедуры Rect1_MouseDown использовать Form1_MouseDown и проверять координаты мыши по отношению к объектам Line. Или еще проще - написать свой контрол и в нем определить все необходимые события - и практика будет, и интересно, и довольно просто (по себе знаю)
Покой нам только снится!!! И то редко. Поскольку нет в мире совершенства, а есть только стремление к оному.

Стёпка
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 12.08.2004 (Чт) 4:14

Сообщение Стёпка » 15.09.2004 (Ср) 5:00

Да чтобы свой контрол писать времени у меня нет...А так что-то не работает твой пример...Т.е. вроде всё правильно, а никакой реакции на нажитае мыши...

ZlydenGL
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 148
Зарегистрирован: 13.08.2004 (Пт) 10:02

Сообщение ZlydenGL » 15.09.2004 (Ср) 8:15

Я тоже раньше так думал :) А после написания (занявшего от силы минут 10) понял насколько сильно заблуждался ;) В любом случае - ты ловишь клик чем, прямоугольником или формой? Клик обрабатывается? Переменные меняют свое значение?
Покой нам только снится!!! И то редко. Поскольку нет в мире совершенства, а есть только стремление к оному.

Стёпка
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 12.08.2004 (Чт) 4:14

Сообщение Стёпка » 15.09.2004 (Ср) 8:24

Я ловлю клик прямоугольником...Точнее пытаюсь...)))))))....Рекции на это никакой....Т.е. дальше события создания прямоугольника дело не идёт...

ZlydenGL
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 148
Зарегистрирован: 13.08.2004 (Пт) 10:02

Сообщение ZlydenGL » 15.09.2004 (Ср) 8:31

Ладно, чем прямоугольник рисуешь? Все также 4 объекта Line? Или Shape?
Покой нам только снится!!! И то редко. Поскольку нет в мире совершенства, а есть только стремление к оному.

Стёпка
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 12.08.2004 (Чт) 4:14

Сообщение Стёпка » 15.09.2004 (Ср) 8:39

Да я уже и лайнами пробовал и шейпом...Реакция одинакова..)))...Пытался даже анналогично перетаскиванию пикчербокса сделать...Но с ним то проще...А так не выходит нифига...

ZlydenGL
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 148
Зарегистрирован: 13.08.2004 (Пт) 10:02

Сообщение ZlydenGL » 15.09.2004 (Ср) 9:09

А координаты чем конвертишь? Посмотри в дебаг моде, какие у тебя получаются координаты мыши допустим и координаты лайнов. Очень удивишься :) В общем, изучай GetCursorPos (фукция API), и получай координаты лайнов как сумма лайн.топ+форм1.топ
Покой нам только снится!!! И то редко. Поскольку нет в мире совершенства, а есть только стремление к оному.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 15.09.2004 (Ср) 9:11

Посмотри мой пример "таскание линии", может поможет :-)
http://groups.google.com/groups?selm=20 ... put=gplain
Изображение

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 15.09.2004 (Ср) 9:13

ZlydenGL писал(а):получай координаты лайнов как сумма лайн.топ+форм1.топ

Это если считать, что окно без рамки и без заголовка.
Изображение

Стёпка
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 12.08.2004 (Чт) 4:14

Сообщение Стёпка » 15.09.2004 (Ср) 11:05

Пасиба товарисчи!!!...Вы мне оч помогли!!!...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 15.09.2004 (Ср) 11:30

Есть один кустарный, но довольно надежный способ для определения координат клиентской области.
Код: Выделить всё
'ScaleMode = vbTwips
'Ширина рамки окна
BS = (Form.Width - Form.ScaleWidth)/2
'Высота заголовка (+строка меню)
TS = (Form.Height - Form.ScaleHeight) - 2*BS
'Координаты контрола относительно координат экрана
Y = Screen.TwipsPerPixelY*50 - Form.Top + BS + TS + Y0
X = Screen.TwipsPerPixelX*50 - Form.Left + BS + X0

А вообще, конечно есть API, преобразующее координаты диалогового окна в координаты экрана.
Lasciate ogni speranza, voi ch'entrate.

kazah_
Обычный пользователь
Обычный пользователь
 
Сообщения: 99
Зарегистрирован: 13.01.2003 (Пн) 18:37
Откуда: Russia

Сообщение kazah_ » 15.09.2004 (Ср) 19:07

есть много чего хоршего ну лучше использовать
shape1
.width
.top
.left
.height
Mr DEN - THE WAY YOU KNOW / Мр. ДЕН - Ваш Путь к Познанию!

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 15.09.2004 (Ср) 19:28

kazah_, у Shape нет событий => это ничуть не лучше.
Изображение


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 148

    TopList