vložil Radek Červinka
28. února 2019 12:57
V Delphi Rio byla přidána podpora pro VCL multi resolution imagelisty.
V podstatě se jedná o dvě spolupracující komponenty:
- TImageCollection - udržuje vlastní multi resolution bitmapy
- TVirtualImageList - podle DPI zprostředkovává pohled na TImageCollection
Klíčové vlastnosti:
- List je kompatibilní s TImageList (včetně HIMAGELIST handle), tj. kdekoliv kde se dal použít TImageList můžete použít TVirtualImageList
- List škáluje podle DPI formuláře, tj. list musí být na formuláři kde se použije
- Podpora pro konverzi TImageList na nový list, umí přetáhnout data z původního image listu
- podpora pro hromadný import v různých velikostech
- Chybějící rozlišení dopočítává
Začneme s TImageCollection. Přidáme někam, nejlépe do datamodulu TImageCollection - ten ponese fyzicky data. Ostatní pak je jen "View" na tyto data. Všimněte si, že
jsem přidal 5 ikon a jen v jednom rozlišení. Samozřejmě můžu přidat více velikostí, ale přišlo mi, že dopočet z vyššího rozlišení zafunguje slušně.

V horním rohu je Add, které umí najednou přidat více ikon v různých velikostech. Mějme např. v adresáři
- money-16x16.png
- money-64x64.png
- vendors-search-16x16.png
- vendors-search-64x64.png
Po provedení importu rozhodí wizard 4 ikony na dvě po dvou velikostech.

Nyní máme TVirtualImageList, nastavíme u něj TImageCollection a zobrazíme jeho wizard a stiskem Add (pozor na property AutoFill) vložíme odkazy na ikony z ImageCollection.

Zároveň vidíme preview v daných rozlišení. Způsob dopočítávání rozlišení určuje property TImageCollection.InterpolationMode. Přenos ikon z existujícího imagelistu je možný přes popup menu u TImageCollection. Už jen přenosem existujících ikon dostaneme bonus v tom, že image list bude automaticky resamplovat staré ikony.
Výsledek
Toolbar při 150%
Původní ImageList, 16x16 pixelů

TVirtualImageList, 16x16 pixelů - původní ikony

TVirtualImageList - automatický resample z lepších ikon
