Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.03.2009, 21:25   #11
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а ещё можно использовать такую функцию (crt при этом не нужен... ;-)

Код:
function ReadKeyWord : word; assembler;
asm
      mov ah,0h
      int 16h
      ret
end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.03.2009, 07:51   #12
OCTAGRAM
Oldschool geek
Форумчанин
 
Аватар для OCTAGRAM
 
Регистрация: 09.03.2009
Сообщений: 611
По умолчанию

А отсутствие CRT нужно?
If you want to get to the top, you have to start at the bottom

http://pascal.net.ru/
OCTAGRAM вне форума Ответить с цитированием
Старый 26.03.2009, 09:11   #13
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
А отсутствие CRT нужно?
да это не главное преимущество данной функции. (тем более, что в проекте, который работает в диалоге с пользователем CRT всё равно потребуется! я бы всё равно uses CRT; рекомендовал, в любом случае)
И то, что это практически максимально эффективное решение, тоже не главное достоинство.

А главное, что данная функция для ЛЮБОЙ клавиши (в том числе и управляющих курсором) выдаёт WORD (слово, два байта). т.образом не надо писать конструкции вида:
key := Readkey;
if key=#0 then key := Readkey;

а использовать её, или стандартную Readkey — это уже дело уже самого программиста...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.03.2009, 09:49   #14
OCTAGRAM
Oldschool geek
Форумчанин
 
Аватар для OCTAGRAM
 
Регистрация: 09.03.2009
Сообщений: 611
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
А главное, что данная функция для ЛЮБОЙ клавиши (в том числе и управляющих курсором) выдаёт WORD (слово, два байта). т.образом не надо писать конструкции вида:

Код:
key := Readkey;
if key=#0 then key := Readkey;
Так нельзя писать, кстати. key может быть обычной клавишей типа H, K, M, P. Чтобы стрелку вверх отличать от Shift-h, надо как–то указывать присутствие #0. Я обычно для клавиш использую string или string[2], и, если был #0, то он становится первым символом, а код клавиши — вторым, а если нет, то строка будет из одного символа.

Код:
key := ReadKey;
if key = #0 then key := key + ReadKey;
Удобно тем, что не надо тайпкастить Word и Char.
If you want to get to the top, you have to start at the bottom

http://pascal.net.ru/
OCTAGRAM вне форума Ответить с цитированием
Старый 26.03.2009, 11:14   #15
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Так нельзя писать, кстати.
БЕССПОРНО!
я просто демонстрировал конструкцию чтения обычным Readkey'ем...
в коде это выглядело бы так (это кусочек из старинного проекта):
Код:
Ans:=ReadKey;  { считываем символ }
case Ans of
     #13: begin
             ...
             Exit
           end;
     #27 :begin
           ...
           Exit
         end;
     #08 :  { если это 'забой' }
           begin
             ...
           end;
     #25,#4 :     {  ^y  ^d  }
           begin
            ... 
           end;

     #00:     { Если расширенные коды то смотрим какая клавиша нажата}
         begin
           Ans:=ReadKey;
           Case Ans of
           #83 :   {  Delete  }
             begin
               ...
             end;
           #75 :     {  Left  }
             begin
               ...
             end;
           #77 :     {  Right  }
             begin
               .... 
             end;
           end;
         end;
end;
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает клавиша ENTER в TWebBrowser kontora Компоненты Delphi 4 27.11.2009 12:22
Как с помощье ReadKey определить что нажата клавиша "Стрелка" Викдон Паскаль, Turbo Pascal, PascalABC.NET 5 05.02.2009 00:47
клавиша delete andrey4623 Общие вопросы Delphi 6 17.01.2008 18:16
как отследить нажатие клавиши Delete D-fens Общие вопросы Delphi 4 07.06.2007 23:58
нажата ли кнопка мыши? VDLab Общие вопросы Delphi 2 15.11.2006 00:59