DPI? PPI? High-DPI? Was jetzt?

Rund um die LCL und andere Komponenten
wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: DPI? PPI? High-DPI? Was jetzt?

Beitrag von wp_xyz »

Kannst du mal deine Images zur Verfügung stellen, damit ich das nachvollziehen kann? Ich könnte zwar andere Images nehmen, aber das mit der "eingravierten" Bildgröße ist eine nette Idee.
Zuletzt geändert von wp_xyz am Di 25. Mai 2021, 13:29, insgesamt 1-mal geändert.

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: DPI? PPI? High-DPI? Was jetzt?

Beitrag von Michl »

Mir helfen öfters Code und Beispiele. Geh mal unter MainMenu -> Tools -> Example Projects.

Dort gib in dem Filter von Projects "ImageList" ein. Übrig bleiben ein paar Projekte. Z.B. kannst du dort ein Designtime und eine Runtime Beispiel testen. Vielleicht hilfts ja?!

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Nimral
Beiträge: 390
Registriert: Mi 10. Jun 2015, 11:33

Re: DPI? PPI? High-DPI? Was jetzt?

Beitrag von Nimral »

wp_xyz hat geschrieben:
Di 25. Mai 2021, 13:18
Kannst du mal deine Images zur Verfügung stellen, damit ich das nachvollziehen kann? Ich könnte zwar andere Images nehmen, aber das mit der "eingravierten" Bildgröße ist eine nette Idee.
Klar, hier das ganze Projekt. Ich hab noch ein wenig weiter probiert, und inzwischen - ausgehend von einer leeren TImageList - folgenden Weg gefunden:

1.) EIn Icon hinzufügen --> es erscheint als Bild [0] Größe 16x16
2.) Dann die anderen Größen hinzufügen --> das Icon wird hochskaliert
3.) Jetzt kann ich "mehrere Größen hinzufügen", und alle 4 Icons wählen --> es erscheint ein neues Bild [1] das so aussieht wie es soll
4.) Bild [0] entfernen.

Gut, damit habe ich immerhin die Bilder geladen, es funktioniert aber dennoch nicht, egal wie ich die Windows Skalierung einstelle, ich bekomme immer das 16x16 Icon auf dem Speedbutton.

Armin.
Dateianhänge
HighDPI.zip
(129.29 KiB) 49-mal heruntergeladen
Zuletzt geändert von Nimral am Di 25. Mai 2021, 15:37, insgesamt 1-mal geändert.

Nimral
Beiträge: 390
Registriert: Mi 10. Jun 2015, 11:33

Re: DPI? PPI? High-DPI? Was jetzt?

Beitrag von Nimral »

Moment! Ich hab Fortschritt! Ich habe das Testprojekt jetzt auf mehreren Rechnern getestet und einen gefunden, wo es funktioniert!

Es ist der EInzige der nur einen einzigen Schirm angeschlossen hat, und der steht auf 150% Skalierung --> da wird das richtige Icon (24px blau) angezeigt.

Scheint dass ich noch EInflüsse von Windows mit rein bekomme, je nachdem ob es mehrere Schirme gibt, ob sie alle auf High-DPI eingestellt sind, und welcher der Hauptschirm ist.

Außerdem musste ich zu meinem Erstaunen den links-unten Pixel Trick anwenden, sonst habe ich Probleme mit der transparenten Farbe bekommen. Die ImageList hat doch eigentlich eine eigene EInstellung für die transparente Farbe?

Armin.

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: DPI? PPI? High-DPI? Was jetzt?

Beitrag von Michl »

Hast du schon mal die Projekteinstellung DPI awareness "Vista-8: on, 8.1/10+: per monitor (True/PM_V2)" getestet?

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Nimral
Beiträge: 390
Registriert: Mi 10. Jun 2015, 11:33

Re: DPI? PPI? High-DPI? Was jetzt?

Beitrag von Nimral »

Die Einstellung scheint erst mal nichts zu verändern.

Jetzt habe ich auch an den PCs mit zwei Schirmen Reaktion auf High-DPI.

Es scheint so dass die Einstellung des Hauptschirms zum Programmstart entscheidend ist. Ist das Programm einmal offen blebt das Icon so wie es ist, auch wenn ich

- das Programmfenster auf den anderen Schirm mit anderer Scaling-EInstellung ziehe
- die Einstellung für das WIndows Scaling verändere, ohne das Programm neu zu starten

