Skip to content

TFormAlign

Sinilga edited this page May 4, 2021 · 1 revision

FormAlignment

Модуль для реализации "резинового макета" на формах ввода ИСУБД CronosPro. Обеспечивает изменение размеров и положения элементов формы в зависимости от размеров окна.

пример

Свойства:

number MinWidth - минимально допустимая ширина формы
number MinHeight - минимально допустимая высота формы
number MaxWidth - максимально допустимая ширина формы
number MaxHeight - максимально допустимая высота формы

Методы:

SetRules(Control ctrl, table rules) –
устанавливает правила изменения размеров элемента ctrl при изменении размеров родительского элемента. rules – таблица, содержащая 4 логических значения, каждое из которых определяет необходимость привязки элемента к соответствующему углу родительского контейнера: {left,top,right,bottom}. Может задаваться одной из констант.

RemoveRules(Control ctrl) –
удаляет правила изменения размеров для элемента.

Align2Parts(Control ctrl_1, Control ctrl_2, number K, string dir) -
статический метод. Применяется для того, чтобы обеспечить постоянное соотношение высоты (ширины) двух элементов (ctrl_1 и ctrl_2) при изменении размеров их родительского элемента. K – соотношение ширины (высоты) выравниваемых элементов; dir – направление выравнивания элементов, может принимать значения "H" или "V".

SetPosition(Control ctrl, table rules, number left, number top, number right, number bottom, number w, number h) ) -
статический метод. Задает начальное расположение элемента ctrl внутри родительского элемента. Rules - таблица, содержащая 4 логических значения, каждое из которых определяет необходимость привязки элемента к соответствующему углу родительского контейнера: {left,top,right,bottom}, может задаваться одной из констант. left, top, right, bottom – расстояния между краями элемента и соответствующими краями контейнера. w, h – высота и ширина элемента.

Пример:

SetPosition(Me.listbox1, TFormAlign.alLeft, 5, 25, nil, 20, 200, nil) – задать для элемента listbox1 ширину 200 пикселей и разместить его вдоль левого края формы, обеспечив зазоры слева 5 пикселей, сверху и снизу – 25 и 20 пикселей соответственно. Параметры right и h не заданы, т.к. при данных правилах размещения (растягивание вдоль левого края) они не имеют значения.

Константы:

Константы, управляющие размещением элементов формы. Используются в методе SetRules.
alLeft = { true, true, false, true } – элемент растягивается/сжимается по высоте
alTop = {true, true, true, false } – элемент растягивается/сжимается по ширине
alRight = {false, true, true, true } – элемент растягивается/сжимается по высоте и смещается по горизонтали
alBottom = {true, false, true, true } - элемент растягивается/сжимается по ширине и смещается по вертикали
alClient = {true, true, true, true } - элемент растягивается/сжимается по ширине и высоте alLeftTop = {true, true, false, false } – элемент сохраняет положение относительно левого верхнего угла родительского элемента, размеры не меняются
alLeftBottom = {true, false, false, true } – элемент смещается по вертикали, сохраняя положение относительно левого нижнего угла родительского элемента, размеры не меняются
alRightTop = {false, true, true, false } - элемент смещается по горизонтали, сохраняя положение относительно правого верхнего угла родительского элемента, размеры не меняются
alRightBottom = {false, false, true, true } - элемент смещается по горизонтали и вертикали, сохраняя положение относительно правого нижнего угла родительского элемента, размеры не меняются

Пример использования

Конструктор должен вызываться из обработчика события Open формы.

local FormAlign = require(“TFormAlign”)  
function Форма_Open( form )
	FAlign = FormAlign(Me)
	FAlign:SetRules(Me.надпись1,FAlign.alLeftTop)
	FAlign:SetRules(Me.текст1,FAlign.alTop)
	FAlign:SetRules(Me.кнопка1,FAlign.alRightTop)
	FAlign:SetRules(Me.рамка1,FAlign.alLeft)
	FAlign:SetRules(Me.рамка2,FAlign.alClient)
	FAlign:SetRules(Me.рамка3,FAlign.alRight)
	FAlign:SetRules(Me.кнопка2,FAlign.alLeftBottom)
	FAlign:SetRules(Me.надпись2,FAlign.alBottom)
	FAlign:SetRules(Me.кнопка3,FAlign.alRightBottom)
	FAlign:SetRules(Me.текст2,FAlign.alTop)
	FAlign:SetRules(Me.текст3,FAlign.alClient)
	K = Me.текст2.Height / Me.текст3.Height
	FAlign.OnResize = function(self)
	-- хотим чтобы соотношение высоты элементов текст2 и текст3 оставалось постоянным
		self:Align2Parts(Me.текст2, Me.текст3, K, "V")
	end
	return true;
end

Компоненты форм ввода

Clone this wiki locally