![]() |
Wie verwendet man die neue TVirtualImageList
Wie verwendet man die neue TVirtualImageList? Ich verstehe noch nicht so rich tig was die überhaupt soll, wofür die ImageCollection ist, warum man die im OI mit der VirtualList verknüpft und noch mehr. Mein erster Versuch geht in die Hose
Delphi-Quellcode:
Auf der Form habe ich TVirtualImageList und TImageCollection1. Alle Icons sind im TImageCollection und komischerweise auch im TVirtualImageList. Sieht aus wie unnötige doppelte Arbeit.
Image1.Picture.Icon := VirtualImageList1.Images.Items[ImageCollection1.GetIndexByName('icon')];
|
AW: Wie verwendet man die neue TVirtualImageList
Die beiden Komponenten spielen ihre Vorteile eigentlich erst dann aus, wenn es um High DPI geht. Die ImageCollection hält zunächst erstmal nur die Icons, gegebenenfalls auch in unterschiedlichen Größen. Die VirtualImageList holt sich ihre Icons aus der ImageCollection in der Größe, die sie gerade braucht. Damit wird eine automatische Anpassung an unterschiedliche DPI Werte ermöglicht. Damit das funktioniert muss die VirtualImageList zwingend auf ein Form platziert werden. Das Form bemerkt die DPI Änderung und benachrichtigt die VirtualImageList. Diese besorgt sich dann die Icons in der passenden Größe von der ImageCollection, die bei Bedarf auch skaliert wenn die passende Größe nicht vorhanden ist.
Dein Code-Beispiel
Delphi-Quellcode:
Image1.Picture.Icon := VirtualImageList1.Images.Items[ImageCollection1.GetIndexByName('icon')];
kann so nicht funktionieren, da Images.Items kein TIcon oder TBitmap zurückliefert, sondern ein TVirtualImageListItem. Es übrigens auch gar nicht nötig, über die VirtualImageList zu gehen. Das Icon bekommst du wesentlich bequemer direkt aus der ImageCollection. Dabei gibst du gleich die Größe an, in der du es haben willst.
Delphi-Quellcode:
Image1.Picture.Graphic := ImageCollection1.GetSourceImage(ImageCollection1.GetIndexByName('icon'), 256, 256);
|
AW: Wie verwendet man die neue TVirtualImageList
Ich benutze aktuell deine PngImageList mit mehreren Helpern. So gesehen benutze ich 5 PngImageLists mit 5 verschiedenen Icongrößen.
Über eine eigene Prozedur lasse ich mir dann das Icon zurückgeben was ich brauche. Was gebraucht wird, übergebe ich in den Parametern.
Delphi-Quellcode:
HighDPI wird auch die nächsten Jahre an mir vorbei gehen. Danke für deine Erklärung. Habe demnach keinen Gebrauch für diese neue Komponente.
procedure ... LoadIcon(const AName: string; IconSize: TIconSize; Icon: TIcon);
begin case IconSize of is16: Icons16.LoadImageByName(AName, Icon); is32: Icons32.LoadImageByName(AName, Icon); is48: Icons48.LoadImageByName(AName, Icon); is64: Icons64.LoadImageByName(AName, Icon); is128: Icons128.LoadImageByName(AName, Icon); end; end; |
AW: Wie verwendet man die neue TVirtualImageList
ein..
Delphi-Quellcode:
wäre nicht schlecht ist ja fast schon Standard.
is256:
Icons256.LoadImageByName(AName, Icon); gruss |
AW: Wie verwendet man die neue TVirtualImageList
Wo sollte ich das denn benutzen? Wenn ich an einer Stelle an 16x16 Icon brauche, nehme ich 16x16. Ich habe keine Stelle wo ich jemals 256 bräuchte.
|
AW: Wie verwendet man die neue TVirtualImageList
Zitat:
Es sei denn deine Anwendungen laufen nur auf deinem System Privat.. dann kannst du das natürlich ignorieren. Wenn du also nur! Größen definierst die Dir zusagen und das System ist so eingestellt das es bei größeren Monitoren zum Beispiel 256 Icons anzeigt. Nun dann bist du leicht aufgeschmissen bzw.. es wird das maximal größte verwendet was dann vom System skaliert wird. War auch nur ein Vorschlag. :) gruss |
AW: Wie verwendet man die neue TVirtualImageList
Keine Ahnung was du meinst. Bei mir wird alles richtig angezeigt. Egal welche Auflösung und DPI.
|
AW: Wie verwendet man die neue TVirtualImageList
Wer UI-Grafiken 2018 als Rastergrafiken speichert, hat die Kontrolle über sein Leben verloren.
|
AW: Wie verwendet man die neue TVirtualImageList
Statt solche sinnlosen Sätze zu äußern wär ich dankbar wenn man wenigstens erklärt wie es anders geht.
Zitat:
|
AW: Wie verwendet man die neue TVirtualImageList
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz