Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Verzerrtes Programm-Icon in der Taskleiste und im Programmfenster (https://www.delphipraxis.net/191251-verzerrtes-programm-icon-der-taskleiste-und-im-programmfenster.html)

Tahtu 25. Dez 2016 16:34

Verzerrtes Programm-Icon in der Taskleiste und im Programmfenster
 
Mein Programm-Icon wird in der Taskleiste und im Programmfenster verzerrt dargestellt.

Das Icon selbst ist in zahlreichen Auflösungen von 16x16 bis 256x256 jeweils mit 32 bit in der .res Datei gespeichert. Wenn ich alle Auflösungen, bis auch die 16x16 lösche, bekomme ich in der Taskzeile und im Programmfenster jeweils ein klares Icon.

Aber ich habe extra so viele Auflösungen in Icon, da es im Explorer und auf dem Desktop ja in unterschiedlichen Größen angezeigt wird und auch auf Systemen mit mehr als 100% DPI noch scharf sein soll.

Getestet habe ich das Problem auch mit 100% DPI - auch dort wird mir in der Taskzeile und im Programmfenster ein unscharfes Icon gezeigt.

Dann habe ich mal die Größ der Icon in meiner Taskzeile ausgemessen - es sind 16x16 Pixel.

Hat jemand eine Idee, wie ich in der Taskzeile ein scharfes Icon hinbekommen, obwohl ich als MAINICON ein Icon in unterschiedlichen Größen speichere?

a.def 25. Dez 2016 17:25

AW: Verzerrtes Programm-Icon in der Taskleiste und im Programmfenster
 
Meinst du statt "verzerrt" vielleicht eher "verpixelt"?
Wenn ja dann habe ich auch dieses Problem. Das Main-Icon ist absichtlich in der Größe 256px x 256px und in der Taskleiste ist es dann verpixelt.
Die Icons anderer Software-Produkte sind wunderbar detailliert und kein bisschen pixelig.

Bernhard Geyer 25. Dez 2016 18:00

AW: Verzerrtes Programm-Icon in der Taskleiste und im Programmfenster
 
Windows hat seit W2k ein Problem mit dem Icon-Cache.
Hat Windows für ein Programm mal ein Icon in den Cache übernommen so wird das auch verwendet wenn man ein anderes (und weiter Auflösungen) bereitstellt.
Erst wenn man den Cache löscht (oder die Anwendung woanders hin kopiert) passt es wieder

Tahtu 25. Dez 2016 18:33

AW: Verzerrtes Programm-Icon in der Taskleiste und im Programmfenster
 
Zitat:

Zitat von a.def (Beitrag 1357186)
Meinst du statt "verzerrt" vielleicht eher "verpixelt"?
Wenn ja dann habe ich auch dieses Problem. Das Main-Icon ist absichtlich in der Größe 256px x 256px und in der Taskleiste ist es dann verpixelt.
Die Icons anderer Software-Produkte sind wunderbar detailliert und kein bisschen pixelig.

Genau das meine ich.

Zitat:

Zitat von Bernhard Geyer (Beitrag 1357187)
Windows hat seit W2k ein Problem mit dem Icon-Cache.
Hat Windows für ein Programm mal ein Icon in den Cache übernommen so wird das auch verwendet wenn man ein anderes (und weiter Auflösungen) bereitstellt.
Erst wenn man den Cache löscht (oder die Anwendung woanders hin kopiert) passt es wieder

Den Icon Cache habe ich gelöscht:
https://www.deskmodder.de/wiki/index...r_l.C3.B6schen

Dann habe ich das Programm in einen neuen Ordner kopiert und gestartet. Das Icon ist immer noch unschön. Ich verwende Windows 7.

In der Detail Ansicht vom Explorer wird das Programm Icon in 16x16 sauber dargestellt.

EWeiss 25. Dez 2016 19:23

AW: Verzerrtes Programm-Icon in der Taskleiste und im Programmfenster
 
Dann fehlt wohl der Alpha Kanal.

gruss

Tahtu 25. Dez 2016 19:41

AW: Verzerrtes Programm-Icon in der Taskleiste und im Programmfenster
 
Zitat:

Zitat von EWeiss (Beitrag 1357194)
Dann fehlt wohl der Alpha Kanal.

... nee... :roll:

a.def 25. Dez 2016 20:05

AW: Verzerrtes Programm-Icon in der Taskleiste und im Programmfenster
 
Wie speicherst du denn deine Icons?
Ich speichere sie in Photoshop mit dem ICO-Plugin im "Standard"-Modus (nicht Vista-Modus).

EWeiss 25. Dez 2016 23:45

AW: Verzerrtes Programm-Icon in der Taskleiste und im Programmfenster
 
Zitat:

Zitat von Tahtu (Beitrag 1357195)
Zitat:

Zitat von EWeiss (Beitrag 1357194)
Dann fehlt wohl der Alpha Kanal.

... nee... :roll:

Nur zur Info.
Ist aber schon ein unterschied ob du (True Color (RGB 32 Bit)) oder (XP - (RGB + Alpha)) verwendest.

Aber gut :)

Tahtu 26. Dez 2016 08:04

AW: Verzerrtes Programm-Icon in der Taskleiste und im Programmfenster
 
Liste der Anhänge anzeigen (Anzahl: 2)
RGB sind 24 bit.
RGB + Alpha sind 32 bit - unterstützt seit Windows XP.

Ich verwende 32 bit. Würde ich den Alpha Channel nicht mitspeichern, dann würde das Icon anders aussehen.


Ich hab mal Screenshots von der Taskzeile und vom Explorer gemacht - beide jeweils zu 100% und zu 400 % (mit Windows Paint vergrößert). Daneben noch die Ansicht innerhalb von Axial IconWorkshop.


Im IconWorkshop ist das 16x16 Icon also sehr scharf, wird in der Taskzeile und im Explorer ebenfalls mit 16x16 Pixeln dargestellt - allerdings nicht so, wie im IconWorkshop angegeben. Ich vermute, dass Windows (7) das Icon in einer höheren Auflösung einliest und dann selbst auf 16x16 Pixel skaliert - und genau dabei die Probleme entstehen.

Würde ich das im IconWorkshop auch tun, sähe das Icon vermutlich ähnlich schlecht aus, wie jetzt in der Taskzeile (und im Explorer), denn die höheren Auflösungen des Icons stellen "MF" schöner dar, als in der Auflösung 16x16.

Tahtu 30. Dez 2016 10:21

AW: Verzerrtes Programm-Icon in der Taskleiste und im Programmfenster
 
Liste der Anhänge anzeigen (Anzahl: 1)
Warum weiß ich nicht, aber im Explorer wird mir das Icon 48x48 skaliert auf 16x16 Pixel gezeigt.

Und in der Taskzeile wird mir das Icon 32x32 skaliert auf 16x16 Pixel angezeigt.

Mit dem ResourceEditor habe ich überprüft, das 16x16 Icon ist als "MAINICON" in der .exe Datei vorhanden.

Hat jemand eine Idee, wo oder wie ich nach einer Lösung suchen könnte? Gibt es evtl. ein englisch sprachiges Forum oder ein Forum für die Windows API?

EWeiss 30. Dez 2016 15:08

AW: Verzerrtes Programm-Icon in der Taskleiste und im Programmfenster
 
Mich würde mal interessieren welches System du verwendest.

Sieht nach XP aus.
Sollte das der Fall sein, denke ich mal das die Formate (größen) im Icon nicht alle Unterstützt werden.

Unterstützte Formate. XP
16x16, 24x24, 32x32 und 48x48

Du verwendest
16x16, 24x24, 32x32, 48x48, 64x64, 128x128, und garantiert 256x256 erst ab Vista

Zitat:

Warum weiß ich nicht, aber im Explorer wird mir das Icon 48x48 skaliert auf 16x16 Pixel gezeigt.
Bei einem nicht unterstützten Format wird dieses ausgelassen und das nächstliegende verwendet.

Hier unter W7 sieht nämlich alles normal aus. (Teste es dort einfach mal selbst.)

Zitat:

oder ein Forum für die Windows API?
Was soll dir das bringen?

