Помощь - Поиск - Пользователи - Календарь
Полная версия: Помогите написать бильярд
Форум «Всё о Паскале» > Pascal, Object Pascal > Написание игр
Nezhny_Vampir
Пишу бильярд.
Нужно узнавать, сколько времени была нажита клавиша (пробел).

Помогите, а то я не знаю, как перехватывать прерывания.
(В архиве ничего толком не нашел mad.gif )
volvo
Я ж дал тебе ссылку! Ты там читал? Что "толком" тебе надо? Готовый код? А вопрос ты где разместил? В Теоретических? Сам виноват...
volvo
Цитата(Nezhny_Vampir @ 10.02.2006 19:39) *
Нужно узнавать, сколько времени была нажита клавиша (пробел)...
а то я не знаю, как перехватывать прерывания.

Вот так:
uses dos, crt;
var
lastscan, scan: byte;
old_09h: pointer;

space_pressed, space_released: boolean;

{$f+}
procedure new_int_09h; interrupt;
begin
scan := port[$60];
inline($ff/ $1e/ >old_09h);
end;
{$f-}

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

var
T, T2: longint;

begin
getintvec($09, old_09h);
setintvec($09, @new_int_09h);

space_pressed := false;
space_released := false;

scan := 128;
writeln('press ESC to exit...');

repeat
if not space_pressed then
repeat until scan < 128;

if scan = $39 then begin
T := gettime;
repeat until scan > 128;
T2 := gettime;
writeln('time = ', (T2 - T):15);
end;

while keypressed do readkey;

lastscan := scan; scan := 128;
until lastscan = 1;

setintvec($09, old_09h);
end.

Жмешь пробел, держишь его... Потом отпускаешь, и смотришь, сколько он был нажат. Для выхода - Escape...
Nezhny_Vampir
СПАСИБО!!!
smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.