# scrollbar

Создание примитива линейки прокрутки и управление им.

## СИНТАКСИС

          scrollbar имяПути ?параметры?

## СТАНДАРТНЫЕ ПАРАМЕТРЫ

- -activebackground
- -background
- -borderwidth
- -cursor
- -highlightbackground
- -highlightcolor
- -highlightthickness
- -jump
- -orient
- -relief
- -repeatdelay
- -repeatinterval
- -takefocus
- -troughcolor

Подробное описание этих параметров приведено в разделе options.

## ДОПОЛНИТЕЛЬНЫЕ ПАРАМЕТРЫ ПРИМИТИВА

Имя параметра: | -activerelief
Имя в Базе: | activeRelief
Класс в Базе: | ActiveRelief

Задает объемный вид изображения активного элемента. Все неактивные элементы изображаются выпуклыми.

Имя параметра: | -command
Имя в Базе: | command
Класс в Базе: | Command

Задает префикс команды Tcl, исполняемой при всяком изменении состоянии линейки прокрутки пользователем. Сама команда Tcl состоит из этого префикса, за которым следует дополнительная информация, описанная ниже. Значением этого параметра обычно является что-нибудь вроде .t xview или .t yview имя примитива, за которым следует xview (для горизонтальной линейки) или yview (для вертикальной). У каждого примитива линейки прокрутки есть команды xview и yview, аргументы которых описаны ниже (см. "Команды прокрутки").

Имя параметра: | -elementborderwidth
Имя в Базе: | elementBorderWidth
Класс в Базе: | ElementBorderWidth

Задает ширину окантовки каждого из внутренних элементов линейки (обеих стрелок и движка). Значение может быть представлено в любом виде, приемлемом для Tk_GetPixels. Если заданное значение отрицательно, то вместо него используется значение параметра borderWidth.

Имя параметра: | -width
Имя в Базе: | width
Класс в Базе: | Width

Задает желаемую толщину окна линейки (не включая трехмерной окантовки, если она имеется) в любой форме, приемлемой для Tk_GetPixels. Для вертикальной шкалы это ее ширина, для горизонтальной высота.

## ОПИСАНИЕ

Команда scrollbar создает новое окно (задаваемое аргументом имяПути) и превращает его в примитив линейки прокрутки. Детали изображения линейки, такие как ее цвета, ориентация и объемный вид, задаются с помощью описанных выше дополнительных параметров. Команда возвращает аргумент имяПути. В момент выполнения этой команды не должно существовать окна с именем имяПути, но должен существовать его предок.

Линейка прокрутки представляет собой примитив, который выводит на экран две стрелки (по одной на каждом конце линейки) и движок в средней части линейки. Линейка дает информацию о том, что видно в ассоциированном окне линейки. Это окно содержит какой-нибудь документ например, редактируемый текст или рисунок. Размер и положение движка указывают, какая часть документа видна в окне. Если, например, движок покрывает верхнюю треть вертикальной линейки, то в ассоциированном окне выведена верхняя треть документа.

Линейки прокрутки используются для перемещения видимой части документа в ассоциированном окне с помощью "Мыши". Подробности описаны ниже (см. "Привязки").

## ЭЛЕМЕНТЫ

Линейка прокрутки состоит из пяти элементов, на которые ссылаются команды примитива:

arrow1
  Верхняя или левая стрелка линейки.
trough1
  Промежуток между движком и первой стрелкой.
slider
  Прямоугольник, который показывает, какая часть документа видна на экране.
trough2
  Промежуток между движком и первой стрелкой.
arrow2
  Нижняя или правая стрелка линейки.

## КОМАНДА ПРИМИТИВА

Команда scrollbar создает новую команду Tcl с именем имяПути. С помощью этой команды можно выполнять различные операции над примитивом. Ее общий вид

          имяПути параметр ?арг арг ...?

Параметр и аргументы уточняют поведение команды. Примитивы линейки прокрутки допускают следующие формы команды:

имяПути activate ?элемент?
  Помечает элемент, заданный аргументом элемент, как активный. Активный элемент отображается на экране с использованием значений параметров activeBackground и activeRelief. Значениями аргумента могут быть только arrow1, slider или arrow2. Если элемент не задан, то команда возвращает имя текущего активного элемента; если активных элементов нет, то команда возвращает пустую строку.
имяПути cget параметр
  Возвращает текущее значение параметра конфигурации с именем параметр. Параметр может быть любым из параметров команды scrollbar.
