Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

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/)
-   -   Wie verwendet man die neue TVirtualImageList (https://www.delphipraxis.net/198699-wie-verwendet-man-die-neue-tvirtualimagelist.html)

DieDolly 24. Nov 2018 14:07

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:
Image1.Picture.Icon := VirtualImageList1.Images.Items[ImageCollection1.GetIndexByName('icon')];
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.

Uwe Raabe 24. Nov 2018 14:40

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);

DieDolly 24. Nov 2018 14:47

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:
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;
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.

EWeiss 24. Nov 2018 16:09

AW: Wie verwendet man die neue TVirtualImageList
 
ein..

Delphi-Quellcode:
  is256:
    Icons256.LoadImageByName(AName, Icon);
wäre nicht schlecht ist ja fast schon Standard.

gruss

DieDolly 24. Nov 2018 17:43

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.

EWeiss 24. Nov 2018 17:58

AW: Wie verwendet man die neue TVirtualImageList
 
Zitat:

Zitat von DieDolly (Beitrag 1419053)
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.

Du eventuell nicht aber das System vielleicht?
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

DieDolly 24. Nov 2018 18:05

AW: Wie verwendet man die neue TVirtualImageList
 
Keine Ahnung was du meinst. Bei mir wird alles richtig angezeigt. Egal welche Auflösung und DPI.

Redeemer 24. Nov 2018 18:29

AW: Wie verwendet man die neue TVirtualImageList
 
Wer UI-Grafiken 2018 als Rastergrafiken speichert, hat die Kontrolle über sein Leben verloren.

DieDolly 24. Nov 2018 18:32

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:

hat die Kontrolle über sein Leben verloren.
Dümmer gehts echt nicht.

Der schöne Günther 24. Nov 2018 19:31

AW: Wie verwendet man die neue TVirtualImageList
 
Zitat:

Zitat von Redeemer (Beitrag 1419062)
Wer UI-Grafiken 2018 als Rastergrafiken speichert, hat die Kontrolle über sein Leben verloren.

Hehe, basiert nicht FireMonkey noch komplett auf Bitmap-Grafiken? :duck:


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:26 Uhr.
Seite 1 von 4  1 23     Letzte »    

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