Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi VCL - Multi Res Icon innerhalb der Applikation anzeigen (https://www.delphipraxis.net/202020-vcl-multi-res-icon-innerhalb-der-applikation-anzeigen.html)

Sherlock 19. Sep 2019 09:11

VCL - Multi Res Icon innerhalb der Applikation anzeigen
 
Ich habe eine ico-Datei, mit Icons in mehreren Auflösungen (16x16 bis 256x256) und möchte diese innerhalb der Applikation in einem TImage anzeigen, am besten das Icon, das am ehesten in das TImage passt (zB 128x128). Wie stelle ich das an? Im Moment bekomme ich nur das kleinste zu sehen.
Das Icon habe ich in eine Imageliste geladen. Offensichtlich ist das das Problem, denn in der VCL scheint die TImageList nur eine Auflösung zu können, also keine MultiResBitmaps wie es in FMX gibt. Und die TImageList ist mit Height und Width 16 eingestellt, das brauche ich aber, weil ich das eigentlich als TrayIcon verwenden will. Ins TImage lade ich das mit:
Delphi-Quellcode:
TrayIcon.Icons.GetIcon(0, StateImage.Picture.Icon)
Da gibt es leider keine Möglichkeit die Größe anzugeben. Aufgrund von meinen Bestrebungen höhere oder auch niedrigere DPI unterstützen zu wollen, sollte es da aber schon eine Möglichkeit geben - abgesehen von der offensichtlichen und unflexiblen Lösung, mehrere Imagelisten für verschiedene Auflösungen mitzuführen...

Sherlock

Uwe Raabe 19. Sep 2019 09:31

AW: VCL - Multi Res Icon innerhalb der Applikation anzeigen
 
Eine ImageList hat zwingend immer nur eine Auflösung. Das gibt die Windows-API so vor, wenn am Ende für die Windows Controls halt ein HIMAGELIST Handle benötigt wird.

Seit Rio gibt es aber die Kombination aus TImageCollection und TVirtualImageList. Dabei werden in der TImageCollection unterschiedliche Auflösungen pro Icon hinterlegt und die TVirtualImageList holt sich immer die zu ihrer Größe passenden.

Natürlich kannst du dir auch direkt aus der TImageCollection ein Icon in der gewünschten Größe holen (GetBitmap). Das wird dann sogar noch passend skaliert, falls es in der Größe nicht vorliegt.

Du kannst also deine bisherige ImageList durch eine TVirtualImageList ersetzen. Die verbindest du mit einer TImageCollection, in der du deine Bildchen ablegst. Die TVirtualImageList hat auch noch den Vorteil, daß sie automatisch auf DPI-Änderungen des Owner-Forms reagiert, wenn die Anwendung denn dafür empfänglich ist. Das geht natürlich nur, wenn die TVirtualImageList auf einem Form liegt. Die TImageCollection kann aber auch auf einem Datenmodul untergebracht sein.

Sherlock 19. Sep 2019 09:41

AW: VCL - Multi Res Icon innerhalb der Applikation anzeigen
 
Prima, Danke. Werde ich genau so machen.

:thumb:

Sherlock


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:40 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz