мета-данные страницы
  •  
Загрузка не удалась. Возможно, проблемы с правами доступа?

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
Последняя версияСледующая версия справа и слева
pascal:graph [29/01/2016 12:58] ybezrukovpascal:graph [18/03/2016 11:49] ybezrukov
Строка 60: Строка 60:
  
 <code pascal> <code pascal>
-Mx := GetMaxX div 2;+        Mx := GetMaxX div 2;
  My := GetMaxY div 2;  My := GetMaxY div 2;
  for y := -my to my do  for y := -my to my do
Строка 274: Строка 274:
  
  
 +==== Работа с клавиатурой ====
 +
 +В графическом режиме обработка событий клавиатура происходит очень похоже на текстовый режим, так как реализованы аналоги функций readkey и keypressed из модуля crt. В модуле oglgraph они называются graphreadkey и graphkeypressed. Функция graphkeypressed служит для определения события нажатия на клавиатуру, это логическая функция, которая возвращает два значения: истина или ложь. Обычно результатом ее работы будет всегда false, кроме того случая если нажата какая-нибудь клавиша на клавиатуре. В примерах выше это ее поведение используется для остановки выполнения программы перед закрытием графического режима:
 +
 +<code pascal> repeat until graphkeypressed;</code>
 +
 +Когда выполнение программы доходит до приведенной строки, запускается цикл repeat-until, который работает до тех пор, пока условие не станет истинным, что в нашем случае произойдет только при нажатии любой клавиши.
 +
 +Функция graphreadkey так же реагирует на нажатия, но в результате работы возвращает скан-код клавиши, т.е. уникальное целочисленное значение, которое соответствует коду клавиши, генерируемому контроллером клавиатуры.
 +
 +<code pascal> code := graphreadkey;</code>
 +
 +
 +Особенностью это функции является то, что она блокирует исполнение программы до того момента пока не будет нажата клавиша. Если же требуется реализовать работу с клавиатурой, которая бы не останавливала работу программы, то в этом случае нужно предварительно сделать проверку на нажатие клавиши с помощью graphkeypressed:
 +
 +<code pascal>
 +if graphkeypressed then
 +    code := graphreadkey; 
 +</code> 
 +
 +Напишем программу, которая опрашивает клавиатуру и выводит на экран коды клавиш:
 +
 +<code pascal>
 +uses oglgraph;
 +var
 +  gd, gm, code: smallint;
 +  
 +begin
 +  gd := Detect;
 +  gm := DetectMode;
 +  initgraph(gd, gm, '');
 +  
 +  while true do
 +  begin
 +     if graphkeypressed then
 +     begin
 +        code := graphreadkey; 
 +        writeln(code);
 +     end;   
 +  end;
 +  closegraph;
 +end.
 +
 +</code>