theo hat geschrieben: Mo 20. Nov 2023, 13:00
Kannst du noch kurz erklären, wie der Zusammenhang zwischen PPI (Ist DPI nicht eigentlich für den Druck?) und Bildgrösse ist?
Wenn du eine TImageList auf das Formular setzst, wird eine Größe in Width und Height angegeben, normalerweise 16. Durch einen Doppelklick auf der ImageList kannst du mit Hilfe von "Neue Größe/Auflösung" weitere Bildgrößen definieren, z.B. 24, 32. Insgesamt stellt die ImageList dann in diesem Beispiel Bilder in drei Größen zur Verfüging: 16x16, 24x24, 32x32. Normalerweise gibst du diese drei Bilder unter "Mehrere Größen hinzufügen" ein - im Ordner images/general-purpose der Lazarus-Installation hat Ally für all diese Fälle Bilder gemalt. Fehlt eine Größe, wird das fehlende Bild aus dem größten der Reihe herunterskaliert, was erstaunlich gut funktioniert.
Warum das alles? Wenn die Eigenschaft Scaled auf true gesetzt ist, wertet die ImageList die aktuelle Bildschirmauflösung aus und verwendet die Bilder, die am besten zur aktuellen Auflösung passen. Also wenn dein System unter 144ppi läuft (150%) läuft, wird im obigen Beispiel das 24er-Bild verwendet, denn 150% von 16 (das Bild bei 100%) ist 24.
Es gibt noch eine weitere Rafinesse. Das Control, das die ImageList verwendet, hat eine Property ImagesWidth, normalerweise 0. Das bedeutet: "Nimm für 96ppi die Bildgröße, die als Width und Height der ImageList direkt definiert ist". Mit Hilfe von ImagesWidth kann man aber eine andere Basisgröße definieren. Auf diese Weise kann ein und dieselbe Imageliste für Controls verwendet werden, die unterschiedliche Bildgrößen verlangen. Eine ListView, z.B. hat zwei ImageLists, eine SmallImages und eine LargeImages mit 16x16 bzw. 32x32 Pixeln normalerweise. Steht nun bei LargeImagesWidth der Wert 32, so fordert die Listview bei 96ppi das 32er-Bild von der ImageList an; dasselbe Bild kann aber auch von der SmallImages-Liste für 16x16 verwendet werden (SmallImagesWidth wäre dann 16, oder 0, weil Imagelist.Width schon 16 ist). In diesem Fall müssen natürlich noch mehr Bildgrößen unter "Neue Größe/Auflösung" definiert werden: 16, 24, 32 und 32 (ok - das haben wir schon) 48, 64. All diese Größen gibt es in der Lazarus-Icon-Collection im Ordner "images/general-purpose".