Как сделать, чтобы высота окна менялась в зависимости от отображаемых в нем фреймах
Как сделать, чтобы высота окна менялась в зависимости от отображаемых в нем фреймах?
То есть:
- создаю окно
- в окне создаю компонент FrameSet, указываю в FrameSet свойство IsResizible=True
- в FrameSet создаю два компонента Frame. Второй компонент Frame можно сворачивать и разворачивать с помощью стрелочки, которую видно на границе между первым фреймом и вторым
Теперь мне нужно, чтобы высота окна становилась меньше ровно на столько, на сколько уменьшиться второй Frame при сворачивании.
Цель этого всего: возможность делать окно меньше минимизируя ненужные фреймы в окне.
Я смотрю у окна есть свойство BorderStyle. Может в нем нужно указать какое-то значение правильное, чтобы все заработало?
Нравится
Я решил не заморачиваться и просто добавил кнопку, которая будет скрывать/показывать нужный фрейм. Еще ранее я написал функцию, которая меняет высоту окна на высоту скрываемых элементов (фреймы, контролы).
Просто думал может есть какой-то более простой готовый способ.
В scr_WindowUtils описана функция GetFrameHeight(Frame), она может Вам пригодиться.
"Раловец Ольга" написал:В scr_WindowUtils описана функция GetFrameHeight(Frame), она может Вам пригодиться.
Да, именно эту функцию я использовал
С позволения автора функции GetFrameHeight(Frame) Артема Репко публикую ее код, т.к. выяснилось, что она существует не во всех конфигурациях.
[javascript]
function GetFrameHeight(Frame) {
var clTop = 0;
var clBottom = 3;
var TotalHeight = 0;
var Component, Height;
for (var i = 0; i < Frame.Count; i++) {
Height = 0;
Component = Frame.Items(i);
if (Component.IsVisible == false) {
continue;
}
if ((IsStringInArray(Component.TypeCode, ['Frame', 'FrameSet']) && Component.IsClient) ||
IsStringInArray(Component.TypeCode, ['FrameGroup', 'UserFieldsGroup'])) {
Height = GetFrameHeight(Component);
} else
if (IsStringInArray(Component.TypeCode, ['Frame', 'FrameSet']) && !Component.IsClient) {
Height = Component.Size;
} else {
Height = Component.Height;
if ((Component.CaptionLayout == clTop) ||
(Component.CaptionLayout == clBottom)) {
Height += 18;
};
}
if ((Frame.Direction == dVertical) && Frame.HasSeparator && (i > 0)) {
Height += 6;
}
if (Frame.Direction == dHorizontal) {
TotalHeight = Math.max(TotalHeight, Height);
} else {
TotalHeight += Height;
}
}
switch (Frame.GroupType) {
case fgtControls:
TotalHeight += 20;
break;
case fgtNormal:
TotalHeight += 18;
break;
case fgtFooter:
TotalHeight += 10;
break;
}
TotalHeight += (Frame.OffsetTop + Frame.OffsetBottom);
return TotalHeight;
}
[/javascript]
Прошу прощения, что не проверила наличие этой функции в базовой версии и вопрос к Андрею.
"Кошкаров Андрей" написал:Да, именно эту функцию я использовал
Откуда она у Вас?
А действительно откуда?
Спасибо Оле что обновила материал. Функция очень полезная.
Я ее просто вызывал и пользовался. А что, ее у меня не должно было быть?
Версия Terrasoft: XRM 3.3.1.31
Для интереса подняла базу 3.3.1.31, нет там этой функции, наверное, к Вам она попала позже.
хм. Мне кажется кто-то в блоге подобной (или этой) функцией делился.