gruss

Tahtu 30. Dez 2016 15:17

AW: Verzerrtes Programm-Icon in der Taskleiste und im Programmfenster
 
Zitat:

Zitat von EWeiss (Beitrag 1357568)
Mich würde mal interessieren welches System du verwendest.

Windows 7 mit der klassischen Ansicht.

Nach deiner Frage habe ich mal auf Aero umgeschaltet - dort sieht das Icon im Explorer gut aus - ich habe aber nicht kontrolliert, ob wirklich das 16x16 Icon angezeigt wird, oder nur besser skaliert wird. Kann ich aber noch tun...

In der Taskzeile sieht das Icon immer noch genauso verzerrt aus.

Zitat:

Zitat von EWeiss (Beitrag 1357568)
Bei einem nicht unterstützten Format wird dieses ausgelassen und das nächstliegende verwendet.

Schon klar...

Zitat:

Zitat von EWeiss (Beitrag 1357568)
Hier unter W7 sieht nämlich alles normal aus. (Teste es dort einfach mal selbst.)

Ich arbeite (nur) auf Windows 7.

Zitat:

Zitat von EWeiss (Beitrag 1357568)
Zitat:

oder ein Forum für die Windows API?
Was soll dir das bringen?

Ich vermute ein Problem von Windows - nicht von Delphi, weil der ResouceEditor alle Formate gut anzeigt.

EWeiss 30. Dez 2016 15:23

AW: Verzerrtes Programm-Icon in der Taskleiste und im Programmfenster
 
Ich möchte dir ja gern helfen aber ohne die Anwendung (Sample.exe) sollte das schwierig sein.

Zitat:

Ich vermute ein Problem von Windows - nicht von Delphi, weil der ResouceEditor alle Formate gut anzeigt.
Kannst du aber über die Win32api nicht lösen.

Was andere Foren dir sagen das können wir hier auch ;)

gruss

Tahtu 30. Dez 2016 15:44

AW: Verzerrtes Programm-Icon in der Taskleiste und im Programmfenster
 
Zitat:

Zitat von EWeiss (Beitrag 1357572)
Ich möchte dir ja gern helfen aber ohne die Anwendung (Sample.exe) sollte das schwierig sein.

Ich habe gerade mal in der IDE ein neues Programm erstellt und das Icon mit Projects -> Options -> Application -> Icon von meinem eigentlichen Programm imporiert. Damit läuft alles gut.

(Schon das zweite Mal heute, dass ich erwischt werde, dass ich gefragt habe ohne zuvor ein kleinen Sampler zu schreiben. :oops: Ich muss mich bessern...)

Bei meinem eigentlichen Programm generiere ich mit BRCC32.exe aus einer .rc Datei eine .res Datei und binde dabei die .ico Datei ein.

Die .res Datei nutze ich dann sowohl in der IDE, als auch als Grundlange für die Compilierung mit DCC32.exe zum Veröffentlichen. In beiden Fällen tritt das Problem auf.

Hm, wie gehe ich weiter vor? Am besten suche ich mir mal ein anderes Programm um die .res Datei zu untersuchen und mit dem kleinen Sampler zu vergleichen...

Zitat:

Was andere Foren dir sagen das können wir hier auch ;)
Scheint so, als hättest du Recht!

EWeiss 30. Dez 2016 15:49

AW: Verzerrtes Programm-Icon in der Taskleiste und im Programmfenster
 
Zitat:

Ich habe gerade mal in der IDE ein neues Programm erstellt und das Icon mit Projects -> Options -> Application -> Icon von meinem eigentlichen Programm imporiert. Damit läuft alles gut.
Hört sich schon mal nicht schlecht an ;)

Ich kompiliere meine Icons auf diese weise ein.

Delphi-Quellcode:
unit uMainApp;
{$R '_resources\SoundMachine.res' '_resources\SoundMachine.rc'}
Alles scharf damit.


gruss

Tahtu 30. Dez 2016 16:22

AW: Verzerrtes Programm-Icon in der Taskleiste und im Programmfenster
 
Ich hab gerade mal den "Resource Hacker" geladen. Als Unterschied konnte ich nur die Language ID feststellen. In meinem Projekt ist das 0 - bei dem neuen Sampler 1033.

Dann habe ich mit dem Resource Hacker die Language ID des Icons auf 1033 verändert - keine Besserung.

Zitat:

Zitat von EWeiss (Beitrag 1357577)
Ich kompiliere meine Icons auf diese weise ein.

Delphi-Quellcode:
unit uMainApp;
{$R '_resources\SoundMachine.res' '_resources\SoundMachine.rc'}

Ich nutze nur:
{$R *.res}

Aber ich nutze auch etliche Toolboxen, die ebenfalls eine .res Datei mit bringen.

Dann habe ich die jeweiligen .res Dateien aus den Toolboxen durch eine leere .res Datei ersetzt. (Eine Toolbox mochte das nicht - daher habe ich deren .res Datei belassen.)

In meiner .rc Datei habe ich alles bis auf eine Zeile gelöscht:
MAINICON ICON "MAINICON.ico"

Immer noch ein verzerrtes Icon in der Taskzeile.

Um die verbliebene Toolbox zu entfernen, muss ich aber einen größeren Aufwand treiben.


Leider kenne ich ein Programm, das mir mal eben alle Resourcen aus einer .exe Datei entfernt. Mit "ResourceEditor" und "Resource Hacker" muss ich jede einzelne Resource nacheinander entfernen. Und in der verbliebenen Toolbox sind noch eine Menge Resourcen.

Hast du noch eine Idee, was ich sonst machen könnte?

Würde es dir helfen, mein fertiges Programm zu downloaden? Ich will niemand dazu animieren...

EWeiss 30. Dez 2016 16:31

AW: Verzerrtes Programm-Icon in der Taskleiste und im Programmfenster
 
erstelle ein leeres projekt mit deiner Resource.

So das ich beim start das Icon im Explorer als auch im Taskmanager sehen kann.
Dann werde ich es bei mir mal testen.

Auf diesen weg.
Delphi-Quellcode:
{$R '_resources\SoundMachine.res' '_resources\SoundMachine.rc'}


Natürlich mit deiner res/ rc Datei ersetzen.

gruss

Tahtu 30. Dez 2016 16:58

AW: Verzerrtes Programm-Icon in der Taskleiste und im Programmfenster
 
Zitat:

Zitat von EWeiss (Beitrag 1357581)
erstelle ein leeres projekt mit deiner Resource.

Der Tipp war ein Volltreffer! :thumb:

Ich hab in meiner .dpr folgende Zeile gefunden (hab ich wohl vor mehr als 10 Jahren mal eingebaut - keine Ahnung, warum. Damals noch unter Delphi 7):
Code:
    Application.Icon.Handle := LoadImage(hInstance, 'MAINICON', IMAGE_ICON, Application.Icon.Height, Application.Icon.Height, LR_DEFAULTCOLOR);
Die Zeile raus - und alles ist gut!

Auf meinem System hat Application.Icon.Height den Wert 35 (bei DPI = 100 %).

VIELEN DANK!!!

Zitat:

Zitat von EWeiss (Beitrag 1357581)
Was andere Foren dir sagen das können wir hier auch

Recht, du hast...

EWeiss 30. Dez 2016 17:03

AW: Verzerrtes Programm-Icon in der Taskleiste und im Programmfenster
 
Zitat:

Der Tipp war ein Volltreffer!
Freut mich das es jetzt läuft..
Frohes neues Jahr. ;)

gruss

Tahtu 30. Dez 2016 17:39

AW: Verzerrtes Programm-Icon in der Taskleiste und im Programmfenster
 
Im Explorer wird mir immernoch das 48x48 Icon angezeigt. Ich nutze Windows mit 110 % DPI und habe die verwendeten Pixel im Explorer nochmal nachgezählt - es sind 18x18, nicht wie von mir zuvor behauptet 16x16.

Und wenn der Explorer 18x18 Pixel anzeigt, dann muss er ja skalieren. Vermutlich sieht das Icon besser aus, wenn er das 48x48 Icon skaliert, als wenn er das 16x16 Icon nutzt. Aber es wundert mich, warum Windows das 48x48 zum Skalieren verwendet - und nicht das mit der höchsten Auflösung (bei mir 256x256). Das würde besser aussehen - wäre aber mehr Rechenaufwand. Ob der Rechenaufwand wohl der Grund ist?


Übrigens habe ich mein Icon erst vor wenigen Wochen verändert - in den 10 Jahren zuvor hatte ich ein sehr unscharfes Icon, bei dem es einfach nicht aufgefallen ist, dass es unscharf skaliert wurde.

EWeiss 30. Dez 2016 17:51

AW: Verzerrtes Programm-Icon in der Taskleiste und im Programmfenster
 
Wie sieht es denn aus wenn du das 16x16 einfach mal aus der Ressource entfernst?
Mit der Änderung der DPI hab ich noch nicht gearbeitet.. sorry
Habe immer 100%

gruss

Tahtu 30. Dez 2016 18:32

AW: Verzerrtes Programm-Icon in der Taskleiste und im Programmfenster
 
Zitat:

Zitat von EWeiss (Beitrag 1357592)
Wie sieht es denn aus wenn du das 16x16 einfach mal aus der Ressource entfernst?

Äh... was sollte dabei rauskommen?

Der Explorer wird immernoch ein Icon skalieren - und vermutlich immer noch das 48x48 Icon.

Zitat:

Zitat von EWeiss (Beitrag 1357592)
Mit der Änderung der DPI hab ich noch nicht gearbeitet..

Neulich hatte ich einen Anwender, der mit 250 % DPI arbeitet, weil sein Monitor so hochauflösend ist. Ohne etwas in meinem Programm zu machen, bekommt er eine unscharfe Anzeige. Also habe ich in meinem Programm die "DPI aware" Richtlinien von MS umgesetzt. Dazu gehört, dass ich alle Grafiken selbst bei der Anzeige skalieren muss.

Um das zu machen speichere ich die Grafiken in einer höheren Auflösung und skaliere diese beim Programmstart / bei der Anzeige entsprechend den DPI Einstellungen des Benutzers.

Die selbstgezeichneten Grafiken (ein Diagramm) habe ich entsprechend umgeschrieben.

Ich glaube, dass es immer mehr Monitore geben wird, die deutlich mehr als 96 DPI haben - und entsprechend der Benutzer mehr als 100% DPI in Windows einstellt. Daher sollte aus meiner Sicht jedes Programm die Grafiken entsprechend skalieren.

EWeiss 30. Dez 2016 18:44

AW: Verzerrtes Programm-Icon in der Taskleiste und im Programmfenster
 
Zitat:

Dazu gehört, dass ich alle Grafiken selbst bei der Anzeige skalieren muss.
Du hast aber schon das dazugehörige Manifest ins Projekt kompiliert. Oder?

Zitat:

Äh... was sollte dabei rauskommen?
Es wird dann ein anderes Format kompiliert.
Bei mir sieht es zumindest nicht schlecht aus.

Siehe Anhang..
DPI 110%, Klassik Ansicht

TaskLeiste und Explorer..

gruss

Tahtu 30. Dez 2016 18:53

AW: Verzerrtes Programm-Icon in der Taskleiste und im Programmfenster
 
Zitat:

Zitat von EWeiss (Beitrag 1357597)
Du hast aber schon das dazugehörige Manifest ins Projekt kompiliert. Oder?

Ja, in der .rc Datei.

Zitat:

Zitat von EWeiss (Beitrag 1357597)
Bei mir sieht es zumindest nicht schlecht aus.

Bei mir sieht es (jetzt) genauso aus, soweit ich das erkenne: In der Taskzeile komplett scharf, im Explorer recht gut.

EWeiss 30. Dez 2016 18:56

AW: Verzerrtes Programm-Icon in der Taskleiste und im Programmfenster
 
Zitat:

Bei mir sieht es (jetzt) genauso aus, soweit ich das erkenne.
Dann sollte es eigentlich in Ordnung sein.

Zitat:

Ja, in der .rc Datei.
Nicht das wir uns falsch verstehen.
Ich meine nicht die Icons sondern den DPI Kram.