имяПути configure ?параметр? ?значение параметр значение ...?
  Запрашивает значения параметров конфигурации примитива или изменяет их. Если параметр не указан, то возвращает список, содержащий значения всех допустимых в имениПути параметров (формат списка описан в Tk_ConfigureInfo). Если параметр задан, а его новое значение нет, то команда возвращает часть полного списка, относящуюся к указанному параметру. Если заданы одна или несколько пар параметр-значение, то указанным параметрам примитива присваиваются новые значения, а команда возвращает пустую строку. Параметр может быть любым из параметров команды scrollbar.
имяПути delta прирX прирY
  Возвращает вещественное число, задающее изменение показателя линейки при данном перемещении движка. Например, если линейка горизонтальна, то результат указывает, насколько нужно изменить показатель линейки, чтобы движок сдвинулся вправо на прирX пикселей (в этом случае значение аргумента прирY игнорируется). Если линейка вертикальна, то результат указывает, насколько нужно изменить показатель линейки, чтобы движок сдвинулся вниз на прирY пикселей. Как аргументы, так и результат могут принимать отрицательные и нулевое значения.
имяПути fraction x y
  Возвращает вещественное число между нулем и единицей, указывающее, где на полосе линейки лежит точка с координатами x и y. Значение "0" соответствует самой левой или самой верхней точке полосы, значение "1" самой правой или самой нижней, "0.5" указывает на середину полосы и т.д. Координаты x и y это координаты в пикселях относительно примитива линейки. Если они задают точку вне полосы линейки, то вместо нее используется точка полосы, ближайшая к заданной.
имяПути get
  Возвращает показатели линейки в виде списка, элементы которого значения аргументов последней выполненной команды примитива set.
имяПути identify x y
  Возвращает имя элемента, занимающего точку с координатами (x,y) (например, arrow1). Если точка расположена вне линейки, то команда возвращает пустую строку. Координаты x и y это координаты в пикселах относительно примитива линейки.
имяПути set перв послед
  Эта команда выполняется примитивом, ассоциированным с линейкой, и сообщает линейке текущий вид этого примитива. Значением каждого из двух аргументов команды является число в промежутке от "0" до "1". Эти числа описывают видимую в окне примитива область документа. Если, например, значение аргумента перв равно "0.2", а значение аргумента послед равно "0.4", то верхушка видимой части документа отстоит на 20% от его начала, а конец видимой части на 40% от начала.

## КОМАНДЫ ПРОКРУТКИ

Когда пользователь взаимодействует с линейкой прокрутки (например, тащит движок), линейка требует от ассоциированного примитива изменения его состояния. Это требование осуществляется за счет исполнения команды Tcl, которая генерируется исходя из значения параметра -command примитива линейки. Команда может иметь один из следующих видов, где префикс это значение параметра -command (обычно что-нибудь вроде .t yview).

префикс moveto величина
  Величина представляет собой вещественное число между нулем и единицей. Примитив должен изменить содержимое окна таким образом, чтобы точка, заданная аргументом величина, располагалась в начале окна. Например, величина равная "0" указывает на начало документа, "1.0" на его конец, "0.333" на точку, отстоящую от начала документа на одну треть и т.д.
префикс scroll число units
  Сдвигает содержимое окна примитива на число единиц. Единицы это порции документа, имеющие смысл для документа данного типа (например, символы или строчки для текстового примитива). Аргумент число может принимать значение "1" (и тогда одна единица должна уйти из окна вверх или влево), или "-1" (и тогда одна единица должна уйти из окна вниз или вправо).
префикс scroll число pages
  Содержимое окна примитива должно сдвинуться на число страниц. Страницы это порции документа, имеющие смысл для документа данного типа; обычно размер порции несколько меньше того, что помещается в окне, и поэтому новое содержимое окна частично перекрывается со старым. Аргумент число может принимать значение "1" (и тогда становится видимой следующая страница), или "-1" (и тогда становится видимой предыдущая страница).

## СИНТАКСИС КОМАНДЫ

В младших версиях Tk (до 4.0) команды примитива set и get имели другой вид. В целях совместимости эта форма команд поддерживается и до сих пор, однако использовать ее не стоит. Вот старый вид команды:

          имяПути set числоЕдин окноЕдин первЕдин последЕдин

