1 (изменено: serzh82saratov, 2020-04-18 18:27:50)

Тема: AHK: Растягивание контролов при растягивании окна

Предназначено для изменения размеров и позиции контролов в зависимости от размеров окна.
Также можно использовать для относительного размещения элементов в проекте, без привязки к возможным в дальнейшем изменениям размеров окна.
Созданные макеты окон легко переносятся в нужную область окна или контрола. К примеру макет из примера №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)

Показать скрыть все контролы экземпляра.

Class AutoResize.
Примеры.
Обсуждение.

Пример №7.

https://raw.githubusercontent.com/serzh82saratov/AutoResize/master/Pics/1.png

https://raw.githubusercontent.com/serzh82saratov/AutoResize/master/Pics/2.png

https://raw.githubusercontent.com/serzh82saratov/AutoResize/master/Pics/3.png

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui