|
|
|
|
event add << виртуальное>> последовательность ?последовательность...?
-above окно
NotifyAncestor | NotifyNonlinearVirtual |
NotifyDetailNone | NotifyPointer |
NotifyInferior | NotifyPointerRoot |
NotifyNonlinear | NotifyVirtual |
tail Устанавливает событие в очередь событий Tcl вслед за всеми стоящими в этой очереди событиями данного приложения.
head Устанавливает событие в начало очереди событий Tcl; оно будет обработано перед остальными событиями, уже стоящими в очереди.
mark Устанавливает событие в начало очереди событий Tcl, но вслед за всеми событиями, вставшими в очередь посредством указания параметра -when. Такая возможность полезна при генерации последовательности событий, которые должны быть обработаны одно за другим, но перед всеми событиями уже стоящими в очереди.
event add <<Paste>> <Button-2>
event add <<Save>> <Control-X><Control-S>
event add <<Save>> <Shift-F12>
bind Entry <<Paste>> {%W insert [selection get]}
Двойные угловые скобки показывают, что выполняется привязка к виртуальному событию. При нажатии клавиш Control-y или кнопки 2 “Мыши” или при синтезировании виртуального события <<Paste>> командой event generate будет выполнена привязка <<Paste>> .
Если последовательность в виртуальном событии в точности совпадает с последовательностью в другом физическом событии, то преимуществом пользуется физическое событие. Рассмотрим следующий пример:
event add <<Paste>> <Control-y> <Meta-Control-y>
bind Entry <Control-y> {puts Control-y}
bind Entry <<Paste>> {puts Paste}
При нажатии на клавиши Control-y будет выполнена привязка <Control-y>, так как физическое событие считается более конкретным, чем виртуальное, а в остальном все одинаково. Однако при нажатии клавиш Meta-Control-y будет выполнена привязка <<Paste>>, так как модификатор Meta в физическом образце, связанном с виртуальной привязкой, более конкретен, чем последовательность <Control-y> для физического события.
Привязки к виртуальному событию можно создавать и до определения самого события. На самом деле определение виртуального события не является необходимым, например, на платформах, где конкретное виртуальное событие может оказаться бессмысленным или негенерируемым.
При изменении определения виртуального события в процессе выполнения все окна немедленно переключаются на новое определение. Если, в условиях предыдущего примера, выполнить команды
bind <Entry> <Control-y> {}
event add <<Paste>> <Key-F6>
то поведение события изменится в двух направлениях. Во-первых, всплывет подавленная привязка <<Paste>>. Нажатие на клавиши Control-y приведет теперь не к выполнению привязки <Control-y>, а к выполнению виртуального события <<Paste>> . Во-вторых, нажатие на клавишу F6 также приведет к выполнению привязки <<Paste>> .
См. также bind .