http://forum.script-coding.com/viewtopic.php?id=14782
Предназначено для изменения размеров и позиции контролов в зависимости от размеров окна. Также можно использовать для относительного размещения элементов в проекте, без привязки к возможным в дальнейшем изменениям размеров окна. Созданные макеты окон легко переносятся в нужную область окна или контрола. К примеру макет из примера №1, перенесён в один из контролов примера №7 без каких либо изменений.
Обозначения:
КО - клиентская область окна. РЗ (рабочая зона) - Прямоугольник описанный отступами от краёв КО заданными в параметрах New и SetArea. ПК -предыдущий контрол. № - число. (Строка1|Строка2|Строка3) - один из вариантов. (first) - параметр должен быть указан первым. край - правая или нижняя часть, в зависимости от контекста (x|w) или (y|h).
New(Gui, Options = "")
Gui - имя или хэндл окна. Options - xm№ и\или ym№ margin отступы в КО. Foreign - стороннее окно. Gui и Control в Item должны быть хэндлами. (Floor|Ceil|Round) - при значимом количестве контролов разность в округлении координат может увеличить отступы между контролами на несколько пикселей (пример 4). Указание данных опций устранит этот эффект. Floor - контролы могут оказаться вровень или не доходить до края РЗ. Ceil - контролы могут оказаться вровень или заходить за край РЗ. Round - контролы могут оказаться вровень, немного не доходить или немного заходить за край РЗ.
SetArea(Left, Top, Right, Bottom)
Задание отступов РЗ. Отступы margin суммируются, и во избежании путаницы лучше использовать что то одно. Каждый параметр может быть в виде: № - пиксели, или r№ - № тысячная часть КО. Опущенные параметры равны нулю.
Item(Control, Options, Ex = "")
Добавить новый контрол. Control - имя или хэндл контрола. Должно быть уникальным в экземпляре, и далее использоваться в таком же виде. Options - строка с четырьмя параметрами через запятую. x, y, w, h. Каждый из них может состоять из нескольких составляющих, разделённых знаками вычитания, сложения, деления или умножения. Пробелы допустимы, регистр любой. Деление и умножение поддерживается только с последующим за знаком числом, операция производится над всеми предыдущими вычислениями в параметре.
x, y: o (first) - отсчёт от края РЗ. Сложение в таком параметре приводит к вычитанию, то есть смещению влево или вверх. Например для первого параметра: "o" эквивалентно "xm", только контрол будет прилегать своим правым краем, к правому краю РЗ. z - координата края РЗ. Аналогично (xm|ym) + r. cur - координаты и размеры контрола на момент его передачи.
w, h: ro (first) - остаток РЗ от края ПК.
Общие: № - пиксели. r№ - № тысячная часть РЗ. r - эквивалентно r1000. d - с предваряющим "+" или "-". Для отладки, будет выведен MsgBox с некоторыми данными метода "Eval".
(w|h) - размер самого контрола. Может быть полезно для (x|y). (wp|hp) - размер ПК. (ws|hs) - размер контрола секции. После каждого из трёх вышеуказанных параметров можно указать число мультипликатор (то есть можно не разделять знаком умножения).
(x|y|xpo|ypo) - координата края ПК.
(xso|yso) - координата края секции. (xm|ym) - margin отступы в КО. (xp|yp) - координата ПК. (xs|ys) - координата секции.
Также возможно указать в виде "X > Right, Y >Bottom", то есть указывать не ширину и высоту контролов, а их крайние координаты. p - предыдущая координата, должно быть указано сразу после ">". Например "X > P + 100, Y > P + 100", будет квадратом 100х100.
Ex - одно или несколько слов разделённых пробелом. Draw - аналог MoveDraw. Section - определяет контрол как секцию. Save - требуется для GetArea. IsNoPrevious - не сохранять координаты и размеры для последующих контролов для дальнейшего относительного позиционирования.
SetItem(Control, Options, Ex = "")
Изменить параметры заданные до этого в Item.
InsertItem(ControlOff, Control, Options, Ex = "")
Добавить новый контрол перед ControlOff.
RemoveItem(Control, Destroy = 0)
Удалить данные о контроле. Destroy = 1 - удалить сам контрол.
GetPos(Control, byref Left = "", byref Top = "", byref Right = "", byref Bottom = "", byref Width = "", byref Height = "")
Получить координаты и размеры контрола.
GetArea(Control, byref Left = "", byref Top = "", byref Right = "", byref Bottom = "", byref Width = "", byref Height = "")
Извлечь отступы контрола от краёв КО. У контрола в опциях должно быть указано "Save" (см. 7 пример).
IsCurrentArea(W = "", H = "")
Проверяет соответствуют ли размеры КО, последним применённым в экземепляре (см. 7 пример).
Resize(W = "", H = "")
Обновить размеры. w, h - размеры КО. Если не указаны, берутся из GetWindowInfo.
Show(Show = 1)
Показать скрыть все контролы экземпляра.