Как сделать, чтобы высота окна менялась в зависимости от отображаемых в нем фреймах
Как сделать, чтобы высота окна менялась в зависимости от отображаемых в нем фреймах?
То есть:
- создаю окно
- в окне создаю компонент FrameSet, указываю в FrameSet свойство IsResizible=True
- в FrameSet создаю два компонента Frame. Второй компонент Frame можно сворачивать и разворачивать с помощью стрелочки, которую видно на границе между первым фреймом и вторым
Теперь мне нужно, чтобы высота окна становилась меньше ровно на столько, на сколько уменьшиться второй Frame при сворачивании.
Цель этого всего: возможность делать окно меньше минимизируя ненужные фреймы в окне.
Я смотрю у окна есть свойство BorderStyle. Может в нем нужно указать какое-то значение правильное, чтобы все заработало?
Нравится
Я решил не заморачиваться и просто добавил кнопку, которая будет скрывать/показывать нужный фрейм. Еще ранее я написал функцию, которая меняет высоту окна на высоту скрываемых элементов (фреймы, контролы).
Просто думал может есть какой-то более простой готовый способ.
В scr_WindowUtils описана функция GetFrameHeight(Frame), она может Вам пригодиться.
"Раловец Ольга" написал:В scr_WindowUtils описана функция GetFrameHeight(Frame), она может Вам пригодиться.
Да, именно эту функцию я использовал
С позволения автора функции GetFrameHeight(Frame) Артема Репко публикую ее код, т.к. выяснилось, что она существует не во всех конфигурациях.
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; }
Прошу прощения, что не проверила наличие этой функции в базовой версии и вопрос к Андрею.
"Кошкаров Андрей" написал:Да, именно эту функцию я использовал
Откуда она у Вас?
А действительно откуда?
Спасибо Оле что обновила материал. Функция очень полезная.
Я ее просто вызывал и пользовался. А что, ее у меня не должно было быть?
Версия Terrasoft: XRM 3.3.1.31
Для интереса подняла базу 3.3.1.31, нет там этой функции, наверное, к Вам она попала позже.
хм. Мне кажется кто-то в блоге подобной (или этой) функцией делился.