Значения всех аргументов команды должны быть целыми числами. Аргумент числоЕдин задает общее число единиц в документе. Единицы это порции документа, имеющие смысл для документа данного типа (например, строчки для текстового примитива). Аргумент окноЕдин указывает число единиц, одновременно помещающихся в окно ассоциированного примитива. Аргументы первЕдин и последЕдин указывают индексы первой и последней единиц, находящихся в окне в текущий момент (ноль указывает на первую единицу объекта).

В старом синтаксисе команда get возвращала список из четырех целых чисел значений аргументов последней выполненной команды примитива set.

В старом синтаксисе команды, генерируемые примитивом линейки, также имеют другой вид:

          префикс единица

Аргумент единица представляет собой целое число, указывающее, что должно появляться вверху или слева в окне ассоциированного примитива. Этот аргумент интерпретируется так же, как и аргументы первЕдин и последЕдин команды примитива set.

Последняя выполненная команда примитива set определяет, следует ли использовать старый синтаксис. Если ее аргументы два вещественных числа, то в дальнейшем будет использоваться новый синтаксис, а если четыре целых то старый.

## ПРИВЯЗКИ

При создании линейки прокрутки Tk автоматически создает привязки класса, определяющие следующее поведение примитива по умолчанию. В случае, если имеются различия в поведении вертикальной и горизонтальной линеек, описание поведения горизонтальной приводится в скобках.

- При нажатии клавиши 1 "Мыши" на стрелке 1 (arrow1) содержимое окна ассоциированного примитива сдвигается вниз (вправо) на одну единицу. Если клавишу не отпускать, то сдвиг автоматически повторяется.
- При нажатии клавиши 1 "Мыши" на полосе 1 (trough1) содержимое окна ассоциированного примитива сдвигается вниз (вправо) на один экран. Если клавишу не отпускать, то сдвиг автоматически повторяется.
- Если нажать клавишу 1 на движке, то движок можно тащить. Если значение параметра jump истина, то содержимое окна не меняется, пока не отпущена клавиша "Мыши".
- При нажатии клавиши 1 "Мыши" на полосе 2 (trough2) содержимое окна ассоциированного примитива сдвигается вверх (влево) на один экран. Если клавишу не отпускать, то сдвиг автоматически повторяется.
- При нажатии клавиши 1 "Мыши" на стрелке 2 (arrow2) содержимое окна ассоциированного примитива сдвигается вверх (влево) на одну единицу. Если клавишу не отпускать, то сдвиг автоматически повторяется.
- Если нажать клавишу 2 на полосе или на движке, то содержимое окна переходит в положение, указанное курсором "Мыши" ; если тащить курсор при нажатой клавише 2, то содержимое окна движется вслед за курсором. Нажатие клавиши 2 на стрелках приводит к тому же результату, что и нажатие клавиши 1.
- Если клавиша 1 нажимается при нажатой клавише Control, то в окне появляется начало документа (если курсор "Мыши" находится на стрелке 1 или полосе 1) или его конец (если курсор находится на стрелке 2 или полосе 2). При других положениях курсора такое нажатие на клавиши не приводит ни к каким действиям.
- В вертикальных линейках прокрутки нажатие на клавиши Up и Down приводят к такому же результату, что и щелчок "Мыши" на стрелках вверх и вниз соответственно. В горизонтальных линейках нажатие на эти клавиши не вызывает никаких действий.
- В вертикальных линейках прокрутки нажатие на клавиши Control-Up и Control-Down приводят к такому же результату, что и щелчок "Мыши" на верхней и нижней полосках линейки соответственно. В горизонтальных линейках нажатие на эти клавиши не вызывает никаких действий.
- В горизонтальных линейках прокрутки нажатие на клавиши Up и Down приводят к такому же результату, что и щелчок "Мыши" на левой и правой стрелках соответственно. В вертикальных линейках нажатие на эти клавиши не вызывает никаких действий.
- В горизонтальных линейках прокрутки нажатие на клавиши Control-Up и Control-Down приводят к такому же результату, что и щелчок "Мыши" на левой и правой полосках линейки соответственно. В вертикальных линейках нажатие на эти клавиши не вызывает никаких действий.
- Нажатие на клавиши Prior и Next приводят к такому же результату, что и щелчки "Мыши" на полосе 1 и полосе 2 соответственно.
- Нажатие на клавишу Home приводит к появлению в окне начала документа.
- Нажатие на клавишу End приводит к появлению в окне конца документа.