Jump to content

Новые компоненты TfgVirtualListPicker / TfgNumberListPicker


Yaroslav Brovin

183 views

Мы постоянно работаем над расширением возможностей библиотеки FGX Native. Чтобы разнообразие деталей в конструкторе росло, а создание приложений становилось все проще и быстрее. 

В новом релизе 1.9.2.0 мы добавили два новых компонента: TfgVirtualListPicker и TfgNumberListPicker. Эти компоненты позволяют выбрать одно значение из списка при помощи крутящегося барабана. В основном такие компоненты использовались при выборе даты и времени:

photo_2021-02-17_01-07-10.jpg photo_2021-02-17_01-09-23.jpg

TfgVirtualListPicker

Этот компонент не хранит у себя элементы списка и работает подобно TfgCollectionView. А именно запрашивает все необходимые данные у разработчика через специальные события: OnGetItemsCount и OnGetItemText.

Допустим у нас есть список городов. Для упрощения названия городов мы поместим в константный массив. У вас он может находится в базе данных или в любой другой модели данных:

const
  Titles: array [0..6] of string = ('Saint-Petersburg', 'Moscow', 'Chelyabinsk', 'Sochi', 'Krasnodar', 'Voronej', 'Rostov-on-don');

Для полноценной работы компонента ему необходимо знать только:

  1. Количество элементов в списке. Оно указывается в событии OnGetItemsCount.
    procedure TFormMain.fgVirtualListPicker1GetItemCount(Sender: TObject; var ACount: Integer);
    begin
      ACount := Length(Titles);
    end;
  2. Текстовое название элемента, отображаемое в компоненте. Оно указывается в событии OnGetItemText. Если вы не указываете обработчик для этого события, то компонент по умолчанию использует надпись следующего формата "Item %d". Каждый элемент списка имеет свой индекс, по которому компонент получает текст элемента.
    procedure TFormMain.fgVirtualListPicker1GetItemText(Sender: TObject; const AItemIndex: Integer; var AText: string);
    begin
      AText := Titles[AItemIndex];
    end;

Это минимально необходимые действия для отображения списка:

image.png

У компонента нет ограничения на максимально допустимое количество элементов в списке. Оно может быть абсолютно любым. Значит его можно использовать для списков любого размера.

Когда пользователь выбирает элемент, срабатывают события OnChanged, OnItemSelected, через которые вы можете узнать индекс выделенного элемента.

Внешний вид

На текущий момент у компонента есть только одна настройка - это цвет текста элементов TextColor / TextColorName, которая по умолчанию завязана на цвет темы "Text\Text".

Расширяемость

Компонент TfgVirtualListPicker разработан для возможности создания своих расширений на его базе. Это значит, что вам не нужно реализовывать этот компонент для IDEAndroid и iOS. Именно на его основе сделан следующий компонент TfgNumberListPicker.

TfgNumberListPicker

Этот компонент является кроссплатформенным расширением TfgVirtualListPicker и предлагает возможность выбрать вещественное число из указанного диапазона.

Диапазон задается при помощи трех свойств: границы диапазона MinMax и шага изменения сетки чисел Step.

image.png

По умолчанию каждый элемент отображается в виде вещественного числа с двумя знаками после запятой. Однако, вы можете это поменять одним из любых способов:

  • Указать стандартный формат через FormatKind = Integer.
  • Указать свой произвольный форма через FormatKind = Custom и Format = 'Item %f'
  • Указать свой обработчик события OnGetItemText.

В остальном компонент позволяет использовать все возможности TfgVirtualListPicker.

  • Like 8

2 Comments


Recommended Comments

Доброго Вам Ярослав.

Понимаю что других задач не в проворот, но все же решился спросить, есть ли понимание/планирование по этой теме:

 

И еще мы обсуждали по темам, чтобы можно было в каталогах их держать, что то не могу найти этот пост...

 

Спасибо.

Link to comment
  • Administrators

Добрый вечер,

По группам в коллекшен вью пока нет полного понимания. В iOS с этим все ок. В Андроиде не ок, там надо писать свое решение. По скольку тема довольно большая по реализации и йос в приоритете, эта тема пока поставлена на паузу.

2 часа назад, maximus-78 сказал:

И еще мы обсуждали по темам, чтобы можно было в каталогах их держать, что то не могу найти этот пост...

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

Решить сможем, когда появится поддержка стилей в ресурсах, как в fmx. Так как там как раз будет нужная архитектура на базе которой мы сможем развить идею тем и снять это ограничение. Но это будет не скоро (не раньше релиза йос). 

Спасибо

  • Like 1
Link to comment
Guest
Add a comment...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...