Merke die DPI wird nicht Automatisch skaliert bei normalen Anwendungen das musst du explicit angeben.
Ausgenommen davon ist WPF!

Hier mein Test Example mit Source.. D2010.

gruss

Luckie 30. Dez 2016 18:58

AW: Verzerrtes Programm-Icon in der Taskleiste und im Programmfenster
 
Welcher Tipp war es denn jetzt genau?

Tahtu 30. Dez 2016 19:10

AW: Verzerrtes Programm-Icon in der Taskleiste und im Programmfenster
 
Zitat:

Zitat von EWeiss (Beitrag 1357600)
Dann sollte es eigentlich in Ordnung sein.

Danke, JA!

Zitat:

Zitat von EWeiss (Beitrag 1357600)
Ich meine nicht die Icons sondern den DPI Kram.

Ich glaube, das ist dieser Teil der .manifest Datei:
Code:
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" >
 ...
  <asmv3:application>
    <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2011/WindowsSettings">
      <dpiAware>true</dpiAware>
    </asmv3:windowsSettings>
  </asmv3:application>
 ...
</assembly>
Zitat:

Zitat von EWeiss (Beitrag 1357600)
Merke die DPI wird nicht Automatisch skaliert bei normalen Anwendungen

Ohne ein Hinweis in der .manifest Datei geht Windows davon aus, dass das Programm nicht skaliert - und übernimmt die Skalierung für das Programm.

Das Programm selbst generiert dabei 96 (100%) DPI - sowohl für Grafiken, als auch für Schrift. Windows skaliert das dann auf die DPI Einstellungen von Windows. Dabei werden Schrift und Grafik also hochgerechnet - aber durch die höhere Auflösung bleibt es bei der selben Größe auf dem Bildschirm (gemessen in cm). Aber natürlich unscharf.

Mit dem Eintrag in der .manifest Datei muss das Programm die Ausgabe entsprechend der Windows DPI Einstellung bereitstellen, die dann direkt auf dem Bildschirm angezeigt wird.

Hier erfolgt die Skalierung also im Programm. Z. B. verwende ich in meinem Diagrammen immer ein feste Anzahl von Pixel pro Linie. Oft 1, teilweise 2 und selten 3 Pixel - je nach Windows DPI Einstellung (Screen.PixelsPerInch).

Dadurch sehen auch (alte) Programme ohne entsprechenden .manifest Eintrag immer noch ähnlich aus, aber halt unscharf.

Falls dich das nächer interessiert bei Microsoft unter "DPIaware" googlen. Bei www.helpandmanual.com gibts gute PDFs zu dem Thema. Falls du möchtest, such ich dir die Infos...

Zitat:

Zitat von Luckie (Beitrag 1357601)
Welcher Tipp war es denn jetzt genau?

Ich hatte folgende Zeile in meinem .dpr (noch von vor ca. 10 Jahren, damals unter Delphi 7):
Code:
Application.Icon.Handle := LoadImage(hInstance, 'MAINICON', IMAGE_ICON, Application.Icon.Height, Application.Icon.Height, LR_DEFAULTCOLOR);
Daher wurde das 32x32 Icon verwendet. Mein Fehler... :oops:

EWeiss 30. Dez 2016 19:17

AW: Verzerrtes Programm-Icon in der Taskleiste und im Programmfenster
 
habe dir mal mein Sample hochgeladen..

Zitat:

Ich glaube, das ist dieser Teil der .manifest Datei:
yep. ;)

Delphi-Quellcode:
  <!-- Indicates that the application is DPI-aware and will not be automatically scaled by Windows at higher
       DPIs. Windows Presentation Foundation (WPF) applications are automatically DPI-aware and do not need
       to opt in. Windows Forms applications targeting .NET Framework 4.6 that opt into this setting, should
       also set the 'EnableWindowsFormsHighDpiAutoResizing' setting to 'true' in their app.config. -->

  <application xmlns="urn:schemas-microsoft-com:asm.v3">
    <windowsSettings>
      <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
    </windowsSettings>
  </application>
gruss


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