Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1.  
  2. { В FreePascal 2.2.0 кодировка cp866 не реализована. }
  3. {-$codepage cp866}
  4.  
  5. {$mode objfpc}
  6. {$smartlink on}
  7. {$apptype gui}
  8.  
  9. program Example;
  10.  
  11. { Все функции имеющие в своем имени префикс 'kos_' являются платформозависимыми
  12.   и реализованы только для KolibriOS. Их использование в любых программных
  13.   приложениях категорически не рекомендовано, выносите все методы, использующие
  14.   эти функции, в отдельные модули (и используйте необходимые абстракции). }
  15.  
  16.  
  17. procedure DoPaint;
  18. { Вывод содержимого окна приложения }
  19. begin
  20.   kos_begindraw();
  21.  
  22.   { определение параметров окна }
  23.   kos_definewindow(200, 200, 200, 50, $23AABBCC);
  24.  
  25.   { kos_definewindow не имеет параметра для вывода заголовка,
  26.     делаем это отдельной функцией kos_setcaption }
  27.  
  28.   { отображение заголовка окна }
  29.   kos_setcaption('ПРИМЕР ПРОГРАММЫ');
  30.  
  31.   { вывод сообщения }
  32.   kos_drawtext(3, 8, 'Нажмите любую клавишу...');
  33.   kos_enddraw();
  34. end;
  35.  
  36.  
  37. procedure DoKey;
  38. { Обработка события нажатия клавиши }
  39. var
  40.   Key: DWord;
  41.   Notes: array[0..3] of Byte;
  42. begin
  43.   Key := kos_getkey();
  44.  
  45.   { настраиваем буфер для нот }
  46.   Notes[0] := $90;
  47.   Notes[1] := Key shr 8;
  48.   Notes[2] := $00;
  49.  
  50.   { воспроизводим }
  51.   kos_speaker(@Notes);
  52. end;
  53.  
  54.  
  55. function DoButton: Boolean;
  56. { Обработка события нажатия кнопки GUI }
  57. var
  58.  Button: DWord;
  59. begin
  60.   { получить код нажатой кливиши }
  61.   Button := kos_getbutton();
  62.  
  63.   { если [x], то вернуть ложь, а значит спровоцировать закрытие приложения }
  64.   Result := Button <> 1;
  65. end;
  66.  
  67.  
  68. function ProcessMessage: Boolean;
  69. { Ожидание и обработка событий.
  70.  
  71.   @return: Возвращает False, если было событие к завершению приложения.
  72.   @rtype : True или False }
  73. var
  74.   Event: DWord;
  75. begin
  76.   Result := True;
  77.  
  78.   { ожидаем события от системы }
  79.   Event := kos_getevent();
  80.   case Event of
  81.     SE_PAINT   : DoPaint;  { перерисовка окна }
  82.     SE_KEYBOARD: DoKey;    { событие от клавиатуры }
  83.     SE_BUTTON  : Result := DoButton; { событие от кнопки, может определить
  84.                                        завершение приложения, если вернет False }
  85.   end;
  86. end;
  87.  
  88.  
  89. { Главный цикл приложения }
  90. var
  91.   ThreadSlot: TThreadSlot;
  92. begin
  93.   { настраиваем события, которые мы готовы обрабатывать }
  94.   kos_maskevents(ME_PAINT or ME_KEYBOARD or ME_BUTTON);
  95.  
  96.   { обработка событий }
  97.   while ProcessMessage do;
  98. end.
  99.