Народ, нужно написать прогу, которая подсчитывает время нажатия клавиши. Сделать это нужно на дельфях. Подскажите какую-нибудь литературу где можно что-нибудь по этому поводу найти.
Страница 1 из 1
помогите с прогой Дельфи 7
#2
Отправлено 17 ноября 2005 - 09:24
Привет. Незнаю для чего тебе это надо и не уверен, что правильно тебя понял - нужно подсчитать время нажатия конкретной клавиши. Для этого надо ловить события OnKeyDown - нажали клавишу (стартанули счётчик), и OnKeyUp - отпустили клавишу (остановили счётчик) для соответствующего контрола. Если хочешь глобально перехватывать все сообщения программе, то (если мне не изменяет память) начиная с 6-ой версии есть специальный компонент, называется он ApplicationEvents, его событие OnMessage получает все сообщения для твоей программы (его применение добавит твоему exe-нику где-то 20 лишних кило(байт) и немного не видимых на глаз тормозов, лично мне нравится явно указывать процедуру, которая будет обрабатывать сообщения, без всяких VCL), не буду подробно описывать всю эту кухню, F1 тебе поможет, должно получиться нечто подобное (пишу без IDE, поэтому сразу прошу прощения за орф.ошибки, на форме должно быть ApplicationEvents и настроенный нужным тебе способом Timer):
Точность измерения приблизительная, но зато всё это должно работать да к тому же чистый паскаль. А так, в принципе поисковики тебе должны помочь, ищи что-то типа "обработка сообщений".
... //глобальные переменные, если надо где-то ещё в программе var Time_Press:Longint; //наш счётчик ... //где-то в программе procedure TfrmMain.ApplicationEvents1Message(var Msg: tagMSG;var Handled: Boolean); begin //ловим нажатие клавиши Esc (разумеется можешь ловить любую другую кнопку) if (Msg.Message = WM_KeyDown) and (Msg.wParam = VK_ESCAPE) then Timer.Enabled:=true; //проверка отпускания клавиши Esc if (Msg.Message = WM_KeyUp) and (Msg.wParam = VK_ESCAPE) then begin Timer.Enabled:=false; Application.ProcessMessages; //остановили счётчик // и делаем с переменной Time_Press что хотим, только потом не забудь его обнулить .... end; Handled := True; //отправили сообщение дальше (а ведь можно и не отправлять :) ) end; end; ... //а это обработчик событий от таймера procedure TfrmMain.Timer1Timer(Sender: TObject); begin inc(Time_Press); end;
Точность измерения приблизительная, но зато всё это должно работать да к тому же чистый паскаль. А так, в принципе поисковики тебе должны помочь, ищи что-то типа "обработка сообщений".
Страница 1 из 1