<!DOCTYPE html PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN> <html> <head> <title>event</title> </head> <body> <h1>event</h1> <p>Определение виртуальных событий и генерация событий</p> <h2><a name=СИНТАКСИС></a>СИНТАКСИС</h2> <pre> <strong>event</strong> <em>параметр</em> ?<em>арг арг ...</em>? </pre> <h2><a name=ОПИСАНИЕ></a>ОПИСАНИЕ</h2> <p>Команда <strong>event</strong> обеспечивает различные возможности работы с событиями, включая определение виртуальных событий и синтезирование событий. У команды есть несколько различных форм, которые задаются первым аргументом. В настоящее время поддерживаются следующие формы команды:</p> <dl> <dt><strong>event add</strong> <<<em>виртуальное</em>>> <em>последовательность</em> ?<em>последовательность...</em>?</dt> <dd>Связывает <em>виртуальное</em> событие с последовательностями физических событий, указываемыми аргументами <em>последовательность</em>; в результате выполнение одной из указанных <em>последовательностей</em> событий приводит к возникновению <em>виртуального</em> события. Аргумент <em>виртуальное</em> может быть произвольной строкой, а <em>последовательность</em> может принимать любое значение, допустимое для аргумента <em>последовательность</em> команды <a href=bind.html><strong>bind</strong></a>. Если виртуальное событие уже определено, то новая последовательность физических событий добавляется к списку уже имеющихся последовательностей.</dd> <dt><strong>event delete</strong> <<<em>виртуальное</em>>> ?<em>последовательность последовательность ..</em>?</dt> <dd>Удаляет все указанные <em>последовательности</em> из списка связанных с данным <em>виртуальным</em> событием. Аргумент <em>виртуальное</em> может быть произвольной строкой, а <em>последовательность</em> может принимать любое значение, допустимое для аргумента <em>последовательность</em> команды <a href=bind.html><strong>bind</strong></a>. Если <em>последовательность</em> не связана с данным <em>виртуальным</em> событием в текущий момент, то она игнорируется. Если аргумент <em>последовательность</em> отсутствует, то из списка удаляются все последовательности физических событий и данное <em>виртуальное</em> событие не может быть более осуществлено.</dd> <dt> <strong>event generate</strong> <em>окно событие</em> ?<em>параметр значение параметр значение ...</em>?</dt> <dd>Генерирует событие в окне и обеспечивает его обработку таким образом, как если бы оно поступило из менеджера окон. Аргумент <em>окно</em> задает имя пути окна, в котором будет генерироваться событие; его значением может быть и идентификатор окна (такой же, какой служит результатом команды <strong>winfo id</strong>), если он относится к окну в текущем приложении. Аргумент <em>событие</em> задает описание события, например, в виде <strong><Shift-Button-2></strong> или <strong><<Paste>></strong>. Аргумент <em>событие</em> может принимать любое значение, допустимое для аргумента <em>последовательность</em> команды <a href=bind.html><strong>bind</strong></a>, за исключением того, что он должен состоять из одного, а не из нескольких событий. Пары <em>параметр-значение</em> можно использовать для установки значений дополнительных параметров события, например, координат курсора "Мыши" ниже (см. "<a href=event.html#ПОЛЯ_СОБЫТИЯ>ПОЛЯ СОБЫТИЯ</a>"). Если параметр <strong>-when</strong> не задан, то событие обрабатывается немедленно; все программы обработки события будут выполнены до завершения команды <strong>event generate</strong>. В противном случае момент обработки определяется значением параметра <strong>-when</strong>.</dd> <dt> <strong>event info</strong> ?<<<em>виртуальное</em>>>?</dt> <dd>Возвращает информацию о виртуальных событиях. Если аргумент <<<em>виртуальное</em>>> опущен, то возвращается список всех виртуальных событий, определенных в текущий момент. Если аргумент <<<em>виртуальное</em>>> задан, то возвращаемое значение представляет собой список, элементы которого являются последовательностями физических событий, связанными с данным виртуальным событием; если указанное виртуальное событие не определено, то команда возвращает пустую строку.</dd> </dl> <h2><a name=ПОЛЯ_СОБЫТИЯ></a>ПОЛЯ СОБЫТИЯ</h2> <p>Команда <strong>event generate</strong> поддерживает следующие параметры, которые соответствуют расширению <strong>%</strong> в скриптах привязки для команды <a href=bind.html><strong>bind</strong></a>.</p> <dl> <dt><strong>-above</strong> <em>окно</em></dt> <dd>Аргумент <em>окно</em> задает поле <strong>above</strong> для события либо в виде имени пути окна либо в виде целочисленного идентификатора окна. Параметр имеет смысл для событий <strong>Configure</strong>. Параметр соответствует подстановке <strong>%a</strong> для скриптов привязки.</dd> <dt><strong>-borderwidth</strong> <em>размер</em></dt> <dd>Параметр <em>размер</em> представляет собой расстояние на экране; задает значение поля <strong>border_width</strong> события. Параметр имеет смысл для событий <strong>Configure</strong>. Параметр соответствует подстановке <strong>%B</strong> для скриптов привязки.</dd> <dt><strong>-button</strong> <em>число</em></dt> <dd>Значением параметра <em>число</em> должно быть целое число; задает значение поля <em>detail</em> для события <strong>ButtonPress</strong> или <strong>ButtonRelease</strong>, подавляя номер кнопки, задаваемый параметром события <strong>base</strong>. Параметр соответствует подстановке <strong>%b</strong> для скриптов привязки.</dd> <dt><strong>-count</strong> <em>число</em></dt> <dd>Значением параметра <em>число</em> должно быть целое число; задает значение поля <strong>count</strong> для события. Параметр имеет смысл для событий <strong>Expose</strong>. Параметр соответствует подстановке <strong>%c</strong> для скриптов привязки.</dd> <dt><strong>-detail</strong> <em>детальность</em></dt> <dd><p>Параметр задает значение поля <strong>detail</strong> для события и может принимать следующие значения:</p> <ul> <li><strong>NotifyAncestor</strong></li> <li><strong>NotifyDetailNone</strong></li> <li><strong>NotifyInferior</strong></li> <li><strong>NotifyNonlinear</strong></li> <li><strong>NotifyNonlinearVirtual</strong></li> <li><strong>NotifyPointer</strong></li> <li><strong>NotifyPointerRoot</strong></li> <li><strong>NotifyVirtual</strong></li> </ul> <p>Имеет смысл для событий <strong>Enter</strong>, <strong>Leave</strong>, <strong>FocusIn</strong> и <strong>FocusOut</strong>. Параметр соответствует подстановке <strong>%d</strong> для скриптов привязки.</p> </dd> <dt> <strong>-focus</strong> <em>булевское</em></dt> <dd>Параметр <em>булевское</em> принимает булевские значения; он задает значение поля <strong>focus</strong> для события. Имеет смысл для событий <strong>Enter</strong> и <strong>Leave</strong>. Параметр соответствует подстановке <strong>%f</strong> для скриптов привязки.</dd> <dt> <strong>-height</strong> <em>размер</em> </dt> <dd>Параметр <em>размер</em> представляет собой расстояние на экране; задает значение поля <strong>height</strong> события. Параметр имеет смысл для событий <strong>Configure</strong>. Параметр соответствует подстановке <strong>%h</strong> для скриптов привязки.</dd> <dt><strong>-keycode</strong> <em>число</em></dt> <dd>Значением параметра <em>число</em> должно быть целое число; задает значение поля <strong>keycode</strong> для события. Параметр имеет смысл для событий <strong>KeyPress</strong> и <strong>KeyRelease</strong>. Параметр соответствует подстановке <strong>%k</strong> для скриптов привязки.</dd> <dt><strong>-keysym</strong> <em>имя</em></dt> <dd>Значением параметра <em>имя</em> должно быть имя допустимого символа клавиатуры, например, <strong>g</strong>, <strong>пробел</strong> или <strong>Return</strong>; код этого символа используется в качестве значения поля <strong>keycode</strong> события, подавляя значение детальности, заданное аргументом <strong>base</strong> события. Имеет смысл для событий <strong>KeyPress</strong> и <strong>KeyRelease</strong>. Параметр соответствует подстановке <strong>%K</strong> для скриптов привязки.</dd> <dt><strong>-mode</strong> <em>уведомление</em></dt> <dd>Параметр <em>уведомление</em> задает значение поля <strong>mode</strong> для события; он должен принимать одно из значений <strong>NotifyNormal</strong>, <strong>NotifyGrab</strong>, <strong>NotifyUngrab</strong> или <strong>NotifyWhileGrabbed</strong>. Имеет смысл для событий <strong>Enter</strong>, <strong>Leave</strong>, <strong>FocusIn</strong> и <strong>FocusOut</strong>. Параметр соответствует подстановке <strong>%m</strong> для скриптов привязки.</dd> <dt><strong>-override</strong> <em>булевское</em></dt> <dd>Значение параметра <em>булевское</em> должно быть булевским; он задает значение поля <strong>override_redirect</strong> для события. Имеет смысл для событий <strong>Map</strong>, <strong>Reparent</strong> и <strong>Configure</strong>. Параметр соответствует подстановке <strong>%o</strong> для скриптов привязки.</dd> <dt> <strong>-place</strong> <em>где</em> </dt> <dd>Параметр <em>где</em> задает значение поля <strong>place</strong> для события; может принимать значения <strong>PlaceOnTop</strong> или <strong>PlaceOnBottom</strong>. Имеет смысл для событий <strong>Circulate</strong>. Параметр соответствует подстановке <strong>%p</strong> для скриптов привязки.</dd> <dt><strong>-root</strong> <em>окно</em></dt> <dd>Аргумент <em>окно</em> задает поле <strong>root</strong> для события либо в виде имени пути окна, либо в виде целочисленного идентификатора окна. Имеет смысл для событий <strong>KeyPress</strong>, <strong>KeyRelease</strong>, <strong>ButtonPress</strong>, <strong>ButtonRelease</strong>, <strong>Enter</strong>, <strong>Leave</strong> и <strong>Motion</strong>. Параметр соответствует подстановке <strong>%R</strong> для скриптов привязки.</dd> <dt> <strong>-rootx</strong> <em>коорд</em> </dt> <dd>Параметр <em>коорд</em> представляет собой расстояние на экране; задает значение поля <strong>x_root</strong> события. Параметр имеет смысл для событий <strong>KeyPress</strong>, <strong>KeyRelease</strong>, <strong>ButtonPress</strong>, <strong>ButtonRelease</strong>, <strong>Enter</strong>, <strong>Leave</strong> и <strong>Motion</strong>. Параметр соответствует подстановке <strong>%X</strong> для скриптов привязки.</dd> <dt><strong>-rooty</strong> <em>коорд</em></dt> <dd>Параметр <em>коорд</em> представляет собой расстояние на экране; задает значение поля <strong>y_root</strong> события. Параметр имеет смысл для событий <strong>KeyPress</strong>, <strong>KeyRelease</strong>, <strong>ButtonPress</strong>, <strong>ButtonRelease</strong>, <strong>Enter</strong>, <strong>Leave</strong> и <strong>Motion</strong>. Параметр соответствует подстановке <strong>%Y</strong> для скриптов привязки.</dd> <dt><strong>-sendevent</strong> <em>булевское</em></dt> <dd>Значение параметра <em>булевское</em> должно быть булевским; он задает значение поля <strong>send_event</strong> для события. Имеет смысл для всех событий. Параметр соответствует подстановке <strong>%E</strong> для скриптов привязки.</dd> <dt> <strong>-serial</strong> <em>число</em> </dt> <dd>Значение параметра должно быть целым числом; задает значение поля <strong>serial</strong> для события. Имеет смысл для всех событий. Параметр соответствует подстановке <strong>%#</strong> для скриптов привязки.</dd> <dt> <strong>-state</strong> <em>состояние</em></dt> <dd>Параметр задает значение поля <strong>state</strong> для события. Для событий <strong>KeyPress</strong>, <strong>KeyRelease</strong>, <strong>ButtonPress</strong>, <strong>ButtonRelease</strong>, <strong>Enter</strong>, <strong>Leave</strong> и <strong>Motion</strong> значение параметра должно быть целым. Для событий <strong>Visibility</strong> параметр может принимать одно из значений <strong>VisibilityUnobscured</strong>, <strong>VisibilityPartiallyObscured</strong> или <strong>VisibilityFullyObscured</strong>. Этот параметр подавляет любые модификаторы, например, <strong>Meta</strong> или <strong>Control</strong>, указанные в основном событии. Параметр соответствует подстановке <strong>%s</strong> для скриптов привязки.</dd> <dt> <strong>-subwindow</strong> <em>окно</em></dt> <dd>Аргумент <em>окно</em> задает поле <strong>subwindow</strong> для события либо в виде имени пути примитива event, либо в виде целочисленного идентификатора окна. Имеет смысл для событий <strong>KeyPress</strong>, <strong>KeyRelease</strong>, <strong>ButtonPress</strong>, <strong>ButtonRelease</strong>, <strong>Enter</strong>, <strong>Leave</strong> и <strong>Motion</strong>. Аналогичен подстановке <strong>%S</strong> для скриптов привязки.</dd> <dt><strong>-time</strong> <em>целое</em></dt> <dd>Параметр должен иметь целое значение; задает значение поля <strong>time</strong> для события. Имеет смысл для событий <strong>KeyPress</strong>, <strong>KeyRelease</strong>, <strong>ButtonPress</strong>, <strong>ButtonRelease</strong>, <strong>Enter</strong>, <strong>Leave</strong>, <strong>Motion</strong> и <strong>Property</strong>. Параметр соответствует подстановке <strong>%t</strong> для скриптов привязки.</dd> <dt> <strong>-width</strong> <em>размер</em> </dt> <dd>Параметр <em>размер</em> представляет собой расстояние на экране; задает значение поля <strong>width</strong> события. Параметр имеет смысл для событий <strong>Configure</strong>. Параметр соответствует подстановке <strong>%w</strong> для скриптов привязки.</dd> <dt><strong>-when</strong> <em>когда</em></dt> <dd><p>Параметр <em>когда</em> задает момент обработки события; должен принимать одно из следующих значений:</p> <dl> <dt><strong>now</strong></dt> <dd>Событие обрабатывается немедленно, до завершения выполнения команды. То же самое происходит и в случае, если параметр <strong>-when</strong> опущен.</dd> <dt><strong>tail</strong></dt> <dd> Устанавливает событие в очередь событий Tcl вслед за всеми стоящими в этой очереди событиями данного приложения.</dd> <dt><strong>head</strong></dt> <dd> Устанавливает событие в начало очереди событий Tcl; оно будет обработано перед остальными событиями, уже стоящими в очереди.</dd> <dt><strong>mark</strong></dt> <dd>Устанавливает событие в начало очереди событий Tcl, но вслед за всеми событиями, вставшими в очередь посредством указания параметра <strong>-when</strong>. Такая возможность полезна при генерации последовательности событий, которые должны быть обработаны одно за другим, но перед всеми событиями уже стоящими в очереди.</dd> </dl> </dd> <dt><strong><em>-x</em></strong> <em>коорд</em> </dt> <dd>Параметр <em>коорд</em> представляет собой расстояние на экране; задает значение поля <strong>x</strong> события. Параметр имеет смысл для событий <strong>KeyPress</strong>, <strong>KeyRelease</strong>, <strong>ButtonPress</strong>, <strong>ButtonRelease</strong>, <strong>Enter</strong>, <strong>Leave</strong>, <strong>Motion</strong>, <strong>Expose</strong>, <strong>Configure</strong>, <strong>Gravity</strong> и <strong>Reparent</strong>. Параметр соответствует подстановке <strong>%x</strong> для скриптов привязки.</dd> <dt><strong><em>-y</em></strong> <em>коорд</em></dt> <dd>Параметр <em>коорд</em>представляет собой расстояние на экране; задает значение поля <strong>y</strong> события. Параметр имеет смысл для событий <strong>KeyPress</strong>, <strong>KeyRelease</strong>, <strong>ButtonPress</strong>, <strong>ButtonRelease</strong>, <strong>Enter</strong>, <strong>Leave</strong>, <strong>Motion</strong>, <strong>Expose</strong>, <strong>Configure</strong>, <strong>Gravity</strong> и <strong>Reparent</strong>. Параметр соответствует подстановке <strong>%y</strong> для скриптов привязки.</dd> </dl> <p>Значением всякого параметра, не указанного при генерации события, становится 0, за исключением параметра <strong>serial</strong>, которому присваивается серийный номер очередного X события.</p> <h2><a name=ПРИМЕРЫ_ВИРТУАЛЬНЫХ_СОБЫТИЙ></a>ПРИМЕРЫ ВИРТУАЛЬНЫХ СОБЫТИЙ</h2> <p>Для обращения к привязке к виртуальному событию необходимо выполнение двух условий. Во-первых, это виртуальное событие должно быть определено командой <strong>event add</strong>. Во-вторых, к этому виртуальному событию должна быть создана привязка с помощью команды <a href= bind.html><strong>bind</strong></a>.</p> <p>Рассмотрим следующие определения виртуальных событий:</p> <pre> event add <<Paste>> <Control-y> event add <<Paste>><Button-2> event add <<Save>> <Control-X><Control-S> event add <<Save>> <Shift-F12> </pre> <p>В команде <strong>bind</strong> привязка к виртуальным событиям осуществляется так же, как и ко встроенным типам событий:</p> <pre> bind Entry <<Paste>> {%W insert[selection get]} </pre> <p>Двойные угловые скобки показывают, что выполняется привязка к виртуальному событию. При нажатии клавиш <strong>Control-y</strong> или кнопки 2 .Мыши. или при синтезировании виртуального события <strong><<Paste>></strong> командой <strong>event generate</strong> будет выполнена привязка <strong><<Paste>></strong>.</p> <p>Если последовательность в виртуальном событии в точности совпадает с последовательностью в другом физическом событии, то преимуществом пользуется физическое событие. Рассмотрим следующий пример:</p> <p> event add <<Paste>> <Control-y> <Meta-Control-y> bind Entry <Control-y> {puts Control-y} bind Entry <<Paste>> {puts Paste} <p>При нажатии на клавиши <strong>Control-y</strong> будет выполнена привязка <strong><Control-y></strong>, так как физическое событие считается более конкретным, чем виртуальное, а в остальном все одинаково. Однако при нажатии клавиш <strong>Meta-Control-y</strong> будет выполнена привязка <strong><<Paste>></strong>, так как модификатор <strong>Meta</strong> в физическом образце, связанном с виртуальной привязкой, более конкретен, чем последовательность <<strong>Control-y</strong>> для физического события.</p> <p>Привязки к виртуальному событию можно создавать и до определения самого события. На самом деле определение виртуального события не является необходимым, например, на платформах, где конкретное виртуальное событие может оказаться бессмысленным или не генерируемым.</p> <p>При изменении определения виртуального события в процессе выполнения все окна немедленно переключаются на новое определение. Если, в условиях предыдущего примера, выполнить команды</p> <pre> bind <Entry> <Control-y> {} event add <<Paste>> <Key-F6> </pre> <p>то поведение события изменится в двух направлениях. Во-первых, всплывет подавленная привязка <strong><<Paste>></strong>. Нажатие на клавиши <strong>Control-y</strong> приведет теперь не к выполнению привязки <strong><Control-y></strong>, а к выполнению виртуального события <strong><<Paste>></strong>. Во-вторых, нажатие на клавишу <strong>F6</strong> также приведет к выполнению привязки <strong><<Paste>></strong>. <p>Если <em>последовательность</em> не связана с данным <em>виртуальным</em> событием в текущий момент, то она игнорируется. Если аргумент <em>последовательность</em> отсутствует, то из списка удаляются все последовательности физических событий и данное <em>виртуальное</em> событие не может быть более осуществлено.</p> <pre> <strong>event generate</strong> <em>окно событие параметр значение параметр значение ...</em> </pre> <p>Генерирует событие в окне и обеспечивает его обработку таким образом, как если бы оно поступило из менеджера окон. Аргумент <em>окно</em> задает имя пути окна, в котором будет генерироваться событие; его значением может быть и идентификатор окна (такой же, какой служит результатом команды <strong>winfo id</strong>), если он относится к окну в текущем приложении. Аргумент <em>событие</em> задает описание события, например, в виде <<strong>Shift-Button-2</strong>> или <<<strong>Paste</strong>>>. Аргумент <em>событие</em> может принимать любое значение, допустимое для аргумента <em>последовательность</em> команды <strong>bind</strong>, за исключением того, что он должен состоять из одного, а не из нескольких событий. Пары <em>параметр-значение</em> можно использовать для установки значений дополнительных параметров события, например, координат курсора "Мыши" ниже (см. "<a href=event.html#ПОЛЯ_СОБЫТИЯ>ПОЛЯ СОБЫТИЯ</a>"). Если параметр <strong>-when</strong> не задан, то событие обрабатывается немедленно; все программы обработки события будут выполнены до завершения команды <strong>event generate</strong>. В противном случае момент обработки определяется значением параметра <strong>-when</strong>. <pre> <strong>event info</strong> <<<em>виртуальное</em>>> </pre> <p>Возвращает информацию о виртуальных событиях. Если аргумент <strong><<</strong><em>виртуальное</em><strong>>></strong> опущен, то возвращается список всех виртуальных событий, определенных в текущий момент. Если аргумент <strong><<</strong><em>виртуальное</em><strong>>></strong> задан, то возвращаемое значение представляет собой список, элементы которого являются последовательностями физических событий, связанными с данным виртуальным событием; если указанное виртуальное событие не определено, то команда возвращает пустую строку.</p> </body> </html>