Einzelnen Beitrag anzeigen

SMO

Registriert seit: 20. Jul 2005
178 Beiträge
 
Delphi XE6 Professional
 
#6

AW: Icon anderer EXE Datei ändern

  Alt 14. Dez 2015, 20:30
Naja für den Anwendungsfall weiß ich schon vorher das es keine DLL Dateien sein werden.
Aber wenn alles funktioniert ändere ich den Code ab, wie Du vorgeschlagen hast. Schon damit er sauberer ist.
Gut. Sicher ist sicher. Irgendwann mal möchtest du vielleicht eine DLL benutzen, dann kannst du den Code auch wiederverwenden.

Ich habe noch mal kurz recherchiert und es wundert mich nicht, dass dein Code nicht funktioniert. Er zeugt davon, dass dir der Unterschied zwischen RT_ICON und RT_GROUP_ICON nicht klar ist.

Unter RT_ICON werden die Rohdaten der Symbole abgespeichert, d.h. die Bitmaps (auch PNGs sind erlaubt seit Vista). Jedes Symbol erhält dabei eine numerische ID (ein 16-Bit-Word).
Unter RT_GROUP_ICON werden dann ein oder mehrere dieser Symbole zu einer Gesamtheit gruppiert (z.B. um dieselbe Grafik in verschiedenen Auflösungen parat zu haben).

'MAINICON' ist dabei die String-ID des Hauptsymbols wie es vom Explorer angezeigt wird. In deinem Code wendest du aber 'MAINICON' auf RT_ICON an, das ist falsch.

Also, RT_ICON = Bitmap / PNG, RT_GROUP_ICON = eine Datenstruktur des Typs "TGroupIconRsrcHeader", gefolgt von einem array of TGroupIconRsrcEntry:

Delphi-Quellcode:
type
  TGroupIconRsrcHeader = packed record
    wReserved: Word; // 0
    wType: Word; // 1 for icons
    wCount: Word; // number of icons in this group, each has a following TGroupIconRsrcEntry
    // Entries: array [0..idType - 1] of TGroupIconRsrcEntry;
  end;

  TGroupIconRsrcEntry = packed record
    bWidth, bHeight: Byte; // 0 means 256, which is the maximum
    bColorCount: Byte; // number of colors in image (0 if wBitCount > 8)
    bReserved: Byte; // 0
    wPlanes: Word; // 1
    wBitCount: Word; // number of bits per pixel
    dwSize: DWORD; // size of the icon data, in bytes
    wID: Word; // resource ID of the icon (for RT_ICON entry)
  end;
Das ganze ist nicht so einfach, wie du es dir vorstellst.
  Mit Zitat antworten Zitat