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

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

Спасибо.
...
Рейтинг: 0 / 0
Как программируется удержание кнопки?
    #32390024
Фотография Hel!Riser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну есть событие o.MouseDown() кпримеру ;) а ч:е в конкрете нужна-то?
...
Рейтинг: 0 / 0
Как программируется удержание кнопки?
    #32390476
XAndy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Непонятно, как отличить однократное нажатие кнопки от нажатия и удержания? Т.е. при однократном операция выполняется один раз, а при удержании по истечении какого-то timeout'а должна начать генериться последовательность операций. Как это делается?
...
Рейтинг: 0 / 0
Как программируется удержание кнопки?
    #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
Как программируется удержание кнопки?
    #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
5 сообщений из 5, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как программируется удержание кнопки?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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