Что нового в TImageList

Posted by on in Programming

Более подробно об этом компоненте рассказано в статье TImageList в Fire Monkey, а здесь я хочу сосредоточить внимание на непонятностях и нововведениях (Embarcadero® RAD Studio 10.1 Berlin Version 24.0).

1. Остается популярным вопрос: "А почему это у меня картинка всегда 16×16?"

На самом деле это не так. Просто в разделе "Selected Image" всегда отображаются координаты и размеры для масштаба 1, а при добавлении файла с использованием кнопки Add автоматически устанавливается масштаб если размеры изображения кратны 8, или 10 (исходим из наиболее популярных размеров 16, 24, 32, 20). Теперь об этом напоминает всплывающая подсказка:

SelectedImage74

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

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

2. Появилась возможность при добавлении, выбрать несколько изображений, однако следует учитывать, что добавляемые файлы должны удовлетворять нескольким условиям:
  • Размеры не должны превышать 256×256, чтобы ни кто не вздумал добавлять все фотки из фотоаппарата.
  • Названия файлов, должны соответствовать одной из масок:

NN.eee
TT.eee
NameNN.eee
Name_NN.eee
Name.eee
This email address is being protected from spambots. You need JavaScript enabled to view it.

где
Name - имя исходного изображения;
eee - расширение файла соответствующее одному из поддерживаемых форматов (png, jpg, bmp);
NN - любое целое число;
TT - любые 1, или два символа (коротенькие названия учитываются как есть).

  • У файлов с одинаковым "Name", отношение высоты к ширине должно быть одинаковым, а соотношения размеров должны укладываться в ряд 1; 1,5; 2... Например это 16×16, 24×24, 32×32. Если добавляется несколько изображений с одинаковым "Name" и в списке "Source of Images" еще нет картинки с этим "Name", то масштаб самого маленького изображения будет равен 1.

При добавлении нескольких изображений, ни какие запросы не выдаются, предполагается, что всегда было выбрано "Yes". Файлы которые не удовлетворяют некоторым условиям просто игнорируются. См. видео

Названия графических файлов, которые входят в поставку Delphi, удовлетворяют маске. Вы можете последовательно загрузить изображения из папки
..:\Program Files (x86)\Embarcadero\RAD Studio\18.0\Images\GlyFX\Icons

При этом, рекомендуется начинать загрузку с самых маленьких картинок

3. Для упрощения загрузки картинок в Run-time добавлены новые методы AddOrSet, которые позволяют загрузить несколько однотипных изображений для разных масштабов.
  • ImageList1.Source.AddOrSet

  • ImageList1.AddOrSet

Эти методы имеют следующие параметры
SourceName - имя исходного изображения то, что отображается в списке "Source of Images". Если элемента с таким названием ранее не было, то добавляет новый элемент, иначе замещается старый.
Scales - массив с масштабами добавляемых изображений.
FileNames - массив с полными названиями файлов. Размеры массивов Scales и FileNames должны быть одинаковыми. 
TransparentColor - прозрачный цвет, по умолчанию TColors.SysNone, т.е. отсутствует. Обычно используется при загрузке старых bmp-файлов. При загрузке png-файлов, не требуется т.к. в этом случает используется альфа-канал.
Width, Height - ширина и высота изображения для масштаба 1. При добавлении фалов, изображения могут быть сжаты, или растянуты. В итоге ширина и высота каждого изображения будут равны Width * Scales[I] и Height * Scales[I] соответственно. Если не заданы (0 по умолчанию), то будут использованы размеры нулевого добавляемого изображения с учетом указанного масштаба.
 
Метод ImageList1.Source.AddOrSet возвращает элемент коллекции Source, который был добавлен, или замещен. 

Метод ImageList1.AddOrSet добавляет элемент не только коллекции Source, но и Destination (если его еще не было) и возвращает номер изображения который может использоваться в качестве значения свойства ImageIndex в различных контролах.

Вот пример использования:

procedure TForm8.Button1Click(Sender: TObject);
begin
  Button1.Images := ImageList1;
  Button1.ImageIndex := ImageList1.AddOrSet('Add', [1, 1.5, 2],
    ['D:\Мои веселые картинки\Icons\add16.png',
     'D:\Мои веселые картинки\Icons\add24.png',
     'D:\Мои веселые картинки\Icons\add32.png']);
end;

Спасибо за внимание.



Comments

Check out more tips and tricks in this development video: