Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Symbole auslesen (https://www.delphipraxis.net/39034-symbole-auslesen.html)

smart 27. Jan 2005 19:11


Symbole auslesen
 
Habe mir eine kleine Funktion geschrieben um Symbole auszulesen.

Delphi-Quellcode:
function GetIcon(const AExtension: string; ASmall: Boolean): HIcon;
var
  Info: TSHFileInfo;
  Flags: Cardinal;
begin
  if ASmall then
     Flags := SHGFI_ICON or SHGFI_LARGEICON or SHGFI_USEFILEATTRIBUTES or SHGFI_LINKOVERLAY;

  SHGetFileInfo(PChar(AExtension), FILE_ATTRIBUTE_NORMAL, Info, SizeOf(TSHFileInfo), Flags);
  Result := Info.hIcon;
end;
Läuft auch ganz gut, aber bei *.lnk Dateien klappt es nicht. Was mache ich da falsch?

Binärbaum 27. Jan 2005 19:33

Re: Symbole auslesen
 
Bei *.lnk-Dateien handelt es sich um Verknüpfungen. Diese selbst enthalten keine Symbole, sondern benutzen die Symbole aus der verlinkten Datei oder einer (Windows-) DLL. Du musst also die verknüpfte Datei nach Symbolen durchsuchen und nicht die Verknüpfung selbst.

MfG
Binärbaum

//Edit: Rechtschreibung nachgebessert

smart 28. Jan 2005 09:34

Re: Symbole auslesen
 
Vielen Dank. Ich bin dann einen anderen Weg gegangen und habe es selbst hinbekommen. Für Alle die evtl. ein ähnliches Problem haben, hier das Listing.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
  Icon: TIcon;
  ListItem: TListItem;
  FileInfo: SHFILEINFO;
begin
  Icon := TIcon.Create;
  ListView1.Items.BeginUpdate;
  try
For i := 0 To FileListBox1.Items.Count - 1 do
begin
      with ListView1 do
          ListItem := ListView1.Items.Add;
          SHGetFileInfo(PChar(FileListBox1.Items[i]), 0, FileInfo, SizeOf(FileInfo), SHGFI_DISPLAYNAME);
          Listitem.Caption := FileInfo.szDisplayName;
          SHGetFileInfo(PChar(FileListBox1.Items[i]), 0, FileInfo, SizeOf(FileInfo), SHGFI_TYPENAME);
          ListItem.SubItems.Add(FileInfo.szTypeName);
          SHGetFileInfo(PChar(FileListBox1.Items[i]), 0, FileInfo, SizeOf(FileInfo), SHGFI_ICON or SHGFI_LARGEICON);
          icon.Handle := FileInfo.hIcon;
          ListItem.ImageIndex := ImageList1.AddIcon(Icon);
          DestroyIcon(FileInfo.hIcon);
      end;
  finally
    Icon.Free;
    ListView1.Items.EndUpdate;
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:59 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