Thema: Delphi Icons aus Shell32.dll

Einzelnen Beitrag anzeigen

Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#8
  Alt 13. Jul 2002, 12:49
Moin Tpercon,

würde ich mal von ausgehen.
Was eventuell möglich wäre (ich kenne jetzt die Einstellmöglichkeiten von XP noch nicht):
Da es unter XP ja auch noch weitere Grössen für die Icons gibt, könnte es sein, dass man sich jeweils die Anzahl der Icons der verschiedenen Grössen "merken" muss, und das gewünschte Icon hat dann den entprechenen Offset. Soll heissen:

Es gibt vor den 16x16 Icons keine weiteren: Hier sollte die Nummer sich nicht ändern.
Bei den 32x32 Icons wäre es dann: Anzahl 16x16 Icons plus der gewünschten Nummer.

Beispiel:
Unter W2K SP 1 gibt es 108 Small Icons (16x16, Nummer 0 - 107).
Das Laufwerksicon ist das 9. Icon und hat somit die Nummer 8.
Soll das entsprechende Large Icon angesprochen werden, muss die Anzahl der Small Icons dazugezählt werden, also 108 + 8 = 116.

Mit dieser Methode spielt es dann wohl auch keine Rolle, ob sich die Anzahl der Icons vergrössert, denn dass es ein bestimmtes Icon nur in einer Grösse gibt erscheint mir für die Shell32 äusserst unwahrscheinlich.

Wie's jetzt unter XP aussieht kann ich leider nicht genau sagen, aber da die Funktion ExtractIconEx nur zwei Tabellen kennt, vermute ich mal, dass hier der Unterschied nur in der Grösse von Small und Large besteht, dass also, nur als Beispiel, 32x32 als Small und 64x64 als Large angesehen werden. Das wäre dann durch GetSystemMetrics zu ermitteln, dürfte sich aber auf die Nummerierung nicht auswirken.
Da es auch in den Headern keine Konstanten zu geben scheint, die weitere Icongrössen zulassen (so nach dem Motto Extra Large oder ähnlich) reichen die zwei Tabellen die ExtractIconEx zur Verfügung stellt dann auch. Nur wie gross nun Small bzw. Large ist hängt von den Systemeinstellungen ab.
Du wirst Dich also wohl darauf verlassen können, dass Icon #8 immer das kleine Laufwerksicon ist, aber dieses muss nicht zwingend 16x16 gross sein.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat