![]() |
Icons von Datei auslesen
Hi,
wie kann ich ein ProgrammIcon aus einer Exe-Datei auslesen, und dieses anschließend in meinem Programm anzeigen lassen ? Wenn ein Programm mehrere Icons hat, möchte ich für jedes Icon ein neues Image-Objekt in meinem Fenster erstellen. Geht das überhaupt und wie kann ich das machen ? devnull |
Re: Icons von Datei auslesen
Das Standardicon kannst du mit
![]() Für mehrere Icons wirst du die Resourcen selbst extrrahieren müssen. |
Re: Icons von Datei auslesen
Moin Zusammen,
Zitat:
Wichtig: Hierzu muss man sich die Funktion selber importieren, da die von Borland bereitgestellte Importvariante, nicht den vollen Funktionsumfang ermöglicht. Dazu gibt es sogar bei Borland einen Artikel. (#16778 in den Delphi-FAQ). |
Re: Icons von Datei auslesen
Hi,
das is wohl das was ich gesucht hab. Leider versteh ich nich, wie ich mir jetzt das Icon rausholen kann. Hab diese Mega-Beschreibung angeguckt klappt aber net. devnull |
Re: Icons von Datei auslesen
Hi!
Nimm einfach anstatt der paintBox ein Image und gib noch die SaveDialog-Komponente aufs Formular:
Delphi-Quellcode:
//exe auswählen
procedure TForm1.Button1Click(Sender: TObject); begin if OpenDialog1.Execute then DrawFile(OpenDialog1.FileName); end; //Icon auslesen: procedure TForm1.DrawFile(Name: String); var FileInfo: TSHFileInfo; ImageListHandle: THandle; aIcon: TIcon; begin // Speicher löschen FillChar(FileInfo, SizeOf(FileInfo), #0); // Handle der Image Liste der ausgewählten Datei ermitteln ImageListHandle := SHGetFileInfo( PChar(Name), 0, FileInfo, SizeOf(FileInfo), // großes Icon verlangen SHGFI_ICON or SHGFI_LARGEICON ); try // TIcon Objekt erstellen aIcon := TIcon.Create; try // Icon Handle zuweisen aIcon.Handle := FileInfo.hIcon; // Transparent darstellen aIcon.Transparent := True; with Image1 do begin // Paintbox auf die entsprechende Größe bringen Width := aIcon.Width; Height := aIcon.Height; Application.ProcessMessages; // Paintbox löschen Canvas.Rectangle(-1, -1, Succ(Width), Succ(Height)); // Icon darstellen Canvas.Draw(0, 0, aIcon); end; finally // TIcon Objekt freigeben FreeAndNil(aIcon); end; finally // Icon der Shell wieder freigeben DestroyIcon(FileInfo.hIcon); // Icon Liste der Shell wieder freigeben {ImageList_Destroy(ImageListHandle);} end; end; //Speicher freigeben, da //ImageList_Destroy(ImageListHandle); nicht funktioniert hatte :) procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin Free; end; //Icon speichern procedure TForm1.Button2Click(Sender: TObject); begin SaveDialog1.Execute; if pos('.bmp', SaveDialog1.filename) = 0 then SaveDialog1.fileName := SaveDialog1.FileName + '.bmp'; Image1.Picture.SaveToFile(SaveDialog1.FileName); end; |
Re: Icons von Datei auslesen
Hi,
ich hab mal die DrawFile ('C:\PROJEKT.EXE'); so in mein Programm eingebunden. in DrawFile hab ich noch hinzugefügt:
Delphi-Quellcode:
aber es wird kein icon angezeigt, die datei hat im explorer aber ein icon
Image1 := TImage.Create(form1);
devnull |
Re: Icons von Datei auslesen
Kann es sein, dass das Projekt geöffnet oder schreibgeschützt ist?
|
Re: Icons von Datei auslesen
@ Matze:
nein, die datei ist weder geöffnet, noch schreibgeschützt devnull |
Re: Icons von Datei auslesen
Was passiert, wenn du sie per OpenDialog öffnest? Geht das?
|
Re: Icons von Datei auslesen
wie öffnen ?
|
Re: Icons von Datei auslesen
uses ShellApi
und dort drin gibts dann ExtractAssocitedIcon (oder so ähnlich geschrieben) und dann noch ExtractIcon (oder so) damit isses möglich... |
Re: Icons von Datei auslesen
Ich hab jetz eine kleine Prozedur geschrieben, die das Icon holen kann.
Mein Problem ist aber, dass das Icon verschwindet, wenn ich es über einen Button zeichnen will.
Delphi-Quellcode:
procedure geticon;
var MyIcon:TIcon; icoHandle: HIcon; Image1 : TImage; begin Image1:=TImage.Create(Form1); Image1.Top := 2; Image1.Left := 2; Image1.Parent := Form1; Image1.BringToFront; MyIcon:=TIcon.Create; try icoHandle := ExtractIcon(application.handle,'c:\windows\explorer.exe', 0); MyIcon.Handle:=icoHandle; Image1.Picture.Icon:=MyIcon; Image1.Height := 25; Image1.Width := 25; Image1.Autosize := true; finally MyIcon.free; end; end; :?: Weis jemand, wie ich das Icon über alle anderen Objekte (buttons usw) legen kann? devnull |
Re: Icons von Datei auslesen
Wie kann ich Icons(64x64 Pixel) in mein Image-Objekt (30x30 Pixel) anpassen ?
|
Re: Icons von Datei auslesen
zur letzten Frage:
![]() Da hast du doch einen extra Thread. ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:23 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