1 (изменено: serzh82saratov, 2019-05-23 22:26:26)

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

Предназначено для изменения размеров и позиции контролов в зависимости от размеров окна.


Обозначения:

КО - клиентская область окна.
РЗ (Рабочая зона) - Прямоугольник описанный отступами от краёв КО заданными в параметрах New и SetArea.
ПК -предыдущий контрол.
- число.
(Строка1|Строка2|Строка3) - один из вариантов.
(first) - параметр должен быть указан первым.
край - правая или нижняя часть, в зависимости от контекста (x|w) или (y|h).

New(Gui, Options = "")

Gui - Имя или хэндл окна.
Options - xm№ и\или ym№ margin отступы в КО.
(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", только контрол будет прилегать своим правым краем, к правому краю РЗ.

w, h:
ro (first) - остаток РЗ от края ПК.

Общие:
№ - пиксели.
r№ - № тысячная часть РЗ.
r - эквивалентно r1000.

(w|h) - размер самого контрола. Может быть полезно для (x|y).
(wp|hp) - размер ПК.
(ws|hs) - размер контрола секции.
После каждого из трёх вышеуказанных параметров можно указать число мультипликатор (то есть можно не разделять знаком умножения).

(x|y) - координата края ПК.

(xso|yso) - координата края секции.
(xm|ym) - margin отступы в КО.
(xp|yp) - координата ПК.
(xs|ys) - координата секции.

Ex - Одно или несколько слов разделённых пробелом.
Draw - аналог  MoveDraw.
Section - определяет контрол как секцию.
Save - требуется для GetArea.

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
OS: Win7x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui