AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) 16x16 Icons bei HighDPI bzw. Skalierung?
Thema durchsuchen
Ansicht
Themen-Optionen

16x16 Icons bei HighDPI bzw. Skalierung?

Ein Thema von MicMic · begonnen am 11. Jul 2018 · letzter Beitrag vom 14. Jul 2018
Antwort Antwort
MicMic

Registriert seit: 26. Mai 2018
296 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

16x16 Icons bei HighDPI bzw. Skalierung?

  Alt 11. Jul 2018, 18:25
Hallo,

vielleicht hat ja jemand eine Idee.
in Delphi 10 habe ich "Hochauflösung aktivieren" (mit "Manifestdatei automatisch erzeugen") in den Projekt-Optionen aktiviert.
Da bekommt man von der System Image List (Icons) für die kleinen Icons, die 32x32 Icons zurück geliefert.
Macht auch Sinn bei großen Auflösungen aber bei einer 1920x1080 bekomme ich dann auch 32x32 Icons. Hier hätte ich aber gerne die 16x16 Icons.

Vielleicht dynamisch HighDPI an/abschalten?
Wobei ohne HighDPI die Fenster-Schaltflächen (Minimieren/Maximieren/Schließen) auch Probleme machen, sprich ein MouseOver/Enter geht da nicht so richtig.

Ich habe von SHGetFileInfo SHGFI_SMALLICON und von SHGetImageList SHIL_SMALL ausprobiert. Mit HighDPI bekomme ich immer 32x32 geliefert.

Wobei mir die Ordner-Icons bei 32x32 besser gefallen. Die sind nämlich bei 16x16 anders.
Mit "DrawIconEx" kann man nun auch skalieren. Hier habe ich probiert große/extragroße auf 16x16 herunter zu skalieren. Geht zwar aber ganz schön sind die dann auch nicht alle. In 16x16 ist halt auch nicht viel Platz. Die Icons in ein Bitmap zu kopieren und dann zu skalieren, sah noch schlechter aus. Muss ich jetzt irgendwie die Icons in PNG umwandeln und dann herunter skalieren, um eine bessere Qualität zu bekommen? Oder weiß jemand einen anderen Tipp? Beim Skalieren muss es ja irgendwie weich werden, damit es Optisch besser passt. Nur dann auch nicht zu viel weich, damit nicht alles unscharf ist

Michael
  Mit Zitat antworten Zitat
MicMic

Registriert seit: 26. Mai 2018
296 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

AW: 16x16 Icons bei HighDPI bzw. Skalierung?

  Alt 11. Jul 2018, 18:30
Nachtrag: Vielleicht bin ich auch nur sehr empfindlich. Die Skalierung mit "DrawIconEx" ist eigentlich mit anderen Anwendungen vergleichbar. Aber vielleicht gibt's ja was besseres
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: 16x16 Icons bei HighDPI bzw. Skalierung?

  Alt 11. Jul 2018, 19:41
Es wäre gut zu Wissen wo/wie/womit Du Icons darstellen möchtest.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.393 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: 16x16 Icons bei HighDPI bzw. Skalierung?

  Alt 12. Jul 2018, 00:35
Hast du im System eine Skalierung eingestellt? 200% vielleicht?
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: 16x16 Icons bei HighDPI bzw. Skalierung?

  Alt 12. Jul 2018, 06:35
Delphi-Quellcode:
var
  h : HWND;
begin
  h := LoadImage(MainInstance, 'MAINICON', IMAGE_ICON, 64, 64, 0);
  Image1.Picture.Icon.Handle := h;
end;
Das obige würde ein 64x64 Icon laden was in der .exe als MAINICON definiert ist. 64x64 sollte in dieser Icon-Gruppe auch existieren.
Mit LoadImage() kann man Icons beliebiger Größe laden.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
MicMic

Registriert seit: 26. Mai 2018
296 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#6

AW: 16x16 Icons bei HighDPI bzw. Skalierung?

  Alt 12. Jul 2018, 15:03
Hier noch mal ein Beispiel-Code:
Code:
var
 SysIL : UInt;
 Result : HIMAGELIST;
 IList : TImageList;

const
 IID_IImageList: TGUID = '{46EB5926-582E-4017-9FDF-E8998DAA0950}'; // Das hab ich so im Internet gefunden

SysIL := SHGetImageList(SHIL_SMALL,IID_IImageList, Pointer(Result));
If SysIL = S_OK Then
Begin
 IList := TImageList.Create(self);
 IList.Handle := Result;
 IList.ShareImages := true;
End;
Label1.Caption := IntToStr(IList.Height);
Oder auch mit "SHGetFileInfo(... SHGFI_SYSICONINDEX or SHGFI_SMALLICON)". Ich bekomme mit der Option "Hochauflösung aktivieren" 32x32 Icons. Dabei spiel es keine Rolle, welche Skalierung und Auflösung ich nutze. Die 16x16 bekomme ich nur, wenn "Hochauflösung aktivieren" bei den Projektoptionen ausgeschaltet ist.

"LoadImage" ist wohl nicht für die System Icon Liste zu gebrauchen?

Michael
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:54 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