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

Есть ли в fmx класс TImageList?


rareMax

Вопрос

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

  • 0
  • Администраторы

На данный момент (до версии RAD Studio XE5) FireMonkey не имеет компонент TImageList.

Однако, для хранения графических ресурсов отлично подходит TStyleBook. Общая идея сводится к добавлению именованных графических ресурсов в TStyleBook в контейнере TImage. Затем мы каждому TImage задаем имя через StyleName. И затем в нашем коде уже по строковому идентификатору достаем нужную картинку.

 

Рассмотрим теперь это на практике.

Создадим приложение, которое будет вытаскивать картинку по имени из TStyleBook и отображать его в контейнере TImage.

 

1. Создаем TStyleBook. Перетаскиваем его палитры компонентов (Tool Palette) в дизайнере на форму. Так же на форме я разметил кнопку и TImage для отображения выбранного изображения.

post-1-0-54560700-1388694754_thumb.jpg

 

2. Открываем дизайнер стилей и добавляем компонент TImage, путем перетаскивания TImage в корень Structure Panel (панель с деревом компонентов формы).

post-1-0-04195500-1388694739_thumb.jpg

 

3. В TImage загружаем картинку и называем картинку через TImage.StyleName. В моем случае изображение андроида и название  - 'android'. 

post-1-0-47577400-1388694758_thumb.jpg

post-1-0-55951300-1388694756_thumb.jpg

 

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

Ссылка на комментарий
Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...