Перейти к содержанию
Fire Monkey от А до Я
  • 0

ListVew как лента твиттера


x11

Вопрос

В Delphi 10.1 улучшили TListVew.

Теперь в один Item типа DynamicAppearance можно вставить несколько объектов TTextObjectAppearance и связать это с DataSet через LiveBinding.

Небольшой пример мне удалось сделать (Multi-Device). Запустить на смартфоне (Android).

Хотел пойти дальше, но появились вопросы, ответы на которые не смог найти.

Задача: организовать что-то вроде ленты, где будут отображаться некие данные одного объекта/объявления: id, наименование, картинка, checkbox, цена1, цена2 и ещё что-то. Как в твиттере, или как в приложении для отображения объявлений.

Данные живут в sqlite и загружаются в TUniQuery.

С помощью LiveBinding получилось отобразить в TTextObjectAppearance значение из поля. А вот не нашёл, как в TTextObjectAppearance записать свой произвольный текст, например, слово "Цена", чтобы было "Цена 125000" или "Тел: 456-789".

 

Далее. Если в таблице 10000 записей, то они все загрузятся в TListVew или будут подгружаться автоматически в зависимости от TUniQuery.FetchRows?

Может уже есть из коробки такой готовый пример?

 

а ещё здесь нет item.footer.text (см. прикреплённую картинку)

 

48b590c18bd845db9b230e7abed2b87b.png

Изменено пользователем x11
Ссылка на комментарий

Рекомендуемые сообщения

  • 0
  • Модераторы
53 минуты назад, x11 сказал:

С помощью LiveBinding получилось отобразить в TTextObjectAppearance значение из поля. А вот не нашёл, как в TTextObjectAppearance записать свой произвольный текст, например, слово "Цена", чтобы было "Цена 125000" или "Тел: 456-789".

это нужно сделать в разных "контролах"

на счёт остального незнаю, не использую LiveBinding

Ссылка на комментарий
  • 0
  • Модераторы
53 минуты назад, x11 сказал:

не совсем понял

создать еще один текстовый элемент со статичным текстом Цена: рядом с ним выставить текстовый элемент со значением

чтобы получилось "Цена: 125000"

Ссылка на комментарий
  • 0

нууу

олдскульный вариант - это обычное вычисляемое поле, на которое вешаем LiveBinding

Совцов на последнем вебинаре рассказывал, как делать адаптеры даже на TObjectList

надо бы сесть, повторить руками-то

как оказалось, PrototypeBindSource все-таки не совсем лишенный смысла демо-компонент

воначо

Ссылка на комментарий
  • 0
1 час назад, Равиль Зарипов (ZuBy) сказал:

создать еще один текстовый элемент со статичным текстом Цена: рядом с ним выставить текстовый элемент со значением

 

а, ну так я пытался, просто об этом не написал

просто где здесь свойство Text или Caption?

55e7cf11a88a4d3fa6069fcd0459cb1c.png

Ссылка на комментарий
  • 0

как-то так?

ListView1.Items[0].Objects.FindObjectT<TListItemText>('text5').Text := 'Цена';

только данные приходят из базы и на момент создания, например, окна, у меня нет "ListView1.Items[0]"

Ссылка на комментарий
  • 0

Сделал маленький пример, как использовать  Binding Expressions в Design Time. По прилагаемому снимку экрана легче ориентироваться в выборе компонент.

Подробнее на эту тему здесь: http://docwiki.embarcadero.com/RADStudio/Berlin/en/Using_Custom_Format_and_Parse_Expressions_in_LiveBindings

 

pLBExpr1.zip

LBExpr1.JPG

Ссылка на комментарий
  • 0
17 часов назад, x11 сказал:

как-то так?


ListView1.Items[0].Objects.FindObjectT<TListItemText>('text5').Text := 'Цена';

только данные приходят из базы и на момент создания, например, окна, у меня нет "ListView1.Items[0]"

ну так и создавайте List Items в момент прихода данных из БД.

либо пользуйтесь LiveBinding

Ссылка на комментарий
  • 0
В 20.03.2017 в 18:57, x11 сказал:

CustomFormat

надо будет поэкспериментировать

https://community.embarcadero.com/blogs/entry/perform-low-code-calculations-using-livebindings-in-delphi-firemonkey-on-android-and-ios

 

 

IfThen(Self.Owner.FieldEdit1.AsString='', 0, Self.Owner.FieldEdit1.AsFloat)+
IfThen(Self.Owner.FieldEdit2.AsString='', 0, Self.Owner.FieldEdit2.AsFloat)+
IfThen(Self.Owner.FieldEdit3.AsString='', 0, Self.Owner.FieldEdit3.AsFloat)

 

Ссылка на комментарий
  • 0

http://docwiki.embarcadero.com/RADStudio/Berlin/en/Using_Custom_Format_and_Parse_Expressions_in_LiveBindings

CustomFormat понимает выражение

self.owner.qObjects.FieldByName('floor').AsString + "/" + %s

а как быть, если qObjects живет в другом модуле, в другой форме?

 

Пытаюсь так:

DM.qObjects.FieldByName('floor').AsString + "/" + %s

и получаю ошибку, что EvalError in LinkListControlToField1: Couldn't find DM.

 

Ссылка на комментарий
  • 0

По сути, мне нужно склеить значения нескольких полей в одном выражении.

Можно, конечно, в SQL запросе, но чувствую, что можно как-то и прямо в CustomFormat.

 

здесь http://www.malcolmgroves.com/blog/?p=1226

даже показано, как можно использовать свои функции

Изменено пользователем x11
Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...