Разделить _Click и _MouseDown/MouseUp

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

Разделить _Click и _MouseDown/MouseUp

Сообщение Dummiel » 13.06.2006 (Вт) 13:54

Здравствуйте!

Событие Object_Click состоит из двух: Object_MouseDown и Object_MouseUp. Соответствующие и процедуры. Надеюсь, я прав.

Как сделать, чтобы по ЩЕЛЧКУ (кратковременному) ЛЕВОЙ (!!!) кнопкой на объекте выполнялась процедура Object_Click(), при MouseDown и MouseUp ПРАВОЙ кнопкой выполнялись соответственно Object_MouseDown() и Object_MouseUp()?

В проекте в массиве объектов Image по щелчку ЛЕВОЙ кнопкой по одному из них он становится активным (правильно, нет сказал?), т.е. в процедуре Object_Click() обрабатывается индекс объекта, затем на нем же нужно нажать и удерживать несколько секунд ПРАВУЮ кнопку, в это время выполняется Object_MouseDown(), которая
включает счетчик времени, потом отпустить кнопку, после чего выполняется Object_MouseUp(), которая сохраняет значение счетчика в соответствующей ТОЛЬКО ЭТОМУ элементу массива Image переменной. Левая и правая кнопки нажимаются НЕ одновременно.

При повторных действиях нужно, чтобы все повторялось для следующего по очереди объекта, не передвигая курсор
(для удобства юзера) пока не будут пройдены все объекты. Я столкнулся с тем, что при выполнении щелчка все получается,
но, если оставить курсор на прежнем объекте, и при длительном удержании правой кнопки на следующем в массиве Image
выполняется не _MouseDown() и _MouseUp() для него, а _Click() для предыдущего, и он становится снова "активным", и для него сохраняется время нажатия правой кнопки на последующем.

Когда курсор не находится на объекте Image, все выполняется как нельзя лучше.

В _Click() нужно распознать, какая клавиша нажата? Типа -

IF левая кнопка then
делаем активным объект Image
ELSE
_MouseUp()
EXIT SUB
END IF

Или не так?

Хотел делать различия по номеру нажатой кнопки, но в процедуре _Click() есть только индекс объекта, и не распознается, какая кнопка нажата - левая или правая, как в процедурах _MouseDown() и _MouseUp()?

Короче, вусмерть запутался.

С уважением - Dummiel

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

Сообщение alibek » 13.06.2006 (Вт) 14:20

А чем не устраивает Is Button=1 внутри MouseUp?
Lasciate ogni speranza, voi ch'entrate.

Конь
Постоялец
Постоялец
 
Сообщения: 650
Зарегистрирован: 02.06.2006 (Пт) 6:49
Откуда: г. Красноярск

Сообщение Конь » 13.06.2006 (Вт) 14:21

Короче так. Действие, которое тебе нужно выполнять при нажатии левой кнопки, засовывай в MouseUp
А для правой кнопки - в MouseDown.
(If левая/правая кнопка Then действие)

Эти процедуры обрабатываются так:
Нажимаешь кнопку - MouseDown
Отпускаешь - MouseUp, а потом Click

В Click распознать, какой клавишей ты кликал, нельзя. Это делается только в MouseUp и MouseDown.
Подпись находится в стадии разработки...

Конь
Постоялец
Постоялец
 
Сообщения: 650
Зарегистрирован: 02.06.2006 (Пт) 6:49
Откуда: г. Красноярск

Сообщение Конь » 13.06.2006 (Вт) 14:22

alibek
Не Is, а If :)
Подпись находится в стадии разработки...

Dummiel
Бывалый
Бывалый
 
Сообщения: 235
Зарегистрирован: 11.06.2004 (Пт) 9:15
Откуда: Алтай

Сообщение Dummiel » 19.06.2006 (Пн) 14:11

Хай, други мои! Прошу прощения за длительное отсутствие.

Все, что вы ответили, вроде как и известно (не хочу никого обидеть). Может, я опять тупо объяснил?

Смысл вопроса: почему при нажатии-удержании 3-5 сек-отпускании клавиши мыши (хоть левой, хоть правой) на объекте Image VB отрабатывает Image_Click(), (как если бы я кликнул на нем) а не отдельно Mouse_Down(), Mouse_Up? И как добиться, чтобы он отрабатывал их отдельно?

НЕ бейте, если что опять не так. :oops:

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 19.06.2006 (Пн) 14:19

To Dummiel
Напиши в событиях:
_Click() -> Debug.print "Click"
_MouseDown(...) -> Debug.print Button
_MouseUp(...) -> Debug.print Button
и покликай по своему имиджу...
Никогда не откладывай на завтра то, что можно ... отложить на послезавтра!

Dummiel
Бывалый
Бывалый
 
Сообщения: 235
Зарегистрирован: 11.06.2004 (Пт) 9:15
Откуда: Алтай

Сообщение Dummiel » 24.06.2006 (Сб) 8:03

ПребА-А-Альшущее спасибо за последнюю подсказку. :D
Оказывается, что Click все равно отрабатывается, сколько бы не держал клавишу над объектом.

Ларчик-то просто открывался:

В _MouseDown(), там, где проверка на правую клавишу выставил Flag = True, а в Click проверка - If Flag Then Exit Sub: Flag = False

И все, в общем-то!


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 62

    TopList