- 3
Фреймворк для стандартного ListView
-
Похожий контент
-
- 5 ответов
- 2 073 просмотра
-
- 5 ответов
- 1 753 просмотра
-
- 6 ответов
- 2 110 просмотров
-
- 0 ответов
- 1 378 просмотров
-
- 30 ответов
- 3 125 просмотров
-
- 17 ответов
- 4 233 просмотра
-
- 2 ответа
- 1 351 просмотр
-
- 4 ответа
- 2 191 просмотр
-
- 6 ответов
- 3 146 просмотров
-
- 5 ответов
- 1 929 просмотров
-
-
Последние посетители 0 пользователей онлайн
- Ни одного зарегистрированного пользователя не просматривает данную страницу
Вопрос
krapotkin
Всем привет!
После долгого творческого запоя я запилил альфу либы, которая позволяет юзать обычный, не-генномодифицированный ListView.
Данные подаются в виде модели данных, описание раскладки итема лежит в JSON.
Для работы пишется примитивный наследник класса-адаптера, который биндит данные модели на элементы из JSON. Я решил, что руками делать это дешевле чем через RTTI
Главная хитрость и отличие от стандартного DynamicAppearance+LiveBinding - переменная высота итемов ListView и использование арифметики в описании раскладки.
Можно указать Detail.Y = Text.Bottom + 5, ItemHeight = Detail.Bottom + 10, Detail.W = ItemWidth/2 - X
Это дает довольно гибкую систему. Не на все случаи жизни, но все, что нужно, можно после автоматической раскладки дополнительно приписать в OnUpdateObjects
Код для работы примерно такой
procedure TForm1.FormCreate(Sender: TObject); begin data:= TMyDataList.CreateFromFile(ExePath()+'data.json'); // загрузка в модель данных Adapter := TMyAdapter.Create(lvWallets, data.Items, ExePath()+'pattern.json'); // создание адаптера и загрузка шаблона Adapter.Pattern.SetupListView(lvWallets); // задать отступы и разную мелочь Adapter.ResetView(); // здесь в цикле из модели данных создается нужное количество итемов ListView end; procedure TForm1.lvWalletsUpdatingObjects(const Sender: TObject; const AItem: TListViewItem; var AHandled: Boolean); begin Adapter.SetupContent(AItem); // загрузить текст, картинки и другое содержимое в элементы итема Adapter.Pattern.DoLayout(AItem); // поправить раскладку в соответствии с содержимым элементов итема end;
Для использования кроме стандартных - текст, картинка, кнопка - создано несколько дополнительных элементов итема - прямоугольник, круг, уголок, линия.
Отличие от ModernLV - ,
1) все происходит без правки системных файлов
2) пока нет колонок и других особых изысков.
На результат работы смотреть тут. Исходники пока не причесаны, будут чуть позже
UPD.
ссылки на репозитории ниже
39 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.