Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Icons von Datei auslesen (https://www.delphipraxis.net/10782-icons-von-datei-auslesen.html)

devnull 25. Okt 2003 10:31


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

Chewie 25. Okt 2003 10:36

Re: Icons von Datei auslesen
 
Das Standardicon kannst du mit SHGetFileInfoSHGetFileInfo ermitteln.
Für mehrere Icons wirst du die Resourcen selbst extrrahieren müssen.

Christian Seehase 25. Okt 2003 10:46

Re: Icons von Datei auslesen
 
Moin Zusammen,

Zitat:

Zitat von Chewie
Für mehrere Icons wirst du die Resourcen selbst extrrahieren müssen.

oder man nimmt ExtractIconEx.
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).

devnull 25. Okt 2003 10:52

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

Matze 25. Okt 2003 10:59

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;

devnull 25. Okt 2003 11:22

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:
  Image1 := TImage.Create(form1);
aber es wird kein icon angezeigt, die datei hat im explorer aber ein icon

devnull

Matze 25. Okt 2003 11:32

Re: Icons von Datei auslesen
 
Kann es sein, dass das Projekt geöffnet oder schreibgeschützt ist?

devnull 25. Okt 2003 11:34

Re: Icons von Datei auslesen
 
@ Matze:
nein, die datei ist weder geöffnet, noch schreibgeschützt

devnull

Matze 25. Okt 2003 11:37

Re: Icons von Datei auslesen
 
Was passiert, wenn du sie per OpenDialog öffnest? Geht das?

devnull 25. Okt 2003 11:39

Re: Icons von Datei auslesen
 
wie öffnen ?

SirThornberry 25. Okt 2003 12:53

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...

devnull 25. Okt 2003 14:00

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

devnull 25. Okt 2003 14:11

Re: Icons von Datei auslesen
 
Wie kann ich Icons(64x64 Pixel) in mein Image-Objekt (30x30 Pixel) anpassen ?

Matze 25. Okt 2003 16:31

Re: Icons von Datei auslesen
 
zur letzten Frage:

http://www.delphipraxis.net/internal...highlight=icon

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