![]() |
Laden und Speichern von Icons (Icon Parser, für Icon Dateien oder Resourcen)
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo zusammen,
die hier vorgestellte Unit beinhaltet eine Klasse zum Laden und Speichern von Icons. Die Icons können sowohl aus einer Icon Datei, als auch aus einer Resource (beliebige PE Datei) geladen werden. Die Klasse stellt dann sämtliche Einzelbilder des geladenen Icons in einer Liste zur Verfügung. Bei Bedarf können auch die entsprechenden GDI Handles zum Zeichnen des Icons (per DrawIcon) erstellt werden (CreateIconHandles auf true setzen). Das Hinzufügen, Entfernen oder Bearbeiten von Bildern wird nicht unterstüzt. Allerdings kann die Klasse beispielsweise dazu verwendet werden, um einer beliebigen PE Datei ein Icon hinzuzufügen, oder das bestehende Icon zu ersetzen. Viele Grüße Zacherl |
AW: Laden und Speichern von Icons (Icon Parser, für Icon Dateien oder Resourcen)
Hi Zacherl, das funktioniert schön:
Delphi-Quellcode:
wie soll das mit den PE - Dateien gehen,oder verstehe ich etwas anderes als Du darunter?
procedure TForm3.Button1Click(Sender: TObject);
var ir:TdxIconResource; ic:TIcon; i:Integer; begin ic := TIcon.Create; ir:=TdxIconResource.Create; ir.CreateIconHandles := true; ir.LoadFromFile('C:\Icons\IconCollection\ix_ap_all\ico-files\add.ico'); Caption := IntToStr(ir.ImageCount); For i := 0 to ir.ImageCount - 1 do begin memo1.Lines.Add(Format('H: %d W:%d NB:%d HD:',[ir.Images[i].Width,ir.Images[i].Height,ir.Images[i].Numbytes,ir.Images[i].Handle])) ; ic.Handle := ir.Images[i].Handle; canvas.Draw(i*50,i*20,ic); end; ic.Free; ir.Free; end; |
AW: Laden und Speichern von Icons (Icon Parser, für Icon Dateien oder Resourcen)
Hallo Bummi,
analog zum Laden aus einer Icon Datei, kannst du folgendes machen, um z.b. das Icon deiner eigenen EXE zu laden:
Delphi-Quellcode:
Wenn du Icons aus externen PE Dateien extrahieren willst, kannst du wie folgt vorgehen:
ir.LoadFromResource(hInstance, 'MAINICON');
Delphi-Quellcode:
Beim Speichern eines Icons in eine PE Datei funktioniert es etwas anders. Dort muss zum einen der Icon Header als RT_GROUPICON Resource angelegt werden und die Einzelbilder dann jeweils als eigene RT_ICON Resource. Deshalb übernimmt die SaveToResource() Funktion in diesem Falle den Dateinamen der Zieldatei als Parameter.
var
hModule: THandle; begin hModule := LoadLibraryEx('ExterneExeDatei.exe', 0, LOAD_LIBRARY_AS_DATAFILE); if (hModule <> 0) and (hModule <> INVALID_HANDLE_VALUE) then try ir.LoadResource(hModule, 'ICONRESOURCENAME'); finally FreeLibrary(hModule); end; end;
Delphi-Quellcode:
Wenn deine Zieldatei mehrere Icons besitzt könnte meine Methode allerdings teilweise die Einzelbilder überschreiben. Dafür habe ich bisher noch keinen Check eingebaut :)
ir.SaveToResource('ExterneExeDatei.exe', 'ICONRESOURCENAME');
|
AW: Laden und Speichern von Icons (Icon Parser, für Icon Dateien oder Resourcen)
Liste der Anhänge anzeigen (Anzahl: 2)
Da ich keine Möglichkeit fand unbenannte Icongroups zu laden habe ich den Code etwas erweitert. Ich habe die geänderte Datei als dxIconUtils_modi.pas beigelegt, da ich nicht sicher bin ob die Änderungen so wie sie vorgenommen wurden für Dich akzeptabel sind.
EDIT: Rückgebaut siehe Folgepost |
AW: Laden und Speichern von Icons (Icon Parser, für Icon Dateien oder Resourcen)
Hallo Bummi,
die Funktion zum Enumerieren der Resourcen passt sehr gut dazu :) Für Erweiterungen der Unit, bzw. allgemein meiner Codes bin ich immer offen und dankbar. Danke auch für deine Demo Anwendung! Um eine unbenannte bzw. ID Resource zu laden, wäre alternativ auch folgende Lösung mit meiner originalen LoadFromResource Funktion möglich gewesen:
Delphi-Quellcode:
Wobei 12345 hier für die ID der IconGroup Resource steht. Die Windows APIs zum Laden von Resourcen erwarten einen PChar Parameter und erkennen automatisch, ob man hier wirlich einen Namen oder nur eine ID übergeben hat. Aus diesem Grund habe ich den ResourceName Parameter der LoadFromResource Funktion ebenfalls als PChar deklariert und nicht, wie man es vermutlich normalerweise machen würde, als String :)
ir.LoadFromResource('PEDatei.exe', PChar(12345));
|
AW: Laden und Speichern von Icons (Icon Parser, für Icon Dateien oder Resourcen)
Danke ... ich bau das zurück, was ein didn't know :oops:
|
AW: Laden und Speichern von Icons (Icon Parser, für Icon Dateien oder Resourcen)
Warum die Mühe? Dafür gibts doch IconTools von Jan Peter Stotz :)
|
AW: Laden und Speichern von Icons (Icon Parser, für Icon Dateien oder Resourcen)
Zitat:
|
AW: Laden und Speichern von Icons (Icon Parser, für Icon Dateien oder Resourcen)
Ja das stimmt, 1:0 für dich :)
|
AW: Laden und Speichern von Icons (Icon Parser, für Icon Dateien oder Resourcen)
Hatte ganz vergessen die SaveToResource Funktion komplett zu implementieren :-D Leider gibt es momentan ab und zu noch Probleme ein Icon hinzuzufügen, wenn die EXE vorher kein Icon besessen hat. Fals jemand einen Tipp für mich hat, bitte hier posten:
![]() :arrow: SaveToResource Funktion vervollständigt Das Speichern funktioniert nun in den meisten Fällen. Achtung: Hat die neue Icon Resource mehr Einzelbilder, als die ersetzte Resource, können eventuell weitere Einzelbilder überschrieben werden.:arrow: FindIconImageIndex hinzugefügt FindIconImageIndex sucht anhand der übergebenen Maßen (und optional Farbtiefe) den Index des passendsten Einzelbildes heraus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:16 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 by Thomas Breitkreuz