Исходник программы вывода меню - Всё понятно за исключением этого:
begin fk:=False; ch:=ReadKey; if ch = #0 then begin fk:=True; ch:=ReadKey; end; if fk then begin Case ord(ch) of 72:key := Up; 80:key := Down; end; end; if not fk then begin Case ord(ch) of 13:key := ReturnKey; 27:key := Escape; end; end;
а имменно ожидание нажатия клавиши, проверка с каким-то нулевым символом ( #0 ) и снова ожидание нажатия клавиши.. хотя в работе в работе программы нажатие клавиши ожидаеться только 1раз а не 2. и что за символл этот такой #0 (NULL) =)
TarasBer
31.05.2010 18:16
Некоторые клавиши посылают в клавиатурный буфер сразу два символа, причём тогда первый из них - нулевой (а если не нулевой, то значит, это одиночный символ). Просто тип char может принимать только 256 значений, и почти все забиты алфавитом и псевдографикой, для некоторых кнопок символа не хватило. Поэтому пришлось делать по два символа.
deity
31.05.2010 18:26
мм.. т.е "вверх" и "вниз" посылают 2символа в буффер , а ентер и esc 1, при нажатии на них.. P.S: и как же повторное ожидание (до и после проверки) ch:=ReadKey при нажатии на стрелки (хотя мы нажимаем 1 раз а не два ?)
TarasBer
31.05.2010 18:38
> мм.. т.е "вверх" и "вниз" посылают 2символа в буффер , а ентер и esc 1, при нажатии на них..
Да.
> PS: и как же повторное ожидание (до и после проверки) ch:=ReadKey при нажатии на стрелки (хотя мы нажимаем 1 раз а не два ?)
Нет повторного ожидания. Просто ReadKey берёт верхний символ из буфера (если он не пуст). Если буфер пуст - вот тогда ожидание. Стрелочки посылают по два символа в буфер, поэтому ожидать ничего не надо, надо два раза взять символ из буфера.
volvo
31.05.2010 19:01
Это кривой
Цитата
Исходник программы вывода меню -
Потому что читать невозможно. Сравни:
ch := ReadKey; Case ch Of #0: { Расширенная клавиша? } begin ch := ReadKey; Case ch Of #72: key := Up; #80: key := Down; end; end; { Закончили с расширенными клавишами }