События

  • Природа событий
  • Виды событий
  • События от мыши
  • События от клавиатуры
  • Сообщения
  • Пустые сообщения
  • Маршрутизация событий
  • Позиционированные события
  • Общие события
  • Фаза событий
  • Команды
  • Преобразование активных событий в команды
  • Запрещение и разрешение команд
  • Модификация и обработка событий
  • События, определенные пользователем
  • Маскирование и очистка событий
  • Перекрытие HandleEvent
  • Перекрытие GetEvent
  • Неиспользованное время
  • Ненужные события
  • Взаимодействие видимых элементов
  • Контекстная помощь
  • Как уже неоднократно подчеркивалось, программы, работающие в среде Turbo Vision,- это программы, управляемые событиями. В этой главе подробно рассматривается механизм событий и способы их использования.

     

    Природа событий

    События представляют собой небольшие пакеты информации, которыми обмениваются видимые элементы и которые создаются средой Turbo Vision в ответ на те или иные действия пользователя. Нажатие на любую клавишу или манипуляция мышью порождает событие, которое передается по цепочке активности видимых элементов до тех пор, пока не найдется элемент, знающий как обработать это событие. Может оказаться, что в программе нет ни одного элемента, способного обработать событие. В этом случае обычно ничего не происходит, по умолчанию Turbo Vision просто удаляет ненужное событие, однако программист может предусмотреть свою реакцию в этой ситуации.

    Важно помнить, что события сами по себе не производят никаких действий в программе, но в ответ на событие могут создаваться новые видимые элементы, модифицироваться или уничтожаться существующие элементы, что и приводит к изменению содержимого экрана. Иными словами, все действия по созданию и изменению изображения реализуются видимыми объектами, а события лишь управляют их работой -именно это мы имеем в виду, говоря о программах, управляемых событиями.

    Технически событие представляет собой обычную для Турбо Паскаля запись, имеющую следующую структуру:

    type

    TEvent = record 

    What: Word;{Тип события} 

    case Word of evNothing: (); {Пустое событие} 

    evMouse: ( {Событие от мыши:}

    Buttons: Byte; {Состояние кнопок} 

    Double : Boolean; {Признак двойного нажатия} 

    Where : TPoint); {Координаты мыши} 

    evKeyDown: ( {Событие от клавиатуры:}

    case Integer of

    0: (KeyCode: Word); {Код клавиши} 

    1: (CharCode: Char; 

    ScanCode: Byte)); 

    evMessage: ( {Событие-сообщение} 

    Command: Word; {Код команды} 

    case Word of

    0: (InfoPtr : Pointer) 

    1: (InfoLong: Longlnt)

    2: (InfoWord: Word);

    3: (Infolnt : Integer);

    4: (InfoByte: Byte);

    5: (InfoChar: Char));

    end;

    Ядром события является поле What, которое описывает тип события. Оставшаяся часть записи содержит дополнительную информацию, например, код нажатой клавиши или координаты точки, в которой была нажата кнопка мыши.