APAL, не согласен с вами, так не проще.
ДенисС, этот метод как раз использует функция keypressed (определяет нажата ли клавиша)
Вот тестовая программа, которая позволяет узнать сканкоды всех клавиш:
Код
uses dos;
var
scancod:word;
begin
repeat
If port[$60]<$80 then
begin
scancod:=port[$60];
mem[0:$41C]:=mem[0:$41A]; {очистка}
writeln(scancod)
end
until scancod=1;
end.
а вот эта более продвинутая программа:
Код
uses dos,crt;
var
scancod:word;
begin
clrscr;
repeat
If port[$60]<$80 then
begin
scancod:=port[$60];
mem[0:$41C]:=mem[0:$41A]; {®зЁбвЄ }
writeln(scancod);
port[$60]:=$80;
end;
If (scancod<>1) and (scancod<>0) then begin port[$60]:=$80; scancod:=0 end;
until scancod=1;
end.
Итак обращаясь к порту $60 мы можем не только определить нажата ли клавиша, но и (что гораздо важнее) определить нажатую клавишу!
в этих программах код клавиш - scancod .
Вот примеры сканкодов:
ESC =1
ENTER=28
SPASE=57
1=2 (клавиша 1 имеет код 2 )
n=n+1(клавиша n имеет код n+1, например 3-код4)
q=16
... (клавиши левее на 1 больше)
p=25 и т.д
--------------------------------
преимущества использования конструкции PORT[$60]
1) выигрыш в скорости:
keypressed использует тоже обращение к портам,
keypressed лежит в модуле CRT ---> компилируется с типом FAR --> задержка на несколько милисекунд, и занимает лишний байт!!!!!!
2) можно использовать не только как keypressed но и как readkey (2 в 1)
3) не надо мучаться с кодировками, все клавиши пронумерованны на всех компах одинаково
------------------------------
какие будут вопросики B)