Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Icons nicht existierender Dateien holen (https://www.delphipraxis.net/201808-icons-nicht-existierender-dateien-holen.html)

Codehunter 28. Aug 2019 12:19

Icons nicht existierender Dateien holen
 
Hallo!

Entsprechend diesem Beispiel kann man sich ja recht einfach die Shellicons holen und darstellen. Jetzt habe ich aber den Fall, dass ich den Inhalt einer ZIP-Datei per ZipForge auswerte. Heißt, ich habe nur die Dateinamen inkl. Extension, welche aber nicht "physisch" auf einem Datenträger liegen. Kann man sich auf ähnliche Weise auch die Icons holen, wenn man nur den Dateinamen hat? Und ich möchte jetzt nicht den "schmutzigen Trick" verwenden, irgendwo Dummy-Dateien anzulegen. Ich bräuchte nur nen kleinen Schubs in die richtige Richtung.

Grüße
Cody

dataspider 28. Aug 2019 12:53

AW: Icons nicht existierender Dateien holen
 
Hi

Ich meine...bei den Attributen musst du noch SHGFI_USEFILEATTRIBUTES angeben.

Frank

Jasocul 28. Aug 2019 12:57

AW: Icons nicht existierender Dateien holen
 
Vielleicht hilft dir das weiter:
https://entwickler-ecke.de/topic_Ico...n_55744,0.html

Codehunter 28. Aug 2019 13:02

AW: Icons nicht existierender Dateien holen
 
Zitat:

Zitat von dataspider (Beitrag 1443690)
bei den Attributen musst du noch SHGFI_USEFILEATTRIBUTES angeben.

Danke! Schubs hat gereicht :-)
Delphi-Quellcode:
function GetFileInfo(AExt: string; var AInfo: TSHFileInfo): Boolean;
begin
  ZeroMemory(@AInfo, SizeOf(TSHFileInfo));
  Result := (
    SHGetFileInfo(
      PChar(AExt), FILE_ATTRIBUTE_NORMAL, AInfo, SizeOf(TSHFileInfo),
      SHGFI_ICON + SHGFI_TYPENAME + SHGFI_USEFILEATTRIBUTES + SHGFI_LARGEICON
    ) <> 0
  );
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  I: Integer;
  LExt, LStr: string;
  LIcon: TIcon;
  LInfo: TSHFileInfo;
  LItem: TListItem;
  LList: TStringList;
begin
  LList := TStringList.Create;
  try
    LList.Add('test.txt');
    LList.Add('test.exe');
    LList.Add('test.xls');
    ImageList1.Clear;
    ListView1.Clear;
    for LStr in LList do begin
      LExt := ExtractFileExt(LStr);
      if GetFileInfo(LExt, LInfo) then begin
        I := -1;
        LIcon := TIcon.Create;
        try
          LIcon.Handle     := LInfo.hIcon;
          LIcon.Transparent := true;
          I := ImageList1.AddIcon(LIcon);
        finally
          LIcon.Free;
        end;
        LItem := ListView1.Items.Add;
        LItem.Caption := LStr;
        LItem.ImageIndex := I;
      end;
    end;
  finally
    FreeAndNil(LList);
  end;
end;


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