Форум Кумертау-City.ru: помогите с прогой - Форум Кумертау-City.ru

Перейти к содержимому

Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

помогите с прогой Дельфи 7 Оценка: -----

#1 Пользователь офлайн   Spartian 

  • Новичок
  • Pip
  • Вставить ник
  • Цитировать
  • Группа: Участник
  • Сообщений: 1
  • Регистрация: 16 November 05
  • Репутация: 0

Отправлено 16 November 2005 - 02:58

Народ, нужно написать прогу, которая подсчитывает время нажатия клавиши. Сделать это нужно на дельфях. Подскажите какую-нибудь литературу где можно что-нибудь по этому поводу найти.
  • +
  • 0

#2 Пользователь офлайн   mew 

  • Участник
  • PipPipPip
  • Вставить ник
  • Цитировать
  • Группа: Участник
  • Сообщений: 176
  • Регистрация: 08 July 05
  • Репутация: 0

Отправлено 17 November 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;

Точность измерения приблизительная, но зато всё это должно работать да к тому же чистый паскаль. А так, в принципе поисковики тебе должны помочь, ищи что-то типа "обработка сообщений".
  • +
  • 0

#3 Пользователь офлайн   APXi 

  • Активный участник
  • PipPipPipPip
  • Вставить ник
  • Цитировать
  • Группа: Участник
  • Сообщений: 342
  • Регистрация: 10 November 03
  • Репутация: 9

Отправлено 20 November 2005 - 00:37

Вместо таймера используй GetTickCount() и переводи в секунды.
  • +
  • 0

Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых