пятница, 1 февраля 2008 г.

listview в делфи с xml

Что то меня занесло в моем предыдущем посте про XML в дельфи, я ведь планировал написать про ListView. У меня есть мой собственный переписанный ListView. В свое время я на него потратил очень много сил времени. Я почти полностью переписал класс TListView имеющийся в стандартной библиотеке дельфи. У этого компонента есть ряд существенных недостатков: как и все контролы в VCL он не уникодный и слишком усложненная реализация виртуального режима. TntUnicodeControls исправляет неуникодность, но какой чудовищной ценой - огромное количество кода и несколько вспомогательных классов для этого. Я ListView использую только в виртуальном режиме - запрос итема для прорисовки, а не хранения инфы в недрах системы: в обычном режиме контрол начинает безумно тормозить - откройте папку в проводнике с несколькими и тысячами файлов: не на сильно новых компьютерах это занимает несколько секунд, что не простительно. В виртуальном режиме все летает. Мой листвью поддерживает уникод и работает в виртуальном режим. Сама Windows запрашивает для прорисовки элемент по координатам - строка и колонка. Когда как при VCL при каждом запросе запрашивает строку полностью, к тому же строка списка в VCL хранится в TStringList - дополнительный буфер. А если еще использовать tntUnicodeControls то добавляется обертка над этим. Сложно и не поворотливо. Как ни странно, но стандартный VCL компонент достаточно резво работает. Я убрал все эти многоступенчатые буферы.

Так к чему я завел разговор? Комментарий или пост будет иметь теже published свойства, что и соответствующая таблица wordpress: без лишних преобразований объект можно будет получить или отправить в wordpress, а также сохранить и восстановить с диска. ListView будет мониторить соответствующую папку на диске и показывать в списке комментарии или посты. В чем же проблема спросите вы? С тем, что хочется написать универсальный механизм отображения колонок и сортировки для разных xml файлов/ объектов. Чувствую непонятно объясняю. Вообще так: комментарии и посты имеют разные колонки в списке, но вот принцип сортировки и выборки текста для списка одинаков. Например дата показывается и сортируется одинаково, строки тоже сравниваются одинаково. Будут нюансы типа курсивом выводит черновики (ожидает модерации), а жирным непрочитано/прочитано. Для каждого списка прописывать в деталях способ работы не хочется: наверняка будут общие участки кода. Хочется сделать сразу класс, который бы обслуживал разнородные объекты. Как точно это реализовать, я пока не знаю. Нахожусь в состоянии мучительного планирования, когда слишком много неизвестных и нет точной постановки задачи. Можно тупо писать в лоб., но хочется изящного решения, которое можно было бы легко реализовать и в последствии легко модифицировать.

Здесь можно оставить свои комментарии. Выпуск подготовленплагином wordpress для subscribe.ru

Комментариев нет: