Экономия места в браузе: Full Splitter

«дизайнерский» момент 🙂

  • Автор: Still Zero
  • Дата публикации: 30.12.2005
  • Уровень: начальный

Я думаю, что зачастую, размещая элементы на окне просмотра данных, вы сталкиваетесь с ограничением размеров экрана. Существует такая вещь как splitter — разделитель, который помогает уменьшить/увеличить зону видимости листа. Как он работает можно посмотреть, например, в Проводнике Windows.

Но сегодня речь пойдет не о разделителе 🙂 … а о похожей на него вещи, я не знаю как это правильно называется — назвал Full splitter — полный разделитель. Задача, которая ставится перед этим элементом — полностью скрыть часть окна слева (или справа) от разделителя.

Full splitter реализовывается буквально несколькими строками кода.

Между областями, которые необходимо разделить положим кнопку. Установим на кнопку клавишу быстрого вызова (Key). В качестве клавиши может выступать, например, кнопка с буквой «Ё», или, что тоже, знаком «тильда». Также, напишем tip-чик на кнопке, что то вроде «Скрыть/показать области». Текст с кнопки необходимо удалить. Желательно установить другой вид курсора для кнопки.

Необходимо завести «флаговую» переменную, которая будет показывать скрыта ли часть или нет.

При нажатии на кнопку-разделитель должны выполняться следующие действия:

  • определяемся, что необходимо делать — скрывать область или показывать (по «флаговой» переменной);
  • если скрывать — скрываем все контролы левее (правее) разделителя — команда HIDE и изменяем размеры контролов правее (левее) разделителя на величину освободившегося места, также меняем положение самого разделителя — это свойства Prop:Xpos, Prop:Ypos, Prop:Width, Prop:Height;
  • если показывать, то показываем ранее скрытие контролы — команда UNHIDE, и восстанавливаем предыдущее положение контролов

Пример собран на C55H, ABC.
Я использую стандартный ABC-ресайзер (resizer). Возможно для вашего ресайзера код обновления будет несколько другим. Все действия со сплиттером я вынес в простой локальный класс. Собственно такой сплиттер был подсмотрен в EMS MS SQL manager-е SplitDemo (413)