<!DOCTYPE html PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN>
<html>
  <head>
    <title>pack-old</title>
  </head>
  <body>
    <h1>pack-old</h1>

    <p>Устаревшая команда для геометрического менеджера упаковки
      окон.</p>

    <h2><a name=СИНТАКСИС></a>СИНТАКСИС</h2>

    <pre>
      <strong>pack after</strong> sibling <em>окно параметры</em> ?<em>окно параметры...</em>?
      <strong>pack append</strong> parent <em>окно параметры</em> ?<em>окно параметры...</em>?
      <strong>pack before</strong> sibling <em>окно параметры</em> ?<em>окно параметры...</em>?
      <strong>pack unpack</strong> <em>окно</em>
    </pre>

    <h2><a name=ОПИСАНИЕ></a>ОПИСАНИЕ</h2>

    <p><strong>Замечание</strong>. Ниже описан синтаксис команды
      <strong>pack</strong>, употреблявшейся в версиях Tk до 3.3. Хотя
      в целях совместимости поддержка команды в системе сохранена,
      команда является устаревшей и использовать ее не
      следует. Возможно, в будущем ее поддержка
      прекратится.</p>

    <p>Упаковщик представляет собой геометрический менеджер,
      предназначенный для размещения непосредственных потомков
      примитива по сторонам примитива в порядке их появления. Первый
      потомок размещается вдоль одной стороны примитива, занимая всю
      протяженность окна вдоль этой стороны. В результате, для
      следующих потомков остается усеченное окно, как если бы
      выбранная сторона сдвинулась внутрь на размер первого
      потомка. Вдоль одной из сторон оставшейся области размещается
      второй потомок, и так далее до тех пор, пока не будут размещены
      все потомки или пока не исчерпается свободное место.</p>

    <p>Формы <strong>before</strong>, <strong>after</strong> и
      <strong>append</strong> команды <strong>pack</strong>
      используются для вставки одного или нескольких непосредственных
      потомков в очередь упаковки их родителя. В форме
      <strong>before</strong> команда вставляет окно-потомка перед
      родственными узлами; все остальные окна должны быть узлами
      одного уровня. В форме <strong>after</strong> окна вставляются
      после родственных узлов, а в форме <strong>append</strong>
      добавляет одно или несколько окон к очереди упаковки их
      <em>родителя</em>. Если <em>окно</em>, указанное в любой из этих
      команд уже упаковано в родительское окно, то оно удаляется со
      своего текущего положения в порядке упаковки и перемещается в
      соответствии с командой. Все эти команды возвращают в качестве
      результата пустую строку.</p>

    <p>Форма <strong>unpack</strong> команды <strong>pack
      command</strong> удаляет <em>окно</em> из очереди упаковки его
      родителя и стирает его с экрана. После выполнения этой команды
      упаковщик более не управляет геометрией <em>окна</em>.</p>

    <p>На самом деле, размещение каждого потомка представляет собой
      четырехступенчатую процедуру; значение <em>параметра</em>,
      следующего за <em>окном</em>, представляет собой список из
      одного или нескольких полей, управляющих размещением окна. В
      нижеследующем обсуждении термин <em>полость</em> (cavity)
      обозначает место в окне-родителе, оставшееся после размещения
      конкретного потомка (т.е. все то место, которое не было
      запрошено при размещении предыдущих потомков в очереди). Термин
      <em>доля</em> (parcel) обозначает количество места,
      отведенного конкретному потомку; это количество не обязательно
      соответствует окончательной геометрии окна-потомка.</p>

    <p>Первый шаг в размещении потомка состоит в выборе стороны
      полости, вдоль которой он будет располагаться. Для указания
      стороны можно пользоваться любым из следующих параметров:</p>

    <dl>
      <dt><strong>top</strong></dt>

      <dd>Отводит долю потомка у верхней стороны полости на всю ширину
	полости.</dd>

      <dt><strong>bottom</strong> </dt>

      <dd>Отводит долю потомка у нижней стороны полости на всю ширину
	полости.</dd>

      <dt> <strong>left</strong> </dt>

      <dd>Отводит долю потомка у левой стороны полости на всю высоту
	полости.</dd>

      <dt> <strong>right</strong> </dt>

      <dd>Отводит долю потомка у правой стороны полости на всю высоту
	  полости.</dd>
    </dl>
    
    <p>Для каждого окна следует задать ровно один из этих
      параметров. Значением стороны по умолчанию является
      <strong>top</strong>. Второй шаг состоит в определении доли
      потомка. Для <strong>верхнего</strong> и
      <strong>нижнего</strong> окон желательная ширина доли обычно
      совпадает с шириной полости, а желательная высота совпадает с
      запрошенной высотой доли, которая передается команде
      Tk_GeometryRequest. Для <strong>левого</strong> и
      <strong>правого</strong> окон желательная высота доли обычно
      совпадает с высотой полости, а желательная ширина совпадает с
      запрошенной шириной доли. Однако с помощью каждого из описанных
      ниже параметров для окна можно запросить дополнительное
      место:</p>

    <dl>
      <dt><strong>padx</strong> <em>число</em> </dt>

      <dd>Добавляет <em>число</em> пикселей к запрошенной
	ширине окна перед вычислением размера доли, как это было описано
	выше.</dd>

      <dt><strong>pady</strong> <em>число</em></dt>

      <dd>Добавляет <em>число</em> пикселей к запрошенной высоте окна
	перед вычислением размера доли, как это было описано
	выше.</dd>

      <dt><strong>expand</strong></dt>

      <dd>Этот параметр указывает на то, что доля окна захватывает все
	свободное пространство, оставшееся в полости окна-родителя
	после упаковки всех его потомков. Размер оставшегося
	пространства зависит от размеров, запрошенных для всех
	потомков; он может равняться нулю. Если
	<strong>расширения</strong> (expand) затребовали несколько
	окон, то вся дополнительная ширина будет поделена поровну
	между всеми <strong>левыми</strong> и <strong>правыми</strong>
	окнами, запросившими <strong>расширение</strong>, а вся
	дополнительная высота будет поделена поровну между всеми
	<strong>верхними</strong> и <strong>нижними</strong> окнами,
	запросившими <strong>расширение</strong>.</dd>
    </dl>

    <p>Если желаемая ширина или высота превосходит соответствующую
      протяженность полости, то вместо нее используется эта размер
      этой протяженности.</p>

    <p>На третьем шаге размещения окна следует принять решение о его
      ширине и высоте. По умолчанию окно получает либо запрошенные
      ширину и высоту, либо ширину и высоту доли в зависимости от
      того, что из них меньше. Если доля больше, чем запрошенный
      размер окна, то окно можно расширить так, чтобы оно полностью
      или частично покрывало долю, с помощью следующих параметров:</p>

    <dl>
      <dt><strong>fill</strong></dt>

      <dd>Делает размеры окна равными размерам доли.</dd>

      <dt><strong>fillx</strong></dt>

      <dd>Увеличивает ширину окна до ширины доли, сохраняя высоту
	окна.</dd>

      <dt><strong>filly</strong></dt>

      <dd>Увеличивает высоту окна до высоты доли, сохраняя ширину
	окна.</dd>
    </dl>

    <p>На последнем этапе происходит размещение окна внутри его
      доли. Если размеры окна и доли совпадают, то окно просто целиком
      заполняет долю. Если доля больше окна, то положение окна
      определяется с помощью одного из следующих параметров:</p>

    <dl>
      <dt><strong>frame center</strong></dt>

      <dd>Размещает окно по центру доли. Если параметр размещения
	опущен, то центральное размещение принимается по
	умолчанию.</dd>

      <dt><strong>frame n</strong></dt>

      <dd>Размещает окно так, что его верхняя сторона располагается по
	центру верхней стороны доли.</dd>

      <dt><strong>frame ne</strong></dt>

      <dd>Размещает окно так, что его правый верхний угол
	располагается в правом верхнем углу доли.</dd>

      <dt><strong>frame e</strong></dt>

      <dd>Размещает окно так, что его правая сторона располагается по
	центру правой стороны доли.</dd>

      <dt><strong>frame se</strong></dt>

      <dd>Размещает окно так, что его правый нижний угол располагается
	в правом нижнем углу доли.</dd>

      <dt><strong>frame s</strong></dt>

      <dd>Размещает окно так, что его нижняя сторона располагается по
	центру нижней стороны доли.</dd>

      <dt><strong>frame sw</strong></dt>

      <dd>Размещает окно так, что его левый нижний угол располагается
	в левом нижнем углу доли.</dd>

      <dt><strong>frame w</strong></dt>

      <dd>Размещает окно так, что его левая сторона располагается по
	центру левой стороны доли.</dd>

      <dt><strong>frame nw</strong></dt>

      <dd>Размещает окно так, что его левый верхний угол располагается
	в левом верхнем углу доли.</dd>
    </dl>

    <p>Упаковщик управляет состоянием размещенный/неразмещенный всех
      упакованных непосредственных окон-потомков. При упаковке окон
      упаковщик автоматически выводит их на экран; кроме того, он
      стирает окна, для которых в полости остается недостаточно
      места.</p>

    <p>Упаковщик посылает геометрические запросы от имени родителя
      размещаемых окон. Для каждого окна-родителя он запрашивает
      размер, достаточный для размещения всех упакованных потомков в
      соответствии с указанными параметрами, так что на расширение
      остается нулевой остаток.</p>

  </body>
</html>