AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Code-Bibliothek Neuen Beitrag zur Code-Library hinzufügen Delphi Laden und Speichern von Icons (Icon Parser, für Icon Dateien oder Resourcen)
Thema durchsuchen
Ansicht
Themen-Optionen

Laden und Speichern von Icons (Icon Parser, für Icon Dateien oder Resourcen)

Ein Thema von Zacherl · begonnen am 28. Sep 2012 · letzter Beitrag vom 22. Nov 2016
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

Laden und Speichern von Icons (Icon Parser, für Icon Dateien oder Resourcen)

  Alt 28. Sep 2012, 13:19
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
Angehängte Dateien
Dateityp: pas dxIconUtils.pas (17,2 KB, 93x aufgerufen)
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)

Geändert von Zacherl ( 5. Okt 2012 um 02:43 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: Laden und Speichern von Icons (Icon Parser, für Icon Dateien oder Resourcen)

  Alt 28. Sep 2012, 14:06
Hi Zacherl, das funktioniert schön:
Delphi-Quellcode:
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;
wie soll das mit den PE - Dateien gehen,oder verstehe ich etwas anderes als Du darunter?
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

AW: Laden und Speichern von Icons (Icon Parser, für Icon Dateien oder Resourcen)

  Alt 28. Sep 2012, 15:26
Hallo Bummi,

analog zum Laden aus einer Icon Datei, kannst du folgendes machen, um z.b. das Icon deiner eigenen EXE zu laden:
ir.LoadFromResource(hInstance, 'MAINICON'); Wenn du Icons aus externen PE Dateien extrahieren willst, kannst du wie folgt vorgehen:
Delphi-Quellcode:
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;
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.

ir.SaveToResource('ExterneExeDatei.exe', 'ICONRESOURCENAME'); Wenn deine Zieldatei mehrere Icons besitzt könnte meine Methode allerdings teilweise die Einzelbilder überschreiben. Dafür habe ich bisher noch keinen Check eingebaut
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#4

AW: Laden und Speichern von Icons (Icon Parser, für Icon Dateien oder Resourcen)

  Alt 28. Sep 2012, 18:42
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
Miniaturansicht angehängter Grafiken
icores.png  
Angehängte Dateien
Dateityp: zip IconGroup_Res.zip (18,1 KB, 48x aufgerufen)
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)

Geändert von Bummi (28. Sep 2012 um 19:48 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#5

AW: Laden und Speichern von Icons (Icon Parser, für Icon Dateien oder Resourcen)

  Alt 28. Sep 2012, 19:40
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:
ir.LoadFromResource('PEDatei.exe', PChar(12345)); 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
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#6

AW: Laden und Speichern von Icons (Icon Parser, für Icon Dateien oder Resourcen)

  Alt 28. Sep 2012, 19:43
Danke ... ich bau das zurück, was ein didn't know
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von MuTzE.Y85
MuTzE.Y85

Registriert seit: 11. Apr 2006
152 Beiträge
 
#7

AW: Laden und Speichern von Icons (Icon Parser, für Icon Dateien oder Resourcen)

  Alt 29. Sep 2012, 15:10
Warum die Mühe? Dafür gibts doch IconTools von Jan Peter Stotz
LAN-PC: C2Q Q9550 @ 4004 MHz @ 1.232 V @ Mugen 2 | DFI LANParty JR P45-T2RS | G.Skill 4GB DDR2-1000 CL5 | ZOTAC GTX 280 @ GTX 285 @ 1.06 V | WD Caviar Blue 320GB / WD Caviar Black 640GB | BeQuiet DPP P7 450W | Antec Mini P180
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#8

AW: Laden und Speichern von Icons (Icon Parser, für Icon Dateien oder Resourcen)

  Alt 29. Sep 2012, 16:50
Warum die Mühe? Dafür gibts doch IconTools von Jan Peter Stotz
Diese Library war mir nicht bekannt. Habe sie mir mal kurz angeschaut und leider auch keine Funktion zum Speichern des Icons zurück in eine Resource gefunden. Für nonVCL Programme ist die Lib zudem auch nicht geeignet. Und mal ganz ehrlich: Irgendwas selbst zu programmieren macht um einiges mehr Spaß, als einfach nur eine fertige Komponente zu verwenden
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von MuTzE.Y85
MuTzE.Y85

Registriert seit: 11. Apr 2006
152 Beiträge
 
#9

AW: Laden und Speichern von Icons (Icon Parser, für Icon Dateien oder Resourcen)

  Alt 1. Okt 2012, 02:17
Ja das stimmt, 1:0 für dich
LAN-PC: C2Q Q9550 @ 4004 MHz @ 1.232 V @ Mugen 2 | DFI LANParty JR P45-T2RS | G.Skill 4GB DDR2-1000 CL5 | ZOTAC GTX 280 @ GTX 285 @ 1.06 V | WD Caviar Blue 320GB / WD Caviar Black 640GB | BeQuiet DPP P7 450W | Antec Mini P180
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#10

AW: Laden und Speichern von Icons (Icon Parser, für Icon Dateien oder Resourcen)

  Alt 5. Okt 2012, 02:48
Hatte ganz vergessen die SaveToResource Funktion komplett zu implementieren 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:
http://www.delphipraxis.net/170834-h...festlegen.html

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.
FindIconImageIndex hinzugefügt
FindIconImageIndex sucht anhand der übergebenen Maßen (und optional Farbtiefe) den Index des passendsten Einzelbildes heraus
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)

Geändert von Zacherl ( 5. Okt 2012 um 03:00 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz