До сих пор мы имели дело со скриптами, работа которых заканчивалась строкой stop. Сейчас мы познакомимся с концепцией СОП ( событийно-ориентированного программирования) и примером её реализации. Концепция СОП реализована во всех современных языках программирования (разве что кроме языков работы с базами данных). Подробности можно прочитать, например, в википедии.
Вкратце: Сначала выполняются операторы основного тела скрипта вплоть до строки stop, в которой активируется графический режим и описывается прямоугольная область (области), чувствительные к клику мышки. Затем программа переходит в режим ожидания и не использует процессорное время компьютера. Но при клике мышкой по одному из описанных ранее в графической области прямоугольников активируется выполнение скриптовой функции, расположенной после строки stop.
В качестве примера реализации СОП нарисуем виртуальную клавиатуру и научимся определять клавиши, по которым кликнули мышкой.
Сначала убедимся, что в директории pictures лежит графический файл Kbd1.png с изображением цифровой клавиатуры.

Для этого наберём скрипт, задающий параметры графической области и отображающий на ней указанное изображение:
SetCoordinateSystem(1,1,200,200,0,1,2)
Gra_PictureImport('pictures\Kbd1.png',1,1)
Запустим этот скрипт. Должно получиться что-то вроде этого:

Теперь определим прямоугольник в графической области, который должен стать чувствительным к клику мышки. Наведите курсор мышки на левый нижний угол чёрной области картинки и прочитайте координаты на панели состояния внизу формы: X=4.0 Y=6.0. Цифры 4 и 6 - координаты левого нижнего угла требуемого прямоугольника. Наведите курсор мышки на правый верхний угол чёрной области картинки (вблизи цифры 3) и прочитайте координаты на панели состояния внизу формы: X=137.0 Y=142.0. Цифры 137 и 142 - координаты правого верхнего угла прямоугольника. Ваши цифры могут на одну-две единицы отличаться от приведенных. Вот так выглядит скрипт, задающий чувствительный к клику мышки прямоугольник и имя функции, которая должна выполняться при клике по этому прямоугольнику.
Gra_Define_Mouse_Click_Handler(Array4(4,6,137,142), 'Func1')
str = ''
stop
После строки stop следует разместить тело функции с указанным именем Func1:
Function Func1()
_x = MouseCoordinates[1]
_y = MouseCoordinates[2]
_col = 0
_row = 0
_N = -1
if (_x>=4) AND (_x<= 44)
_col = 1
if (_x>=50) AND (_x<= 91)
_col = 2
if (_x>=97) AND (_x<= 136)
_col = 3
if (_y>=118) AND (_y<= 142)
_row = 1
if (_y>=80) AND (_y<= 110)
_row = 2
if (_y>=41) AND (_y<= 72)
_row = 3
if (_y>=6) AND (_y<= 34)
_row = 4
if (_col > 0) AND (_row > 0)
_N = _col + (_row-1)*3
if _N = 11
_N = 0
if _N > 9
_N = -1
if _N >= 0
str = str + Str_Char(_N+48)
Gra_Text(10,160,str,12)
return
Поясним эту функцию. MouseCoordinates - встроенная функция, возвращающая X и Y координаты точки клика. Локальные переменные функции _x и _y - координаты точки клика. Кнопки на клавиатуре расположены в 3 колонки и 4 ряда. Локальные переменные _col и _row - номера этих колонок и рядов (слева направо и сверху вниз). Габариты колонок и рядов определяем с помощью панели состояния программы, наводя курсор мыши на интересующую точку. Несложный алгоритм позволяет определить номер колонки и номер ряда а затем номер нажатой кнопки - _N. В конце тела функции к глобальной строковой переменной str добавляем справа символ цифры, соответствующей нажатой кнопке. Переменная str отображается в графической области.
Запустите скрипт и проверьте реакцию на клики мышкой по кнопкам виртуальной клавиатуры.

Итоговый скрипт можно подсмотреть в файле …\Vasilisa\Scripts\Graphics_Виртуальная_клавиатура.txt.
В заключение заметим, что можно одновременно задавать несколько прямоугольников в графической области реагирующих на клик, каждый из которых связан с собственной функцией обработки клика.