![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 62 Всего: 128 |
столкнулся однажды со следующей проблемой:
при использовании CheckListBox в "виртуальном" режиме компонент перестает реагировать на нажатия чеков. так же игнорируется программное изменение состояния( вместо правки компонента сделал упрощенный аналог на простом листбоксе. кто сталкивался с таким глюком, кто как решил его? з.ы. D6. в аттаче пример проекта. у кого посвежее IDE - поверьте плиз! может уже поправлен он) Присоединённый файл ( Кол-во скачиваний: 6 )
CheckListBox_VirtualMode.rar 1,47 Kb-------------------- There are always someone smarter than you... |
|||
|
||||
| skyboy |
|
||||||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 4 Всего: 260 |
столкнулся с тем же. почему-то, мне думается, проблему решить совсем не просто :(
код из сорцов:
Обратите внимание: происходит вызов некоегого getWrapper. Класс TCheckListBoxDataWrapper описан следующим образом:
Т.е. этот класс-обертка используется для хранения специфических относительно родителя(TCustomListBox) свойств отдельных item'ов: checked, enabled и прочие. Объект этого класса(тут уже пошли догадки - некогда глубоко копать) является оберткой вокруг "честного" items.objects(эта обертка устанавливается через сообщение, потому и лень дебажить глубже) так, что при необходимости программист получает items.objects, как будто никакой обертки там и нет. Причем обертка создается автоматически:
и программисту вроде бы как видима быть не должна. Но это все работает в том случае, если объекты хранятся статически. Если же их запрашивать каждый раз заново по индексу(при Style = lbVirtual), то обертка все равно создается. Но нигде не сохраняется. И при следующей перерисовке элемента(и, соотвественно, запросе данных) создается новая обертка. И свойство checked там по умолчанию установлено в false. Получается, и невозможно при стиле lbVirtual обеспечить хранение состояния. Разве что создавая СВОЙ объект таким образом, чтоб он наследовал TCheckListBoxDataWrapper, что не всегда возможно. И, что самое обидно, что они не использовали интерфейсы - только приведение напрямую к классу, что, по-моему, исключает возможность решения проблемы, кроме как: а) коррекции класса TCheckLisTBox б) коррекции своего класса, чтоб он был наследником от TCheCKListBoxDataWrapper Меня, например, оба варианта не устраивают :( Так что, пойду, как и MetalFan, сделаю себе фичу на listbox'e с multiselect'ом |
||||||
|
|||||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |