Длительное нажатие button как осуществить?

275
23 января 2017, 19:27

среда разработки: RADstudio c++builder (разработка под android)

я вычитал что нужно сделать обработчик onClick и в нем уже проверять сколько времени была нажата button, это правильно? если нет то как нужно?

Если через события onkeydown и onkeyup, то как это сделать, не могу в голове представить

Answer 1

Назначаете обработчик на оба упомянутых вами события. При onkeydown запускаете таймер, у которого таймаут предварительно настроен на нужное время ожидания. Если событие таймаута произошло раньше, чем onkeyup, то выполняете нужные вам действия. Если произошло событие onkeyup, то отключаете таймер.

Answer 2

При нажатии получить текущее время и сохранить его в переменную. При отпускании снова получить текущее время и вычесть из него сохранённое ранее время нажатия. Полученная разница и будет равна продолжительности нажатия. Для удобства можно задействовать функции SecondsBetween, MillisecondsBetween (в зависимости от требуемой точности) из DateUtils:

#include <DateUtils.hpp>
TDateTime pressTime;
void __fastcall TForm1::ButtonMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, float X, float Y)
{
  pressTime = Now();  
}
void __fastcall TForm1::ButtonMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, float X, float Y)
{
  __int64 duration = MillisecondsBetween(Now(), pressTime);
  ShowMessage("Кнопка была нажата " + IntToStr(duration) + " миллисекунд");
}
READ ALSO
Undefined reference to member of class in library

Undefined reference to member of class in library

Итак, у меня есть 1 тестовое приложение и 1 библиотека, которая подключается к приложениюПроблема заключается в том, что, функции неопределенны,...

326
Какие отличия функций c++ от функций в c? [требует правки]

Какие отличия функций c++ от функций в c? [требует правки]

Какие отличия функций c++ от функций в c?

268
Программа на C++ . Метод последовательного перебора [требует правки]

Программа на C++ . Метод последовательного перебора [требует правки]

Помогите пожалуйста, прогорает экзаменсделать прогу на C++

580
cin и cin.get() ломают программу

cin и cin.get() ломают программу

Путем проб и ошибок я пришел тому что cin как то не закрывает поток или что еще и сразу заполняет "\n" следующее поле динамического массиваПодскажите...

420