Наверняка кто-то сталкивался с задачей динамического создания элементов списка в Firemonkey (XE5/6). Создать строковую позицию Item несложно. Но есть еще несколько объектных элементов для такого компонента как список (TListbox). И простой директивой Add здесь не обойтись. Для тех, кто хочет создавать современные и информативные списки, используя объекты типа TMetropolisUIListBoxItem, читайте небольшую статью.
Задача
Динамически пересоздавать содержимое Listbox, элементами которого должны быть объекты класса TMetropolisUIListBoxItem.
Решение
Кидаем на форму компонент Listbox1 (TListbox). На событие, например, нажатие кнопки Button1 будем создавать количество позиций в списке, определённое в поле NumberBox1. Далее, по шагам я укажу комментарии к каждой строке кода.
Листинг
procedure TForm1.Button1Click(Sender: TObject);
var
lb:array of TMetropolisUIListBoxItem; {определяем массив переменных класса TMetropolisUIListBoxItem}
i:integer;{переменная-счётчик}
begin
ListBox1.Clear; // чистим список от всех элементов
SetLength(lb,trunc(NumberBox1.Value)); { устанавливаем длину одномерного динамического массива}
for i:=0 to trunc(NumberBox1.Value) do
begin
lb[i]:=TMetropolisUIListBoxItem.Create(ListBox1); {создаём объект класса TMetropolisUIListBoxItem и в качестве родителя указываем список ListBox1}
lb[i].Title:='It''s a TITLE for item ' +inttostr(i); // изменяем свойство заголовка элемента списка
lb[i].SubTitle:='It''s a SUBtitle for item ' +inttostr(i); // изменяем свойство подзаголовка элемента списка
lb[i].Description:='It''s a DESCRIPTION for item ' +inttostr(i); // изменяем свойство описания элемента списка
lb[i].Icon.LoadFromFile('ico.png'); // загружаем иконку из текущей директории исполняемого файла
ListBox1.AddObject(lb[i]); // добавляем объекты в ListBox1
end;
end;
Результат
Вот так вот несложно можно создать динамические элементы списка, пользуясь классическими методами программирования. Удачного программирования.