Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Icon aus beliebiger Datei extrahieren (z.B. *.lnk) (https://www.delphipraxis.net/55412-icon-aus-beliebiger-datei-extrahieren-z-b-%2A-lnk.html)

Martin K 20. Okt 2005 16:45

Re: Icon aus beliebiger Datei extrahieren (z.B. *.lnk)
 
Jo, danke erst mal.

Aber die letzte Zeile will Delphi irgendwie nich annehmen...

Martin K 20. Okt 2005 16:48

Re: Icon aus beliebiger Datei extrahieren (z.B. *.lnk)
 
leider, leider, leider....
funzt bei mir immer noch nich! :cry:

Was hast Du gemacht, damit's geht ???

Hab die letzt Zeile einfach weggelassen und PaintBox1 mit Image1 ersetzt.
Programm läuft auch, aber das Image1 ist einfach nur weiß...

ichbins 20. Okt 2005 16:48

Re: Icon aus beliebiger Datei extrahieren (z.B. *.lnk)
 
die kannste rausnehmen :) hab ich auch gemacht. es könnte dann nur sein, dass du, wenn du 1000000 Icons ausgelesen hast, der Speicher voll is, weil du die Imagelist nicht mehr leermachst [zur letzten Zeile]

du musst den Code eben so weit abkürzen, dass er sich nurnoch um das Icon kümmert. Ich machs mal schnell...

Martin K 20. Okt 2005 16:52

Re: Icon aus beliebiger Datei extrahieren (z.B. *.lnk)
 
Warum läufts bei mir nich?
:roll: :cry: :? :( :coder2:

?????

ichbins 20. Okt 2005 16:53

Re: Icon aus beliebiger Datei extrahieren (z.B. *.lnk)
 
Jau, so gehts auch:
Delphi-Quellcode:
function FileIcon(Name: String):ticon;
var
  FileInfo: TSHFileInfo;
  ImageListHandle: THandle;
  aIcon: TIcon;
begin
  FillChar(FileInfo, SizeOf(FileInfo), #0);
  ImageListHandle := SHGetFileInfo(
    PChar(Name), 0, FileInfo, SizeOf(FileInfo),
    SHGFI_ICON or SHGFI_LARGEICON
  );
  try
    aIcon := TIcon.Create;
    try
      aIcon.Handle := FileInfo.hIcon;
      aIcon.Transparent := True;
    except end;
  except end;
  result:=aicon;
end;
der liefert dir dann ein gültiges Icon zurück.

Martin K 20. Okt 2005 16:55

Re: Icon aus beliebiger Datei extrahieren (z.B. *.lnk)
 
warte mal....
Hab grad als Parameter einfach '' übergeben, also:
Delphi-Quellcode:
  DrawFile('');
Und es wird das Windows-Ordner Symbol angezeigt !!!

? Muss also an der *.lnk Datei liegen ?

Martin K 20. Okt 2005 16:59

Re: Icon aus beliebiger Datei extrahieren (z.B. *.lnk)
 
Der neue Code funzt auch nur, wenn ich einen Ordner also
Delphi-Quellcode:
Image1.Picture.Icon:=FileIcon('');
übergebe.

Aber nicht bei meiner *.lnk Datei :cry:
Geht's denn bei dir mit einer *.lnk Verknüpfung ?

ichbins 20. Okt 2005 17:01

Re: Icon aus beliebiger Datei extrahieren (z.B. *.lnk)
 
lnks kann er bei mir schon auslesen. mach mal nicht image1.picture.icon sondern image1.canvas.draw(fileicon(filename));

hier mal mein source:
Delphi-Quellcode:
function FileIcon(Name: String):ticon;
var
  FileInfo: TSHFileInfo;
  ImageListHandle: THandle;
  aIcon: TIcon;
begin
  FillChar(FileInfo, SizeOf(FileInfo), #0);
  ImageListHandle := SHGetFileInfo(
    PChar(Name), 0, FileInfo, SizeOf(FileInfo),
    SHGFI_ICON or SHGFI_LARGEICON
  );
  try
    aIcon := TIcon.Create;
    try
      aIcon.Handle := FileInfo.hIcon;
      aIcon.Transparent := True;
    except end;
  except end;
  result:=aicon;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  if not opendialog1.Execute then exit;
  Application.Icon:=fileicon(opendialog1.FileName);
end;
bei mir stellt er das ausgelesene Icon als Anwendungssymbol ein. Klappt prima.


[edit] sch... eigentlich müsste ich ja eine dialektische Erörterung als Deutsch-Hausaufgabe schreiben... aber Mammi wird schon nicht schauen.

Martin K 20. Okt 2005 17:04

Re: Icon aus beliebiger Datei extrahieren (z.B. *.lnk)
 
Bei
Delphi-Quellcode:
image1.canvas.draw(fileicon(.......));
kommt:
Zitat:

[Error] Unit1.pas(56): Incompatible types: 'Integer' and 'TIcon'

Martin K 20. Okt 2005 17:05

Re: Icon aus beliebiger Datei extrahieren (z.B. *.lnk)
 
Hmm... Deutsch...
Also ich hab Herbstferien!!!

Übrigens kannst du deinen Code noch vereinfachen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if opendialog1.Execute then
     Application.Icon:=fileicon(opendialog1.FileName);
end;
Aber vielen vielen Dank für deine Hilfe, werd's schon hinkriegen! :coder2:


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:43 Uhr.
Seite 2 von 3     12 3      

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