Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Object Pascal: кроссплатформенные технологии > Слежение за пользователем


Автор: COOLJohn 23.7.2006, 12:35
Можно ли задать компилятору такую команду, которая бы следила за пользователем в течение некоторого времени.
Например, если пользователь не нажмёт клавишу <Enter> в течение 5 секунд, то программа изобразит квадрат в граф. режиме, а если пользователь нажмёт соответствующую клавишу, то - круг.
 

Автор: volvo877 23.7.2006, 15:44
Код

uses crt, dos;

Function GetTime: LongInt;
Var h, m, s, ms: Word;
begin
  Dos.GetTime(h, m, s, ms);
  GetTime := ms + 100 * (s + 60 * (m + 60 * h));
end;

var
  b: boolean;
  start, finish: longint;

begin
  b := false;
  start := GetTime;
  repeat
    finish := gettime;
    if keypressed then begin
      b := true; break;
    end;
  until finish - start > 500;

  if b then writeln('Нажата кнопка в течении 5 секунд')
  else writeln('Кнопка не была нажата...');
end.

И производи нужные тебе действия ... 

Автор: COOLJohn 25.7.2006, 18:54
А если нужно нажать конкретную клавишу.
Например, при нажатии на кнопку <Enter> программа должна вывести на экран сообщение о сделаном действии, а если в течение 5 секунд  пользователь не нажал клавишу <Enter>, то программа должна вывести сообщение о том, что пользователь ничего не нажимал. 

Автор: volvo877 25.7.2006, 19:02
Код

uses crt, dos;
Function GetTime: LongInt;
Var h, m, s, ms: Word;
begin
  Dos.GetTime(h, m, s, ms);
  GetTime := ms + 100 * (s + 60 * (m + 60 * h));
end;
var
  b: boolean;
  start, finish: longint;
begin
  b := false;
  start := GetTime;
  repeat
    finish := gettime;
    if keypressed then { Если была нажата какая-то клавиша, }
      if readkey = #13 then begin { то проверяем ее на №13 (Enter) }
        b := true; break;
      end
      else { если не Enter, то очистить буфер }
        while keypressed do readkey;

  until finish - start > 500; { ждать 5 секунд }

  if b then writeln('Нажат ENTER в течении 5 секунд')
  else writeln('ENTER не был нажат...');
end.
 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)