Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
Безумец
48 / 48 / 12
Регистрация: 06.02.2014
Сообщений: 214
1

Разная логика на "нажатие" и "нажатие и удержание в течение 5 сек" кнопки

02.09.2015, 08:31. Показов 2127. Ответов 12
Метки нет (Все метки)

Здравствуйте. На форме кнопка. Требуется, чтобы при её нажатии выполнялась функция (выполнялась всегда, даже при зажатии кнопки). А при удержании кнопки (>5 сек) дополнительно выставлялся один флаг.

Не могу придумать как реализовать. Подскажите, если есть какие-то идеи
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.09.2015, 08:31
Ответы с готовыми решениями:

Как сделать так чтоб при нажатии кнопки "enter" происходило нажатие кнопки "button1" на форме
Пишу программу которая должна сложить числа по нажатии кнопки "button1". Подскажите, пожалуйста,...

При нажатии кнопки чтобы автоматически происходило нажатие клавиши "W"
Нужно чтобы при нажатии кнопки автоматически происходило нажатие клавиши "W".Как можно реализовать?

"Нажатие" кнопки на Web-странице
можно ли с помощью компонента IdHTTP нажать кнопку на Web-странице?

На экране расположены текст и две кнопки с надписями "красный" и "зеленый". Нажатие на эти кнопки приводит к соответствующему изменению цвета текста.
На экране расположены текст и две кнопки с надписями "красный" и "зеленый". Нажатие на эти кнопки...

12
Модератор
3478 / 2601 / 741
Регистрация: 19.09.2012
Сообщений: 7,967
02.09.2015, 09:15 2
Запускай таймер при нажатии.
При отпускании - выключай.
Таймер настрой на 5 сек. и пропиши в нем нужное действие.
0
5087 / 3967 / 1309
Регистрация: 14.04.2014
Сообщений: 18,258
Записей в блоге: 18
02.09.2015, 09:24 3
главная идея - OnMouseDown вместо OnClick
1
58 / 48 / 25
Регистрация: 17.12.2013
Сообщений: 221
02.09.2015, 09:46 4
вешай обработчики на кнопку
OnMouseDown - Запуск таймера 5 сек
OnMouseUp - остановка таймера и все, что должно быть в OnClick
OnMouseLeave - остановка таймера
1
Модератор
3478 / 2601 / 741
Регистрация: 19.09.2012
Сообщений: 7,967
02.09.2015, 09:59 5
Цитата Сообщение от KMSNasgool Посмотреть сообщение
OnMouseLeave - остановка таймера
OnMouseLeave не сработает при нажатой ЛКМ.
1
58 / 48 / 25
Регистрация: 17.12.2013
Сообщений: 221
02.09.2015, 10:12 6
Цитата Сообщение от FIL Посмотреть сообщение
OnMouseLeave не сработает при нажатой ЛКМ.
Спасибо, не знал.
Тогда сложнее, на онмаусмуви с отслеживанием координат
0
Модератор
3478 / 2601 / 741
Регистрация: 19.09.2012
Сообщений: 7,967
02.09.2015, 11:09 7
Цитата Сообщение от KMSNasgool Посмотреть сообщение
Тогда сложнее, на онмаусмуви с отслеживанием координат
Зачем? Если кнопка нажата, то Винда считает ее нажатой вне зависимости от того, куда переместится указатель мыши и потом в любом случае сработает OnMouseUp.
0
Безумец
48 / 48 / 12
Регистрация: 06.02.2014
Сообщений: 214
02.09.2015, 11:30  [ТС] 8
Спасибо. Сделал с таймером. ток чет не работает. Сейчас ищу почему
0
Модератор
8685 / 4339 / 2979
Регистрация: 17.08.2012
Сообщений: 13,808
04.09.2015, 14:31 9
Лучший ответ Сообщение было отмечено mrtmaxxx как решение

Решение

Цитата Сообщение от mrtmaxxx Посмотреть сообщение
ток чет не работает
Есть одна тонкость. Событие OnMouseUp срабатывает однократно, при отпускании кнопки мыши, а вот событие OnMouseDown срабатывает многократно, с некоторым весьма малым периодом, до тех пор, пока клавиша мыши нажата. И, если запуск таймера расположен в TForm1.Button1MouseDown, то он будет постоянно перезапускаться (иными словами - сбрасывать счёт на 0), и ну никак не сможет отсчитать 5 секунд. Решение "в лоб": использование дополнительной глобальной переменной. Пример:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
var
  Form1: TForm1;
  b_down: boolean = false;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if b_down
    then exit
    else begin
      b_down := true;
      Timer1.Enabled := true;
      Label1.Caption := 'Down';
      Label2.Caption := '> 0'
    end
end;
 
procedure TForm1.Button1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  b_down := false;
  if Timer1.Enabled then Label2.Caption := '< 5';
  Timer1.Enabled := false;
  Label1.Caption := 'Up'
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Timer1.Enabled := false;
  Label2.Caption := '= 5';
end;
1
Модератор
3478 / 2601 / 741
Регистрация: 19.09.2012
Сообщений: 7,967
04.09.2015, 14:38 10
Цитата Сообщение от Cyborg Drone Посмотреть сообщение
событие OnMouseDown срабатывает многократно
Чего?..
0
Модератор
8685 / 4339 / 2979
Регистрация: 17.08.2012
Сообщений: 13,808
04.09.2015, 15:31 11
Хм... Откуда у меня взялась стойкая уверенность, что OnMouseDown срабатывает многократно? Причём энграмма капитальная, ну просто прям на 100% был уверен, что это так и есть... Есть какие-нибудь предположения насчёт этой ошибки в моём мозге? Теперь вот буду мучиться и вспоминать, с какого перепуга я пришёл к столь неверному выводу...
0
Модератор
3478 / 2601 / 741
Регистрация: 19.09.2012
Сообщений: 7,967
04.09.2015, 16:32 12
Цитата Сообщение от Cyborg Drone Посмотреть сообщение
Откуда у меня взялась стойкая уверенность
Даже не знаю... Может с OnKeyDown спутал?
0
Модератор
8685 / 4339 / 2979
Регистрация: 17.08.2012
Сообщений: 13,808
04.09.2015, 16:39 13
FIL, точно!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.09.2015, 16:39

Нажатие кнопки alt вызывает команду "дублировать" или "копировать". Как это исправить?
Доброго времени суток! У меня такая проблема: при нажатии клавиши alt выполняется команда,...

Элемент "Вкладки". Не работает событие "нажатие кнопки"
Элемент &quot;Вкладки&quot;. Не работает событие &quot;нажатие кнопки&quot;. В чём может быть проблема?

Как разграничить события нажатия и "перетаскивания" (нажатие и удержание)?
Здравствуйте ! Возьмем к примеру, CommandButton. Хочу уметь перетаскивать форму, удерживая...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru