![]() |
HICON: Vom Handle zum Struct und umgekehrt
Hey,
ich habe mir eine kleine Unit geschrieben, welche Icons aus einer EXE extrahieren und als Icon speichern kann. Ebenso kann ich eine Icon Resource anhand einer Icon Datei einer EXE hinzufügen. Intern verwende ich folgende Strukturen:
Delphi-Quellcode:
Ich zeige die extrahierten Icons in einem ListView an. Nun möchte ich allerdings gerne den Weg über die Festplatte und LoadImage() vermeiden. Weiß also jemand, wie ich meine Structs nun zu einem HICON konvertieren könnte und umgekehrt?
// RESOURCE ICON HEADER
type PResIconEntry = ^TResIconEntry; TResIconEntry = packed record bWidth: Byte; bHeight: Byte; bColorCount: Byte; bReserved: Byte; wPlanes: Word; wBitCount: Word; dwBytesInRes: DWord; nID: Word; end; PGroupIconHeader = ^TGroupIconHeader; TGroupIconHeader = packed record idReserved: Word; idType: Word; idCount: Word; idEntries: Array[0..31] of TResIconEntry; end; // FILE ICON HEADER type PIconEntry = ^TIconEntry; TIconEntry = packed record bWidth: Byte; bHeight: Byte; bColorCount: Byte; bReserved: Byte; wPlanes: Word; wBitCount: Word; dwBytesInRes: DWord; dwImageOffset: DWord; end; TPageInfo = packed record Width: Byte; Height: Byte; ColorQuantity: Integer; Reserved: DWord; PageSize: DWord; PageOffSet: DWord; end; TIcoFileHeader = packed record FileFlag: Array[0..3] of Byte; PageQuartity: Integer; PageInfo: TPageInfo; end; PIconHeader = ^TIconHeader; TIconHeader = packed record idReserved: Word; idType: Word; idCount: Word; idEntries: Array[0..0] of TIconEntry; end; Viele Grüße Zacherl |
AW: HICON: Vom Handle zum Struct und umgekehrt
Wo sind denn die eigentlichen Bilddaten in deinen Strukturen? Ich finde sie nicht.
Wenn die nicht da sind, wird schwierig. ;) Wenn doch, dann gibts bestimmt einen Weg. |
AW: HICON: Vom Handle zum Struct und umgekehrt
An die Bilddaten kann ich rankommen. Die Structs führen mich da über ImageOffset etc. zu den eigentlichen Bilddaten.
|
AW: HICON: Vom Handle zum Struct und umgekehrt
Und in welchem Format kannst du die Daten liefern?
Ich stell so viele Fragen, weil ich mal was ähnliches gemacht habe ... ein PNG in ein Icon gewandelt via ![]() Da gibt man eine Icon-Struktur an und bekommt ein HICON hinten raus. In der Icon-Struktur steckt ein Bitmap und ein paar andere Infos. Das Bitmap müsste man mit den Bilddaten von dir füttern. |
AW: HICON: Vom Handle zum Struct und umgekehrt
Die Funktion sieht auf jeden Fall mal vielversprechend aus. Die einzelnen Icons (Icongrößen) sind soweit ich weiß Bitmaps mit Alpha Channel. Von denen komme ich auf jeden Fall an die RAW Daten aus einem Buffer.
Dann lautet die nächste Frage nun, wie ich das ByteArray vom Bitmap in ein HBITMAP umwandeln kann :D Ich habe grade noch die ![]() Ich probiere mal aus, ob ich im Laufe des Tages da was Ordentliches gebastelt bekomme und gebe dann Rückmeldung. Noch eine Verständnisfrage: Besitzt ein HICON jeweils nur ein Bild? In einer Icon Datei sind ja mehrere Bilder in verschiedenen Farbtiefen und Auflösungen gespeichert. |
AW: HICON: Vom Handle zum Struct und umgekehrt
Wenn du willst, kannst du dir auch die PNGtoIcon aus
![]() |
AW: HICON: Vom Handle zum Struct und umgekehrt
|
AW: HICON: Vom Handle zum Struct und umgekehrt
Ich habs jetzt ganz einfach gelöst. Mein Ziel war es lediglich Icons aus einer DLL in einem ListView anzuzeigen.
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz