На данный момент (до версии RAD Studio XE5) FireMonkey не имеет компонент TImageList.
Однако, для хранения графических ресурсов отлично подходит TStyleBook. Общая идея сводится к добавлению именованных графических ресурсов в TStyleBook в контейнере TImage. Затем мы каждому TImage задаем имя через StyleName. И затем в нашем коде уже по строковому идентификатору достаем нужную картинку.
Рассмотрим теперь это на практике.
Создадим приложение, которое будет вытаскивать картинку по имени из TStyleBook и отображать его в контейнере TImage.
1. Создаем TStyleBook. Перетаскиваем его палитры компонентов (Tool Palette) в дизайнере на форму. Так же на форме я разметил кнопку и TImage для отображения выбранного изображения.
2. Открываем дизайнер стилей и добавляем компонент TImage, путем перетаскивания TImage в корень Structure Panel (панель с деревом компонентов формы).
3. В TImage загружаем картинку и называем картинку через TImage.StyleName. В моем случае изображение андроида и название - 'android'.
4. Обратите внимание, что RAD Studio XE5 поддерживает картинки разного dpi для четкой отображения на экранах с разными dpi и Экранным масштабом (Scale). На рисунке выше, я загрузил два разрешения картинки, для обычных экранов, и экранов с удвоенной плотностью пикселей. Это актуально для мобильных платформ и OSX с экранами ретина.
5. Пишем метод, который вытащить картинку по имени:
function TForm4.GetImage(const AImageName: string): TBitmap;
var
StyleObject: TFmxObject;
Image: TImage;
begin
StyleObject := ImageBook.Style.FindStyleResource(AImageName);
if (StyleObject <> nil) and (StyleObject is TImage) then
begin
Image := StyleObject as TImage;
Result := Image.Bitmap;
end
else
Result := nil;
end;
Каждый объект FireMonkey TFmxObject предоставляет способ для поиска среди дочерних объектов объект с указанными именем StyleLookup. Доступ к корню всех стилей в StyleBook является свойство TStyleBook.Style. Далее ищем у корня стиль с нужным именем картинки. Если стиля нету, то метод вернет nil. Иначе проверяем, что стиль есть и он экземпляр контейнера TImage. Далее просто выбираем картинку через свойство Bitmap.
6. Вытаскиваем картинку и отображаем ее в TImage на форме.
procedure TForm4.Button1Click(Sender: TObject);
var
Bitmap: TBitmap;
begin
Bitmap := GetImage('android');
if Bitmap <> nil then
Image1.Bitmap.Assign(Bitmap);
end;
Вот в принципе и вся идея. Эту идею можно обобщить, сделав отдельный компонент с быстрой загрузкой картинок. Но это уже практика.
Пример можно скачать тут: ImageBook.zip