На этом шаге мы рассмотрим обработчики событий.
С каждым окном и диалоговым окном связан предикат, который обрабатывает все события для этого окна. Он объявляется принадлежащим домену ehandler и принимает два входных параметра: дескриптор окна и событие. Предикат возвращает параметр long значение которого используется только в нескольких случаях. Типовой обработчик событий может выглядеть так:
predicates mywin_event_handler:ehandler clauses mywin event_handler(Window,e_Create(CreationData),0):-
Предикат обработчика событий для каждого окна должен быть объявлен и создан экспертом окон и диалоговых окон. Для событий, которые явно должны обрабатываться вашим приложением, нужно самостоятельно написать код обработчика. Если предикат обработчика событий для этого события завершится неуспешно, то VPI выполнит действия по умолчанию для соответствующего события. Если предикат выполнится успешно, VPI не будет производить никаких дополнительных действий. Например, событие e_CloseRequest будет послано после того, как пользователь дважды щелкнет мышью по кнопке закрытия окна. Если никакое предложение не обрабатывает это событие, то стандартный обработчик по умолчанию закроет окно. Если существует предложение, обрабатывающее это событие e_CloseRequest, то программист может решить оставить окно открытым. Для этого он должен обеспечить успешное завершение этого предложения предиката обработчика ошибок, или закрыть окно в результате его неуспешного завершения, или при помощи вызова предиката win_Destroy.
Если значение возвращаемого параметра предиката обработчика событий не важно, оно должно быть установлено в нуль. Так обстоит дело для большинства событий. Однако существуют случаи, в которых оно имеет специальное значение, а именно:
На следующем шаге мы рассмотрим создание окон.