30.11.2006, 10:56
|
#7
|
Участник
Регистрация: 28.11.2005
Адрес: Москва
|
Класс, реализующий "бесконечный" прокручиваемый Listbox
Во вложении - пара классов для создания "бесконечного" Listbox'а: собственно, абстрактный класс, реализующий функциональность прокрутки, и класс-наследник, приведенный в качестве примера. Конструктору в параметрах передаются: ссылка на FormListboxControl (предполагается, что control принадлежит какой-то форме), число элементов (не менее трех), которые надо поддерживать в списке, и начальное значение, связанное с элементом, который будет выбран при инициализации Listbox, т.е. на который будет указывать selection().X++: void new(FormListBoxControl _formListbox, int _maxItems, anytype _startValue) В классе-наследнике необходимо реализовать унаследованные абстрактные методы, выполняющие такие функции:- возврат типа значений, привязываемых к элементам списка (это нужно для корректного создания Map);
- вычисление следующего/предыдущего значения;
- форматирование элемента списка в соответствии с привязанным к нему значением;
- вычисление "расстояния" между двумя заданными значениями, выраженное в количестве элементов списка (например, разница между 01.11.06 и 01.08.06, т.е. "ноябрь" и "август" в случае списка месяцев должна быть -3);
X++: Types getValueType();
anytype calcNextValue(anytype _currentValue, boolean _next);
str fmtListValue(anytype _value);
int calcSelectionDelta(anytype _from, anytype _to); Метод calcNextValue должен возвращать то же значение, что и его аргумент, если список значений "упёрся" в нижнюю/верхнюю границу, скажем, минимальную/максимальную дату. После создания экземпляра класса и привязывания его к Listbox'у необходимо для осуществления прокрутки в методе validate() или selectionChange() последнего вызывать метод экземпляра класса selectionChanged(). Получить значение, связанное с текущим выбранным элементом списка, можно с помощью метода getSelectedValue().
В примере используется дополнительный BaseEnum и одна дополнительная метка.
Последний раз редактировалось gl00mie; 30.11.2006 в 11:57.
Причина: замечания belugin
|
|
За это сообщение автора поблагодарили: belugin (10). |