So, ich habe jetzt noch einige Tests durchgeführt, und folgendes herausgefunden:
Zitat von
OregonGhost:
Wenn ich das richtig interpretiere, lädt LoadIcon das Icon, das der Bildschirmauflösung entspricht, wenn möglich - also das 256-Farb-Icon. Hast du mal geguckt, was das Ding macht, wenn du die Systemfarben auf 16 setzt? [...]
Jedenfalls, da steht nichts davon, dass es sich an deine Einstellungen hält, nur, dass es das für die Anzeige günstigste Icon lädt
Das stimmt tatsächlich
- wenn ich die Farbtiefe auf 256 Farben reduziere, erscheint auf einmal mein 16-Farb-Icon!
Dies mal etwas weiter gedacht:
- Welche Icon-Größe lädt denn Loadimage überhaupt?
- Liefert LoadImage bei einer Bildschirmauflösung von 1024 x 768 x 16bit vielleicht immer ein 32 x 32 x 8bit Icon?
- Und was passiert, wenn in der Icon-Datei nur ein 16x16 Icon enthalten ist -> wird dieses dann entsprechend hochskaliert?
Wie kann ich denn die Antworten auf diese Fragen herausfinden? Wisst ihr vielleicht eine Quelle, wo man sowas nachlesen könnte (der
MSDN-Artikel ist ja mehr als dürfig...)? Oder kennt ihr eine Möglichkeit, das zu testen?
---------------------------------------
Und nochwas:
Auf
http://www.hhhh.org/cloister/csharp/icons/ habe ich gelesen, dass Windows für die Tray-Icons doch tatsächlich das 32x32 Icon nehmen und entsprechend auf 16x16 herunterskalieren soll.
Dafür spricht die Tatsache, dass das im Tray angezeigte Icon nicht wirklich mit dem 16x16 Icon übereinstimmt. Also scheint wirklich eine Hoch- und wieder Herunterskalierung zu erfolgen...
Die Frage ist aber jetzt: Passiert die Hochskalierung schon in LoadIcon (s.o.), so dass Windows also gar nichts anderes übrig bleibt, als das Icon wieder herunterzuskalieren, oder macht das tatsächlich Windows alleine (denn dann wäre es ja günstiger, ihm gleich ein 32x32 Icon vorzusetzen)?
Und noch eine Frage: Gibt es denn überhaupt eine Möglichkeit, beim Laden eines Icons festzulegen, welches "Unter-Icon" genommen werden soll, und welche Auflösung und Farbtiefe das zurückgelieferte Icon haben soll?
Bitte helft mir, sonst werde ich noch irgendwann an diesem ganzen Icon-Mist verzweifeln...
-----------------------------------------
Edit: Habe es mit folgendem Code testen können:
Image1.Picture.Icon.Handle := LoadIcon(hInstance, MakeIntResource(100));
Ergebnis: LoadIcon skaliert tatsächlich auf 32 x 32 x 8bit hoch, wenn nur ein 16 x 16 x 4bit Icon in der Datei enthalten ist.
Also bleibt die Frage: Wie bekomme ich überhaupt ein
Handle auf ein 16x16 Icon?