Описание класса Общие.Форма.Привязка

Автор: Дмитрий Ощепков     mailto:dmitro@russian.ru
Версия: 1.7

Описание
Класс предназначен для автоматического изменения расположения и размеров элементов управления (ЭУ) на форме.
Наследуется от встроенного класса FormEx РасширениеФормы и может использоваться как класс РасширениеФормы.

Порядок работы
В процедуре ПриОткрытии() необходимо инициализировать объект методом УстановитьФорму(). Задать нужные привязки
методом Привязка(). Порядок вызовов метода Привязка() определяет порядок расчета положения и размеров элементов
формы, так что если элемент управления А привязан к элементу управления Б, привязка элемента управления Б должна
быть определена раньше чем привязка элемента управления А.

В предопределенных процедурах формы

ПриИзмененииРазмераОкна(),
ПослеОткрытия(),
ПриДвиженииМыши(),
ПриНажатииЛевойКнопки(),
ПриОтжатииЛевойКнопки()

необходимо передать аргументы одноименной процедуре этого класса.

Описание способов привязки
Привязка ЭУ задается типом привязки и объектом к которому происходит привязка, в качестве объекта может выступать
сама форма или любой другой ЭУ. Если используется Форма, то в расчет берутся высота и ширина формы. Если
используется ЭУ, то в случае вертикальной привязки, в расчет берется координата верхней границы ЭУ; в случае
горизонтальной привязки, в расчет берется координата левой границы ЭУ.
Если для нескольких атрибутов формы необходимо задать одинаковую привязку, докускается в первом параметре метода
Привязка() перечислить идентификаторы привязываемых ЭУ через запятую.

Типы привязки:
"T" - (Top) привязка вертикального положения ЭУ
Привязка может работать в вертикальном направлении
При изменении размеров формы, ЭУ будет перемещаться за нижней границей формы, или за верхней границей ЭУ.

"H" - (Height) привязка высоты ЭУ
Привязка может работать в вертикальном направлении
При изменении размеров формы, ЭУ будет изменять высоту за нижней границей формы, или за верхней границей ЭУ.

"TH" - (Top Height) пропорциональная привязка вертикального положения и высоты ЭУ
Привязка может работать в вертикальном направлении
При изменении размеров формы, ЭУ будет перемещаться за нижней границей формы, или за верхней границей ЭУ,
в тоже время ЭУ будет изменять высоту пропорционально высоте формы или координате верхней границы ЭУ.

"L" - (Left) привязка горизонтального положения ЭУ
Привязка может работать в горизонтальном направлении
При изменении размеров формы, ЭУ будет перемещаться за правой границей формы, или за левой границей ЭУ.

"W" - (Width) привязка ширины ЭУ
Привязка может работать в горизонтальном направлении
При изменении размеров формы, ЭУ будет изменять ширину за правой границей формы, или за левой границей ЭУ.

"LW" - (Left Width) пропорциональная привязка горизонтального положения и ширины ЭУ
Привязка может работать в горизонтальном направлении
При изменении размеров формы, ЭУ будет перемещаться за правой границей формы, или за левой границей ЭУ,
в тоже время ЭУ будет изменять ширину пропорционально ширине формы или координате левой границы ЭУ.

"BR" - (ВoRder) привязка границ ЭУ
Привязка может работать в обоих направлениях (горизонтальном и вертикальном)
Для этого типа привязки должно быть указано два идентификатора элемента управления через запятую. При горизонтальном
направлении для левой границы и для правой границы, и при вертикальном направлении для верхней границы и для нижней
границы. Свое положение и размер привязываемый ЭУ будет изменять так, что его границы будут следовать за границами
ЭУ к которым он привязывается.

При использовании пропорциональных привязок (TH,LW) размеры привязываемого ЭУ могут быть изменены мышью.
Для этого нужно перетащить мышью верхнюю или левую границу ЭУ (соответственно) в любое положение на форме.
Границей для изменения размера ЭУ считается область формы, отстоящая от ЭУ на N пикселей вверх и влево соответственно.
Для изменения значения N у класса существует свойство РазмерРазделителя. По умолчанию равно 5-ти пикселям.

Механизм выравнивания
В процессе работы с формой есть возможность выравнивать ЭУ относительно друг друга, для этого существует
метод Выровнять(). В него должен быть передан идентификатор выравниваемого ЭУ, выравниваемая граница (L,R,T,B),
идентификатор ЭУ по которому нужно выровнять, граница по которой нужно выровнять, и размер отступа (в пикселях,
просто значение, которое будет учтено при выравнивании).

После применения метода Выровнять() привязка всех ЭУ сбрасывается. Она должна быть задана заново, после чего должен
быть вызван метод Привязать().

В качестве отступа удобно применять свойство класса РазмерРазделителя (главное угадать знак ;) ).

Шаблон модуля формы:

Перем гРасшФорма;
Перем гРФорма;

Процедура ПриОткрытии()
	
	//Для того чтобы работали предопределенные процедуры; необходимо только во внешних отчетах
	гРасшФорма=СоздатьОбъект("СервисРасшФормы");
	гРасшФорма.ЗагрузитьМодуль();
	//////////////////////////////////////////////////////////////////////////////////////////
	
	гРФорма=СоздатьОбъект("Общие.Форма.Привязка");
	гРФорма.УстановитьФорму(Форма);
	
	гРФорма.Привязка();
КонецПроцедуры

Процедура ПослеОткрытия()
	гРФорма.ПослеОткрытия();
КонецПроцедуры

Процедура ПриДвиженииМыши(Сост,Лево,Верх)
	гРФорма.ПриДвиженииМыши(Сост,Лево,Верх);
КонецПроцедуры

Процедура ПриНажатииЛевойКнопки(Сост,Лево,Верх)
	гРФорма.ПриНажатииЛевойКнопки(Сост,Лево,Верх);
КонецПроцедуры

Процедура ПриОтжатииЛевойКнопки(Сост,Лево,Верх) Экспорт
	гРФорма.ПриОтжатииЛевойКнопки(Сост,Лево,Верх);
КонецПроцедуры

Процедура ПриИзмененииРазмераОкна(ТипСобытия,Ширина,Высота)
	гРФорма.ПриИзмененииРазмераОкна(ТипСобытия,Ширина,Высота);
КонецПроцедуры
