projman/hlp/ru/tk/bind.html
2018-02-05 17:23:37 +03:00

608 lines
39 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>bind</title>
</head>
<body>
<h1>bind</h1>
<p>Команда <strong>bind</strong> позволяет привязать выполнение
скриптов Tcl к X событиям. Команда назначает событиям ввода от
&quot;Мыши&quot; и клавиатуры (Х событиям) исполнение скрипта
Tcl.</p>
<h2><a name="СИНТАКСИС"></a>СИНТАКСИС</h2>
<pre>
<strong>bind</strong> <em>тег</em>
<strong>bind</strong> <em>тег последовательность</em>
<strong>bind</strong> <em>тег последовательность скрипт</em>
<strong>bind</strong> <em>тег последовательность +скрипт</em>
</pre>
<h2><a name="ОПИСАНИЕ"></a>ОПИСАНИЕ</h2>
<p>Команда <strong>bind</strong> привязывает Tcl скрипты к X
событиям. Если заданы все три аргумента команды, то при каждом
наступлении события <em>последовательность</em> в окне (окнах),
описанных <em>тег</em>ом, будет выполняться <em>скрипт</em>
(скрипт Tcl). Если аргументу <em>скрипт</em> предшествует знак
+, то скрипт добавляется к уже существующим привязкам к
<em>последовательности</em>; в противном случае он замещает все
имеющиеся привязки. Если аргумент <em>скрипт</em> пуст, то все
имеющиеся привязки к <em>последовательности</em> отменяются, и
<em>последовательность</em> становится несвязанной. Если
аргумент <em>скрипт</em> присутствует, то команда
<strong>bind</strong> возвращает пустую строку.</p>
<p>Если при отсутствии аргумента <em>скрипт</em> аргумент
<em>последовательность</em> задан, то команда возвращает скрипт,
привязанный к данной последовательности, или, в случае
отсутствия такого скрипта, пустую строку. Если не задан ни один
из аргументов <em>последовательность</em> и <em>скрипт</em>, то
команда возвращает список, элементами которого служат все
последовательности, имеющие привязки к окну <em>тег</em>.</p>
<p>Аргумент <em>тег</em> перечисляет окна, к которым выполняется
привязка. Если значение аргумента начинается с точки, скажем
&quot;.a.b.c&quot;, то оно должно представлять собой путь к
окну; в противном случае оно может быть произвольной
строкой. Каждому окну приписан некоторый список тегов, и
привязка к данному окну осуществляется, если значение аргумента
<em>тег</em> присутствует в этом списке. Команда <a
href="bindtags.html"><strong>bindtags</strong></a> позволяет
приписать окну произвольный набор тегов привязки; кроме того, по
умолчанию окнам приписаны следующие теги:</p>
<ul>
<li>тег, являющийся именем внутреннего окна, приписывается этому
окну;</li>
<li>тег, являющийся именем окна верхнего уровня, приписывается
этому окну и всем его внутренним окнам;</li>
<li>тег, являющийся именем класса примитивов, скажем
<strong>Button</strong>, приписывается всем примитивам этого
класса;</li>
<li>тег с именем <strong>all</strong> приписывается всем окнам
приложения.</li>
</ul>
<h2><a name="ОБРАЗЦЫ_СОБЫТИЙ"></a>ОБРАЗЦЫ СОБЫТИЙ</h2>
<p>Аргумент <em>последовательность</em> представляет собой
последовательность одного или нескольких образцов
событий. Каждый образец может быть записан в одном из трех
видов. В простейшем случае это символ ASCII, скажем
<strong>a</strong> или <strong>|</strong>. Этот символ не может
быть пробелом или знаком &lt;. Этот вид образцов соответствует
событию <strong>KeyPress</strong> для конкретной
клавиши. Образцы второго вида длиннее, однако, этот вид носит
более общий характер. Его синтаксис выглядит следующим
образом:</p>
<pre>
&lt;<em>модификатор-модификатор-тип-детализация</em>&gt;
</pre>
<p>Образец события целиком заключен в угловые скобки. Внутри
угловых скобок располагаются несколько модификаторов (быть
может, ни одного), тип события и дополнительная порция
информации (<em>детализация</em>), указывающая конкретную кнопку
или комбинацию клавиш. Одно из полей <em>тип</em> или
<em>детализация</em> должно обязательно присутствовать,
остальные могут быть опущены. Поля разделяются пробелами или
дефисами.</p>
<p>Третья форма образца используется для задания поименованного
виртуального события, определенного пользователем. У нее
следующий синтаксис:</p>
<pre>
&lt;&lt;<em>имя</em>&gt;&gt;
</pre>
<p>Образец события целиком заключен в двойные угловые скобки.
Внутри этих скобок содержится определенное пользователем имя
виртуального события. С виртуальным событием нельзя
комбинировать модификаторы, такие как <strong>Shift</strong>или
<strong>Control</strong>. Привязки к виртуальному событию можно
создавать до описания самого события; при динамическом изменении
этого описания все окна, привязанные к событию, будут обращаться
к новому описанию.</p>
<h2><a name="МОДИФИКАТОРЫ"></a>МОДИФИКАТОРЫ</h2>
<p>Модификаторы могут быть следующими:</p>
<ul>
<li><strong>Alt</strong></li>
<li><strong>Button1</strong>, <strong>B1</strong></li>
<li><strong>Button2</strong>, <strong>B2</strong></li>
<li><strong>Button3</strong>, <strong>B3</strong></li>
<li><strong>Button4</strong>, <strong>B4</strong></li>
<li><strong>Button5</strong>, <strong>B5</strong></li>
<li><strong>Control</strong></li>
<li><strong>Double</strong></li>
<li><strong>Lock</strong></li>
<li><strong>Meta</strong>, <strong>M</strong></li>
<li><strong>Mod1</strong>, <strong>M1</strong></li>
<li><strong>Mod2</strong>, <strong>M2</strong></li>
<li><strong>Mod3</strong>, <strong>M3</strong></li>
<li><strong>Mod4</strong>, <strong>M4</strong></li>
<li><strong>Mod5</strong>, <strong>M5</strong></li>
<li><strong>Shift</strong></li>
<li><strong>Triple</strong></li>
</ul>
<p>Если в строке приведено несколько элементов, разделенных
запятыми, то они взаимозаменяемы. У большинства модификаторов
есть очевидное X значение. Например, модификатор
<strong>Button1</strong> требует нажатия кнопки 1 для
наступления события. Чтобы привязка соответствовала данному
событию, среди модификаторов события должны содержаться все
модификаторы, заданные в образце события. Кроме того событие
может содержать и другие модификаторы, не приведенные в описании
привязки. Например, при нажатии кнопки 1 одновременно с нажатием
клавиш <strong>Shift</strong> и <strong>Ctrl</strong> событие
подойдет под образец &lt;<strong>Control-Button-1</strong>&gt;,
но не подойдет под образец
&lt;<strong>Mod1-Button-1</strong>&gt;. Если ни один из
модификаторов не был задан, то в событии может присутствовать
любая комбинация модификаторов.</p>
<p>Модификаторы <strong>Meta</strong> и <strong>M</strong>
заменяют любой из идентификаторов от <strong>M1</strong> до
<strong>M5</strong>, ассоциированный с метаклавишами на
клавиатуре (коды клавиш <strong>Meta_R</strong> и
<strong>Meta_L</strong>). При отсутствии метаклавиш или в
случае, если они не ассоциированы ни с каким модификатором,
модификаторы <strong>Meta</strong> и <strong>M</strong> не будут
соответствовать никакому событию. Аналогично модификатор
<strong>Alt</strong> заменяет любой из модификаторов,
ассоциированных с alt-клавишами на клавиатуре (коды клавиш
<strong>Alt_L</strong> и <strong>Alt_R</strong>).</p>
<p>Модификаторы <strong>Double</strong>и <strong>Triple</strong>
обеспечивают удобную обработку двойного щелчка .Мыши. и других
повторяющихся событий. Они требуют, чтобы данное событие
повторилось дважды или трижды, и накладывают ограничения на
время и место его повторения: для того, чтобы последовательность
событий подходила под образец <strong>Double</strong> или
<strong>Triple</strong>, промежуток времени между событиями
должен быть коротким, а &quot;Мышь&quot; не должна сдвигаться. Например,
комбинация &lt;<strong>Double-Button-1</strong>&gt; эквивалентна
паре &lt;<strong>Button-1<em>&gt;&lt;</em>Button-1</strong>&gt;
с дополнительными временными и пространственными
ограничениями.</p>
<h2><a name="ТИПЫ_СОБЫТИЙ"></a>ТИПЫ СОБЫТИЙ</h2>
<p>Значением поля <em>тип</em> может быть любой из стандартных
типов X событий, а также некоторые дополнительные
сокращения. Ниже приведен список всех допустимых значений. Два
имени, составляющие пару, синонимичны.</p>
<ul>
<li><strong>Activate</strong></li>
<li><strong>Button</strong></li>
<li><strong>ButtonPress</strong></li>
<li><strong>ButtonRelease</strong></li>
<li><strong>Circulate</strong></li>
<li><strong>Colormap</strong></li>
<li><strong>Configure</strong></li>
<li><strong>Deactivate</strong></li>
<li><strong>Destroy</strong></li>
<li><strong>Enter</strong></li>
<li><strong>Expose</strong></li>
<li><strong>FocusIn</strong></li>
<li><strong>FocusOut</strong></li>
<li><strong>Gravity</strong></li>
<li><strong>Key Unmap</strong></li>
<li><strong>KeyPress</strong></li>
<li><strong>KeyRelease</strong></li>
<li><strong>Leave</strong></li>
<li><strong>Map</strong></li>
<li><strong>Motion</strong></li>
<li><strong>Property</strong></li>
<li><strong>Reparent</strong></li>
<li><strong>Visibility</strong></li>
</ul>
<p>Последней частью длинной спецификации события является
<em>детализация</em>. Для типов <strong>ButtonPress</strong> и
<strong>ButtonRelease</strong> это номер кнопки (1-5). Если
номер кнопки задан, то под образец подойдет только событие на
указанной кнопке; если номер кнопки не задан, то под образец
подойдет событие на любой из кнопок. Замечание: задание номера
кнопки отличается от задания модификатора кнопки: в первом
случае требуется, чтобы кнопка была нажата или отжата; во втором
чтобы какая-то другая кнопка была отжата при наступлении
события. Если номер кнопки задан, то поле <em>тип</em> можно
опустить: по умолчанию оно будет иметь значение
<strong>ButtonPress</strong>. Например, спецификатор
&lt;<strong>1</strong>&gt; эквивалентен спецификатору
&lt;<strong>ButtonPress-1</strong>&gt;.
<p>Для типов <strong>KeyPress</strong> и
<strong>KeyRelease</strong> детализацию можно указать в виде
описателя X клавиши. В их число входят все алфавитно-цифровые
символы ASCII (например, описатель <strong>a</strong> служит для
описания символа ASCII &quot;a&quot;), а также описатели для
неалфавитно-цифровых символов (описатель <strong>comma</strong>
для запятой) и описатели для всех не ASCII-клавиш клавиатуры
(<strong>Shift_L</strong> для левой клавиши верхнего регистра,
<strong>F1</strong> для первой функциональной клавиши при ее
наличии). Мы не приводим здесь полный список клавиш. Он меняется
от системы к системе, и его можно найти в других частях X
документации. При необходимости можно получить описатель клавиши
с помощью обозначения <strong>%K</strong>, описанного ниже. Если
приведена <em>детализация</em> описателя клавиши, то поле
<em>тип</em> может отсутствовать, по умолчанию принимается
значение <strong>KeyPress</strong>. Например, спецификатор
&lt;<strong>Control-comma</strong>&gt; эквивалентен
спецификатору &lt;<strong>Control-KeyPress-comma</strong>&gt;.</p>
<h2><a name=ОДСТАНОВКИ_И_СКРИПТЫ_ПРИВЯЗКИ"></a>ПОДСТАНОВКИ И СКРИПТЫ ПРИВЯЗКИ</h2>
<p>Аргумент <em>скрипт</em> команды <strong>bind</strong> должен
быть скриптом Tcl; при каждом наступлении события происходит
выполнение этого скрипта. <em>Команда</em> выполняется тем же
интерпретатором, что и команда <strong>bind</strong>, причем
интерпретация происходит на верхнем уровне (доступны только
значения глобальных переменных). Если в <em>скрипт</em>е есть
символы <strong>%</strong>, то его исполнение не будет
осуществляться непосредственно. Каждый символ <strong>%</strong>
и символ, следующий за ним, заменяются данными о происшедшем
событии, в результате чего генерируется новый
скрипт. Подстановка осуществляется в соответствии с приводимым
ниже списком символов. Если не оговорено противное, то
подставляемая строка представляет собой десятичное содержимое
указанного поля события. Некоторые подстановки допустимы только
для событий определенных типов: при использовании их с событиями
других типов результат подстановки не определен.</p>
<dl>
<dt><strong>%%</strong></dt>
<dd>Заменяется однократным процентом.</dd>
<dt><strong>%#</strong></dt>
<dd>Номер последнего обработанного сервером запроса клиента
(<em>сериальное</em> поле события). Допустимо для событий всех
типов.</dd>
<dt><strong>%a</strong></dt>
<dd>Поле <em>выше</em> события, отформатированное как
шестнадцатеричное число. Допустимо только для событий
<strong>Configure</strong>.</dd>
<dt><strong>%b</strong></dt>
<dd>Номер нажатой или отпущенной кнопки. Допустимо только для
событий <strong>ButtonPress</strong> и
<strong>ButtonRelease</strong>.</dd>
<dt><strong>%c</strong></dt>
<dd>Поле <em>счетчик</em> события. Допустимо только для событий
<strong>Expose</strong>.</dd>
<dd><strong>%d</strong></dd>
<dd>Поле <em>детализация</em> события. Символы
<strong>%d</strong> заменяются строкой детализации. Для
событий <strong>Enter</strong>, <strong>Leave</strong>,
<strong>FocusIn</strong>, <strong>FocusOut</strong> строка
должна быть одной из следующих:
<strong>NotifyAncestor</strong>,
<strong>NotifyNonlinearVirtual</strong>
<strong>NotifyDetailNone</strong>,
<strong>NotifyPointer</strong>,
<strong>NotifyInterior</strong>,
<strong>NotifyPointerRoot</strong>,
<strong>NotifyNonlinear</strong>,
<strong>NotifyVirtual</strong>.
<p>Для прочих событий подставляемая строка не определена.</p>
</dd>
<dt><strong>%f</strong></dt>
<dd>Поле <em>фокус</em> события (<strong>0</strong> или
<strong>1</strong>). Допустимо только для событий
<strong>Enter</strong> и <strong>Leave</strong>.</dd>
<dt><strong>%h</strong></dt>
<dd>Поле <em>высота</em> события. Допустимо только для событий
<strong>Configure</strong> и <strong>Expose</strong>.</dd>
<dt><strong>%k</strong></dt>
<dd>Поле <em>код_клавиши</em> события. Допустимо только для
событий <strong>KeyPress</strong> и
<strong>KeyRelease</strong>.</dd>
<dt><strong>%m</strong></dt>
<dd>Поле <em>режим</em> события. Подставляется одна из строк
<strong>NotifyNormal</strong>, <strong>NotifyGrab</strong>,
<strong>NotifyUngrab</strong> или
<strong>NotifyWhileGrabbed</strong>. Допустимо только для
событий <strong>Enter</strong>, <strong>FocusIn</strong>,
<strong>FocusOut</strong> и <strong>Leave</strong>.</dd>
<dt><strong>%o</strong></dt>
<dd>Поле <em>подавить_перенаправление</em> события.Допустимо
только для событий <strong>Map</strong>,
<strong>Reparent</strong> и <strong>Configure</strong>.</dd>
<dt><strong>%p</strong></dt>
<dd>Поле <em>размещать</em> события. Строка подстановки имеет
вид <strong>PlaceOnTop</strong> или
<strong>PlaceOnBottom</strong>. Допустимо только для событий
<strong>Circulate</strong>.</dd>
<dt><strong>%s</strong></dt>
<dd>Поле <em>состояние</em> события. Для событий
<strong>ButtonPress</strong>, <strong>ButtonRelease</strong>,
<strong>Enter</strong>, <strong>KeyPress</strong>,
<strong>KeyRelease</strong>, <strong>Leave</strong> и
<strong>Motion</strong> происходит подстановка десятичного
числа. Для события <strong>Visibility</strong> подставляется
одна из строк <strong>isibilityUnobscured</strong>,
<strong>VisibilityPartiallyObscured</strong> или
<strong>VisibilityFullyObscured</strong>.</dd>
<dt><strong>%t</strong></dt>
<dd>Поле <em>время</em> события. Допустимо только для событий,
содержащих поле <em>время</em>.</dd>
<dt><strong>%w</strong></dt>
<dd>Поле <em>ширина</em> события. Допустимо только для событий
<strong>Configure</strong> и <strong>Expose</strong>.</dd>
<dt><strong>%x</strong></dt>
<dd>Поле <em>x</em> события. Допустимо только для событий,
содержащих поле <em>x</em>.</dd>
<dt> <strong>%y</strong></dt>
<dd> Поле <em>y</em> события.Допустимо только для событий,
содержащих поле <em>y</em>.</dd>
<dt><strong>%A</strong></dt>
<dd>Заменяется символом ASCII, отвечающим происшедшему
событию,или пустой строкой, если событию не соответствует
никакой символ ASCII (например, нажата клавиша верхнего
регистра). Работу по переводу события в ASCII символ выполняет
<strong>XLookupString</strong>. Допустимо только для событий
<strong>KeyPress</strong> и <strong>KeyRelease</strong>.</dd>
<dt><strong>%B</strong></dt>
<dd>Поле <em>ширина_бордюра</em> события.Допустимо только для
событий <strong>Configure</strong>.</dd>
<dt><strong>%E</strong></dt>
<dd>Поле <em>послать_событие</em> события.Допустимо для событий
всех типов.</dd>
<dt><strong>%K</strong></dt>
<dd>Код клавиши, соответствующей данному событию, представленный
текстовой строкой. Допустимо только для событий
<strong>KeyPress</strong> и <strong>KeyRelease</strong>.</dd>
<dt><strong>%N</strong></dt>
<dd>Код клавиши, соответствующей данному событию, представленный
десятичным числом. Допустимо только для событий
<strong>KeyPress</strong> и <strong>KeyRelease</strong>.</dd>
<dt> <strong>%R</strong></dt>
<dd>Идентификатор корневого окна события.Допустимо только для
событий содержащих поле <em>корень</em>.</dd>
<dt> <strong>%S</strong></dt>
<dd>Идентификатор подокна события, представленный в виде
шестнадцатиричного числа. Допустимо только для событий
содержащих поле <em>подокно</em>.</dd>
<dt><strong>%T</strong></dt>
<dd>Поле <em>тип</em> события. Допустимо для событий всех
типов.</dd>
<dt><strong>%W</strong></dt>
<dd>Путь к окну, к которому отнесено событие (поле <em>окно</em>
события). Допустимо для событий всех типов.</dd>
<dt> <strong>%X</strong></dt>
<dd>Поле <em>x_корень</em> события. При использовании
виртуально-корневого менеджера окон подставляемое значение
равняется x-координате в виртуальном корне. Допустимо только
для событий <strong>ButtonPress</strong>,
<strong>ButtonRelease</strong>, <strong>KeyPress</strong>,
<strong>KeyRelease</strong> и <strong>Motion</strong>.</dd>
<dt><strong>%Y</strong></dt>
<dd>Поле <em>y_корень</em> события. При использовании
виртуально-корневого менеджера окон подставляемое значение
равняется y-координате в виртуальном корне. Допустимо только
для событий <strong>ButtonPress</strong>,
<strong>ButtonRelease</strong>, <strong>KeyPress</strong>,
<strong>KeyRelease</strong> и <strong>Motion</strong>.</dd>
</dl>
<p>Строка подстановки для %-замещения форматируется как обычный
элемент списка Tcl. Это означает, что при наличии в строке
пробелов она заключается в фигурные скобки, а специальным
символам, таким как `$' и `{' может предшествовать обратная
косая черта. Такая строка нормально обрабатывается
синтаксическим анализатором Tcl при выполнении скрипта. Строки
подстановки по большей части являются числами или корректно
определенными строками как, например, <strong>Above</strong>;
такие строки не нуждаются ни в каком специальном
форматировании. Чаще всего форматирования требуют строки,
замещающие <strong>%A</strong>. Если, например, скрипт имеет
вид</p>
<pre>insert %A</pre>
<p>и вводимым символом является открывающая квадратная скобка, то
реально исполняемым скриптом будет</p>
<pre>insert \[</pre>
<p>т.е. в качестве первого аргумента <strong>insert</strong>
получит исходную строку подстановки (открывающую квадратную
скобку). Если бы обратная косая черта не была добавлена, Tcl не
смог бы правильно обработать скрипт.</p>
<h2><a name="НЕСКОЛЬКОРИВЯЗОК_ОТВЕЧАЮЩИХ_ОБРАЗЦУ"></a>НЕСКОЛЬКО ПРИВЯЗОК, ОТВЕЧАЮЩИХ ОБРАЗЦУ</h2>
<p>Данному X событию может отвечать несколько привязок. Если эти
привязки соответствуют различным <em>тег</em>ам, то все они
выполняются по очереди. По умолчанию сначала исполняется
привязка для примитива, затем привязка класса, затем привязка
верхнего уровня и привязка <strong>all</strong>. Этот порядок
для конкретного окна можно поменять с помощью команды <a
href="bindtags.html"><strong>bindtags</strong></a>, которая
позволяет также выполнить дополнительные привязки к окну.</p>
<p>Управление обработкой скриптов, отвечающих образцу,
осуществляется командами <a
href="../tcl/continue.html"><strong>continue</strong></a> и <a
href="../tcl/break.html"><strong>break</strong></a> в
привязанном скрипте. При выполнении команды <a
href="../tcl/continue.html"><strong>continue</strong></a>
выполнение текущего привязанного скрипта прерывается и Tk
переходит к выполнению скриптов, соответствующих остальным
<em>тег</em>ам. При выполнении команды <a
href="../tcl/break.html"><strong>break</strong></a> выполнение
текущего привязанного скрипта прерывается и никакие другие
скрипты не выполняются.</p>
<p>Если данному событию соответствует несколько привязок с одним и
тем же тегом, то из них выбирается наиболее конкретная привязка
и выполняется ее скрипт. Выбор наиболее конкретной привязки
осуществляется по следующим критериям:</p>
<ol type="a">
<li>образец события, задающий конкретную кнопку или клавишу,
более конкретен, чем тот, в котором такой спецификации не
задано;</li>
<li>более длинная последовательность (по числу отвечающих
образцу событий) конкретнее более короткой;</li>
<li>если модификаторы первого образца содержатся среди
модификаторов второго, то образец с большим числом
модификаторов более конкретен;</li>
<li>виртуальное событие, физический образец которого
соответствует последовательности, менее конкретно, чем тот же
самый физический образец, не связанный ни с каким виртуальным
событием;</li>
<li><p>если последовательность отвечает двум или более
виртуальным событиям, то из них выбирается какое-нибудь
одно, однако порядок выбора не определен.</p>
<p>Если в подходящей последовательности событий больше одного
события, то критерии 1 - 5 применяются ко всем событиям,
начиная с самого последнего и до самого первого события
последовательности. Если критерии не позволяют определить
победителя, то победителем становится событие,
зарегистрированное последним.</p>
</ol>
<p>Если одна и та же последовательность осуществляет переключение
к двум (или более) виртуальным событиям, и теги окон этих
виртуальных событий совпадают, то переключение произойдет лишь к
одному из этих виртуальных событий, выбранному случайным
образом:</p>
<pre>
event add &lt;&lt;Paste&gt;&gt; &lt;Control-y&gt;
event add &lt;&lt;Paste&gt;&gt; &lt;Button-2&gt;
event add &lt;&lt;Scroll&gt;&gt; &lt;Button-2&gt;
bind Entry &lt;&lt;Paste&gt;&gt; {puts Paste}
bind Entry &lt;&lt;Scroll&gt;&gt; {puts Scroll}
</pre>
<p>При нажатии <strong>Control-y</strong> будет выполнена привязка
&lt;&lt;<strong>Paste</strong>&gt;&gt;, а при нажатии кнопки 2
одна из привязок &lt;&lt;<strong>Paste</strong>&gt;&gt; или
&lt;&lt;<strong>Scroll</strong>&gt;&gt;, причем определить какой
именно будет эта привязка, невозможно.</p>
<p>Если X событие не подходит ни под одну из существующих
привязок, то событие игнорируется. Наступление не привязанного
события не считается ошибкой.</p>
<h2><a name=ОСЛЕДОВАТЕЛЬНОСТИ_НЕСКОЛЬКИХ_СОБЫТИЙ_И_ИГНОРИРУЕМЫЕ_СОБЫТИЯ"></a>ПОСЛЕДОВАТЕЛЬНОСТИ НЕСКОЛЬКИХ СОБЫТИЙ И ИГНОРИРУЕМЫЕ СОБЫТИЯ</h2>
<p>Если аргумент <em>последовательность</em> в команде
<strong>bind</strong> состоит из нескольких образцов событий, то
скрипт выполняется в случае, если последние события (включая
самое последнее) подходят под данную последовательность. Это
означает, например, что при неоднократном последовательном
нажатии кнопки 1 каждое из нажатий, за исключением самого
первого, отвечает образцу
&lt;<strong>Doudble-ButtonPress-1</strong>&gt;. Если в
последовательности событий происходят посторонние события, то
они игнорируются, за исключением событий
<strong>KeyPress</strong> и <strong>ButtonPress</strong>.
Например, нажатия на кнопку 1 будут соответствовать образцу
&lt;<strong>Doudble-ButtonPress-1</strong>&gt;, даже если их
перемежают события <strong>ButtonRelease</strong> или
<strong>Motion</strong>. Кроме того событию
<strong>KeyPress</strong>может предшествовать произвольная
последовательность событий <strong>KeyPress</strong> для
модификаторов, среди которых нет модификаторов, нарушающих
соответствие образцу. Например, последовательности событий
<strong>aB</strong> отвечает нажатие на клавишу
<strong>a</strong>, отпускание клавиши <strong>a</strong>,
нажатие на клавишу <strong>Shift</strong> и нажатие на клавишу
<strong>b</strong>, так как нажатие на клавишу модификатора
<strong>Shift</strong> игнорируется. И, наконец, если
последовательно происходит несколько событий
<strong>Motion</strong>, то для установления соответствия
привязке берется последнее из них.</p>
<h2><a name="ОШИБКИ"></a>ОШИБКИ</h2>
<p>При возникновении ошибки в процессе исполнения привязанного
скрипта для выдачи сообщения об ошибке используется механизм <a
href="../tcl/bgerror.html"><strong>bgerror</strong></a>. Команда
<a href="../tcl/bgerror.html"><strong>bgerror</strong></a>
исполняется на верхнем уровне (вне контекста любой из процедур
Tcl).</p>
</body>
</html>