(Getestet mit der exe, jetzt auch noch die Frage ob die Lazarus IDE bzw. der Schirm auf dem sie gerade läuft einen Einfluss hat)

Armin.

wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: DPI? PPI? High-DPI? Was jetzt?

Beitrag von wp_xyz »

Nimral hat geschrieben:
Di 25. Mai 2021, 14:32
und inzwischen - ausgehend von einer leeren TImageList - folgenden Weg gefunden:
Das ist mein Weg:
  • TImageList aufs Formular klicken
  • Als erstes unbedingt Width und Height als Basiswert für 100% einstellen, wenn man etwas anderes als 16x16 braucht (wenn man schon Bilder in der Liste hat und das nachträglich macht, werden die Bilder gelöscht).
  • Wenn man schon im Objekt-Inspektor ist, auch gleich Scaled auf true setzen
  • Dann den ImageList-Editor per Doppelklick öffnen
  • Für jede zusätzliche Bildgröße auf "Neue Größe/Auflösung" klicken und den Wert der Bildbreite eingeben (bei 24x24 also nur "24").
  • Ich füge in der Regel mehrere Größen zum selben Bild hinzu. Dafür ist es ideal alle Bildgrößen zusammen in einem Ordner zu haben, etwa so wie bei der Lazarusinstallation die Unterordner von "Images".
  • Auf "Mehrere Größen hinzufügen" klicken. Das bedeutet: Ich möchte ein neues Bild hinzufügen, aber gleich mehrere Größen auf einmal. Ich navigiere zum Bilder-Ordner und CTRL-Clicke auf alle Größen des gewünschten Bildes. Nun erscheinen alle Größen im Bildlisten-Editor (wobei die rechte Ansicht ein Darstellungsproblem hat, das aber bei dem Anwählen eines anderen Bildes in der Liste verschwindet.)
  • Würde ich statt auf "Mehrere Größen hinzufügen" auf "Hinzufügen" klicken, wird nur ein einzelnes Bild in seiner eigenen Größe hinzugefügt, und die anderen Größen werden daraus berechnet.
  • Manchmal hat man in einem Bild mehrere Bilder zu einem Streifen kombiniert. Diese kann man mit "Zerteilen und hinzufügen" laden, wobei das Programm versucht das Bild "vernünftig" in Einzelbilder zu zerlegen und jedes Einzelbild einen eigenen ImageIndex bekommt; die anderen Auflösungen werden wieder berechnet.
  • Will man ein Bild ersetzen, wird es etwas umständlicher: zu ersetzendes Bild anklicken im ImageList-Editor, "Ersetzen" klicken, zu dem Ordner mit dem Ersatzbild navigieren und das Ersatzbild anwählen. Mit "Ersetzen" wird das Bild exakt dieser Größe ersetzt, mit "Alle Größen ersetzen" werden alle Größen aus dem einen angeklickten berechnet. Das komfortable CTRL-Clicken geht hier leider nicht.
  • "Sichern" speichert das Basisbild (100%) des angeklickten ImageIndex, "Alle sichern" erzeugt einen Streifen mit allen 100%-Bildern. Hier könnte man sicher noch etwas mehr Arbeit reinstecken...
  • "Löschen" löscht alle Teil-Bilder des angewählten ImageIndex, "Leeren" löscht die komplette ImageList.
Wenn eine Komponenten dieselben Bilder in verschiedenen Größen benötigt (z.B. TListView für LargeImages und SmallImages), kann man dieselbe ImageList verwenden und muss nur in der ImagesWidth-Property die gewünschte Breite eintragen (bei TListView LargeImagesWidth = 32 und SmallImagesWidth=16).

wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: DPI? PPI? High-DPI? Was jetzt?

Beitrag von wp_xyz »

Leider ist mein Schreibtisch zu klein (eigentlich: zu voll), so dass ich keinen zweiten Monitor habe, und nichts dazu sagen kann, ob das LCLScaling entsprechend funktioniert, wenn man auf den anderen Monitor mit anderer Auflösung wechselt. Es gibt jedenfalls im Forum oder Bugtracker gelegentlich Meldungen, dass das nicht ganz einwandfrei funktioniert (aber ohne das selbst gesehen zu haben, glaube ich heutzutage eigentlich gar nichts mehr...)

Antworten