Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как программируется удержание кнопки? / 5 сообщений из 5, страница 1 из 1
27.01.2004, 18:24
    #32389657
XAndy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как программируется удержание кнопки?
Уважаемые господа!

Может кто подскажет, каким образом на VFP8 программируется удержание кнопки для генерации некой последовательности операций. Похоже, нужно как-то использовать drag-and-drop события с частным случаем, когда источник и приемник - это один и тот-же объект?

Спасибо.
...
Рейтинг: 0 / 0
28.01.2004, 09:13
    #32390024
Hel!Riser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как программируется удержание кнопки?
ну есть событие o.MouseDown() кпримеру ;) а ч:е в конкрете нужна-то?
...
Рейтинг: 0 / 0
28.01.2004, 12:22
    #32390476
XAndy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как программируется удержание кнопки?
Непонятно, как отличить однократное нажатие кнопки от нажатия и удержания? Т.е. при однократном операция выполняется один раз, а при удержании по истечении какого-то timeout'а должна начать генериться последовательность операций. Как это делается?
...
Рейтинг: 0 / 0
28.01.2004, 12:36
    #32390511
Por
Por
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как программируется удержание кнопки?
В методе MouseDown() пишешь:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
with this
   .lMouseUp = .F.
   do while !.lMouseUp
       .MyActions()
       doevents
   enddo
endwith


B методе MouseUp() :
Код: plaintext
1.
this.lMouseUp = .T.
...
Рейтинг: 0 / 0
06.02.2004, 11:01
    #32400426
XAndy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как программируется удержание кнопки?
Нет, это не то. Я же говорю, нужна была интерактивная обработка, например для прокрутки списка. С таким-же успехом можно было в MouseDown() тупо:
Код: plaintext
1.
2.
   do while mdown()
      ...
   enddo


Я уже разобрался, как нужно делать. Раз уж завел топик, то и отвечу :)
Добавляем Timer. С однократным нажатием мыши понятно - обработку пишем в Click(). Дальше в MouseDown() устанавливаем стартовый интервал таймера, который должен быть больше системного для Click и включаем таймер:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
* Command.MouseDown()
lparameters nButton, nShift, nXCoord, nYCoord
if nButton= 1            && левая кнопка
   with this.Parent
      .Timer.Interval =  400     && ms
      .Timer.Enabled = TRUE
   endwith
endif


В MouseUp() выключаем таймер:
Код: plaintext
1.
2.
3.
4.
* Command.MouseUp()
lparameters nButton, nShift, nXCoord, nYCoord
if nButton= 1 
   this.Parent.Timer.Enabled = FALSE
endif


А в событии Timer() таймера выполняем нужное действие (то же, что и в Click), после чего переустанавливаем интервал таймера на существенно меньший и сбрасываем начало отсчета:
Код: plaintext
1.
2.
3.
* Timer.Timer()
&& ... здесь необходимый код
this.Interval =  50    && ms
this.Reset()


Таким образом, на обычное короткое нажатие срабатывает Click(), так как MouseUp() выключает таймер быстрее, чем исчерпывается интервал таймера. А при удержании кнопки срабатывает уже timer(), после чего начинает быстро выполняться нужное действие. При отпускании MouseUp() снова выключает таймер. Все прекрасно работает. Кстати, как правило на одной форме нужно обрабатывать удержание нескольких кнопок (если, скажем, прокрутка есть в одну сторону, то логично сделать и в обратную :) При этом можно обойтись одним таймером для всех кнопок, достаточно завести свойство, какая кнопка сейчас нажата и в MouseDown() каждой кнопки инициализировать его, тогда Timer() будет знать, обработку удержания какой именно кнопки ему выполнять.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как программируется удержание кнопки? / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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