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/)
-   -   Icons im Program dem DPI-Wert anpassen (TPngImageList + Collection) (https://www.delphipraxis.net/204169-icons-im-program-dem-dpi-wert-anpassen-tpngimagelist-collection.html)

Strict 1. Mai 2020 12:09


Icons im Program dem DPI-Wert anpassen (TPngImageList + Collection)
 
Ein bestehendes Programm muss ich in der nächsten Zeit etwas aufhübschen. In Zeiten von 200% DPI sind die Icons in der ToolBar und an anderen Stellen wie beispielsweise eine ListBox mit selbstbezeichneten Icons einfach zu klein.

Welches ist die beste und einfachste Möglichkeit, dieses Problem zu umgehen?

Vielleicht sogar basierend auf TPngImageList / TPngImageCollection?
Gerade benutze ich sehr umständlich mehrere TPngImageList'en mit einer Funktion die mir das Icon anhand des Namens aus der Liste meiner Wahl zurückgibt. Die TPngImageCollection kann das leider nicht.

Ein record-Helper für TPngImageCollection kennt leider kein GetIcon().

Uwe Raabe 1. Mai 2020 12:44

AW: Icons im Program dem DPI-Wert anpassen (TPngImageList + Collection)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Welche Delphi-Version? Neuere Versionen haben TImageCollection undTVirtualImageList für genau diesen Zweck.

Alternativ könnte ich noch im Anhang DynImageList anbieten.

Strict 1. Mai 2020 15:48

AW: Icons im Program dem DPI-Wert anpassen (TPngImageList + Collection)
 
10.3.3.
Ich werde die TImageCollection ausprobieren. Wie verwendet man die? Ich finde so gut wie nichts dazu in der Doku.

Ich dachte eigentlich in etwa so an das Icon zu kommen
Delphi-Quellcode:
ImageCollection1.Images.Items[ImageCollection1.GetIndexByName(AName)] ...
Es geht mir darum eine TToolBar mit Icons zu füllen und es sollen immer automatisch die richtigen je nach DPI ausgewählt werden.

Ich habe diese Anleitung abgearbeitet. Aber die Bildchen in meiner TToolBar sind bei 175% DPI trotzdem nur 16x16px klein.
Wenn ich ein Bild mit
Delphi-Quellcode:
VirtualImageList1.GetIcon(Index, Image5.Picture.Icon));
in ein 96x96 TImage lade, sehe ich trotzdem nur ein 16x16 Bildchen.
https://translate.google.com/transla...mage-List.aspx

Uwe Raabe 1. Mai 2020 16:34

AW: Icons im Program dem DPI-Wert anpassen (TPngImageList + Collection)
 
Zitat:

Zitat von Strict (Beitrag 1463347)
10.3.3.
Ich werde die TImageCollection ausprobieren. Wie verwendet man die? Ich finde so gut wie nichts dazu in der Doku.

Steht alles in dem verlinkten Wiki-Artikel alles drin. Eigentlich ist es gar nicht so schwierig.
  1. Platziere eine TImageCollection auf dem Form
  2. Lade alle Images in den verschiedenen Größen
  3. Platziere eine TVirtualImageList auf dem Form
  4. Verbinde diese mit der ImageCollection und selektiere alle oder alle benötigen Bilder in die VirtualImageList
  5. Verbinde die Toolbar mit der VirtualImageList

Die Toolbar-Icons werden nun automatisch an die aktuelle DPI angepasst. Kein weiterer Code nötig.

Strict 1. Mai 2020 16:53

AW: Icons im Program dem DPI-Wert anpassen (TPngImageList + Collection)
 
Genau das habe ich gemacht und ich sehe trotzdem nur sehr unscharfe kleine Bilder.

Uwe Raabe 1. Mai 2020 18:25

AW: Icons im Program dem DPI-Wert anpassen (TPngImageList + Collection)
 
Kannst du mal ein entsprechendes Beispielprojekt (mit .dproj Datei!) hier anhängen?

Strict 1. Mai 2020 19:05

AW: Icons im Program dem DPI-Wert anpassen (TPngImageList + Collection)
 
Problem gefunden. Die ToolBar muss direkt auf dem TForm liegen und darf vorher nicht auf einem TPanel liegen.
Ich werde bald sicher noch eine Frage zu dieser Liste zusammen mit einer ListBox haben. Mache ich dann aber in einem anderen Thema.

juergen 1. Mai 2020 19:44

AW: Icons im Program dem DPI-Wert anpassen (TPngImageList + Collection)
 
Evtl. ist auch das Verwenden von Vector-Icons interessant. Ich nutze die schon länger, allerdings weiß ich gar nicht ob Delphi da von Haus aus schon was hat (nutze DevExpress).

Strict 4. Mai 2020 19:42

AW: Icons im Program dem DPI-Wert anpassen (TPngImageList + Collection)
 
Das Problem ist jetzt beseitigt. Die Toolbar darf erstens nicht auf einem Panel liegen und zweitens darf die ImageCollection sowie die VirtualImageList nicht auf einem DatenModul liegen.
Die Bilder können aus der VirtualImageList geladen und zugewiesen werden. Aber beim Wechseln des Bildschirms und somit der DPI, skalieren die Bildchen nicht. Liegen die Imagelisten auf einer normalen Form, funktioniert alles so wie gewollt. Sieht fast nach einem Bug aus.

Uwe Raabe 4. Mai 2020 21:00

AW: Icons im Program dem DPI-Wert anpassen (TPngImageList + Collection)
 
Zitat:

Zitat von Strict (Beitrag 1463662)
Liegen die Imagelisten auf einer normalen Form, funktioniert alles so wie gewollt. Sieht fast nach einem Bug aus.

Nein, das ist kein Bug. Die TVirtualImageList muss ja über die DPI-Änderung für das Form informiert werden. Deswegen muss sie zwingend auf dem Form liegen. In dem besagten Artikel steht auch:
Zitat:

TVirtualImageList erbt automatisch die DPI seines Eigentümers (TCustomForm oder TCustomFrame), falls dieser skaliert ist.
Damit ist klar, daß das Form oder Frame der Owner der ImageList sein muss.

Unter Bewährtes Vorgehen steht dann auch:
Zitat:

Eine TVirtualImageList-Komponente sollte immer auf einem Formular, nicht in einem Datenmodul platziert werden. Formulare haben einen zugeordneten Monitor und eine zugeordnete Auflösung (DPI); Datenmodule nicht. TImageCollection-Komponenten können beliebig platziert werden, da sie einfach die Quelle sind und nicht von DPI-Änderungen beeinflusst werden: sie sind die Quelle und die virtuelle Bilderliste ist die Darstellung.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:18 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