Ориентирование в Grid’е(ч.2)

Рассмотрен случай взаимодействия функции ObjToClient() с группой свойств [Dynamic…], для получения значения неявного свойства Column.Left. Без претензий на законченное решение.
Современный вариант Grid’а(VFP-8/9) казалось бы, насыщен изысками интерфейса под завязку. Однако существуют приложения, в которых Fox’совский Grid заставляет программиста ломать голову над проблемой компактного размещения информации в клетках таблицы. Решение общеизвестно, пожертвовать числом строк в пользу большего числа элементов в каждой из них. Стандартный Container или Control позволяют легко расположить нужную коллекцию объектов в несколько этажей. Но заголовок Grid’а по-прежнему прост, а при включенных XP-схемах еще и весьма коварен. Текст и картинка, вот и все, что можно себе позволить. Естественно, что Fox-сообщество не сидело сложа руки и создавало заменители Header’а. Базовым классом для такого псевдо - заголовка чаще всего выбирался Container. Штатный Header с помощью свойства HeaderHeight низводился до нуля, и пока форма полностью вмещала Grid по ширине, а размеры и положение колонок оставались неизменными, все было Ok. Однако для повторения естественного взаимодействия связки «заголовок - колонка» приходилось писать не самый простой код, а иногда и приплясывать с бубном. Будь у колонки штатное свойство Left с возможностью назначения ему события Left_Assign, синхронизация любых объектов стала бы значительно более простым делом. Как вытянуть значение неявного свойства Column.Left знают практически все. Функция ObjToClient() честно сообщает, где начинается очередная секция. Теперь осталось найти диспетчера, который бы уведомлял о перерисовке Grid’а. Например, какое-либо из свойств группы [Dynamic…]. Пользовательская функция, использованная в качестве начинки любого из этих свойств, срабатывает даже при проносе стороннего окна над формой содержащей Grid.
Вот собственно и вся идея синхронизации. В качестве иллюстрации использования метода представлена форма, в которой для колонок Grid’а созданы заголовки на базе Container’а, имитирующие штатные. Подобным образом можно выводить любые объекты в нужных координатах в зависимости от состояния сетки.
Автор: Ившев Дмитрий

Автор публикации

не в сети 23 года

po2

Комментарии: 0Публикации: 6Регистрация: 22-12-2001
Вложенные файлы
#
Название
Тип файла
Размер
1 485containerasheader .zip 12,73 КБ
Материалы по теме
Оставить комментарий
//////////////// ///////////////
Авторизация
*
*
Генерация пароля