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

127 lines
8.6 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>focus</title>
</head>
<body>
<h1>focus</h1>
<p>Управление фокусом ввода.</p>
<h2><a name=СИНТАКСИС></a>СИНТАКСИС</h2>
<pre>
<strong>focus</strong>
<strong>focus</strong> <em>окно</em>
<strong>focus</strong> <em>параметр арг арг ...</em>
</pre>
<h2><a name=ОПИСАНИЕ></a>ОПИСАНИЕ</h2>
<p>Команда <strong>focus</strong> используется для управления
фокусом ввода Tk. В любой момент времени одно из окон на каждом
экране находится в фокусе ввода; всякое событие нажатия или
отпускания клавиши интерпретируются в этом окне. Обычно
переключение фокуса между окнами верхнего уровня на экране
осуществляется менеджером окон. Например, некоторые менеджеры
окон автоматически переключают фокус на окно верхнего уровня,
как только на него попадает курсор Мыши; другие устанавливают
фокус только при щелчке на окне. Обычно менеджер окон
устанавливает фокус только на окнах верхнего уровня, а
переключением фокуса между подчиненными окнами занимается
конкретное приложение.</p>
<p>Для каждого верхнего уровня Tk запоминает одно окно в фокусе
(последнего наследника данного верхнего уровня, в которое попал
фокус); когда менеджер окон переключает фокус на данный верхний
уровень, Tk автоматически устанавливает его на запомненное
окно. Внутри конкретного верхнего уровня Tk использует явное
моделирование фокуса по умолчанию. Обычно перемещение курсора
&quot;Мыши&quot; без изменения верхнего уровня не приводит к переключению
фокуса; переключение происходит, лишь если его запросил примитив
(например, в результате щелчка по кнопке &quot;Мыши&quot; ) или если
пользователь нажал, например, клавишу <strong>Tab</strong>.
</p>
<p>Неявная модель фокусировки создается процедурой <strong>Tcl
tk_focusFollowsMouse;</strong> она меняет параметры конфигурации
Tk таким образом, чтобы фокус устанавливался на окно при
попадании на него курсора &quot;Мыши&quot;.Процедуры
<strong>Tcl</strong> <strong>tk_focusNext</strong> и
<strong>tk_focusPrev</strong> устанавливают порядок переключения фокуса
между окнами верхнего уровня. Эти процедуры определяют, помимо
прочего, привязки по умолчанию к клавишам <strong>Tab</strong> и
<strong>Shift-Tab</strong>.</p>
<p>Команда <strong>focus</strong> может принимать одну из
следующих форм:</p>
<dl>
<dt> <strong>focus</strong></dt>
<dd>Возвращает имя пути окна в фокусе на дисплее, содержащем
главное окно приложения, или пустую строку, если никакое окно
данного приложения не находится в фокусе. Замечание: дисплей
лучше указать явно с помощью параметра
<strong>-displayof</strong> (см.ниже); в этом случае команда
сможет работать и в приложениях, использующих несколько
дисплеев.</dd>
<dt><strong>focus</strong> <em>окно</em></dt>
<dd>Если одно из окон данного приложения находится в фокусе на
дисплее окна, то команда устанавливает фокус ввода на
<em>окно</em> и возвращает пустую строку. Если же у приложения
не было фокуса ввода на дисплее окна, то окно будет запомнено
как окно в фокусе для данного верхнего уровня. При попадании
фокуса на данный верхний уровень в очередной раз Tk установит
его на окно. Если аргументом является пустая строка, то
команда не выполняет никаких действий.</dd>
<dt> <strong>focus -displayof</strong> <em>окно</em></dt>
<dd>Возвращает имя <em>окна</em> в фокусе на дисплее, содержащем
окно. Если <em>окно</em> в фокусе на дисплее окна не
принадлежит данному приложению, то команда возвращает пустую
строку.</dd>
<dt> <strong>focus -force</strong> <em>окно</em></dt>
<dd>Устанавливает <em>окно</em> в фокус на дисплее окна, даже
если у приложения нет фокуса ввода на этом дисплее. Эту
команду следует использовать экономно или отказаться от его
использования совсем. Обычно приложение не должно запрашивать
для себя фокус самостоятельно, дожидаясь пока на него не
переключит фокус менеджер окон. Если аргументом является
пустая строка, то команда не выполняет никаких действий.</dd>
<dt> <strong>focus -lastfor</strong> <em>окно</em></dt>
<dd>Возвращает имя <em>окна</em> , последним получившим фокус
ввода среди всех окон того же верхнего уровня, что и
окно. Если ни на какое из окон данного верхнего уровня фокус
не устанавливался или если окно, на которое фокус
устанавливался последним, удалено, то команда возвращает имя
верхнего уровня. Возвращаемое значение является именем окна,
на котором будет установлен фокус ввода при следующей передаче
фокуса на данный верхний уровень менеджером окна.</dd>
</dl>
<h2><a name=ОСОБЕННОСТИ_РЕАЛИЗАЦИИ></a>ОСОБЕННОСТИ РЕАЛИЗАЦИИ</h2>
<p>При получении фокуса ввода внутренним окном Tk фактически не
устанавливает X фокус на это окно. X ведет себя таким образом,
что фокус сохранится на окне верхнего уровня, которому
подчиняется окно с фокусом. Однако Tk создает события FocusIn и
FocusOut в точности, как если бы X фокус был на внутреннем
окне. Такой подход порождает ряд трудностей при фактическом
переключении X фокуса; то, что X фокус установлен на данный
верхний уровень, незаметно, если не запрашивать X сервер
непосредственно из C программы.
</p>
</body>
</html>