<!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>