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 Dateitypen icons in listview (https://www.delphipraxis.net/80499-dateitypen-icons-listview.html)

Van HelF 9. Nov 2006 21:07


Dateitypen icons in listview
 
hallo,
ich habe hier mal im forum machgeschaut, und folgenden code zum auslesen, des dateitypen icons gefunden.
mein problem ist, ich möchte mir das icon gerne in einem listview anstatt in der paintbox anzeigen lassen, jedoch bekomme ich es nicht wirklich hin. hat jemand eine idee, wie man dies umsetzen könnte?

Delphi-Quellcode:
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 PaintBox1 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;


procedure TForm1.Button1Click(Sender: TObject);
var l:Tlistitem;
begin
  if OpenDialog1.Execute then
    DrawFile(OpenDialog1.FileName);
end;

ErazerZ 9. Nov 2006 21:14

Re: Dateitypen icons in listview
 
Du ladest einfach alles in einer TImageList. Im Objekt-Inspektor änderst SmallImages von dem TListView mit deiner TImageList.
Danach machst einen code wie z.B.
Delphi-Quellcode:
var ListItem: TListItem;
begin
  ListItem := ListView1.Items.Add;
  ListItem.ImageIndex := 0; // oder den Index von der TImageList
  ListItem.Caption := 'Erste Spalte';
  ListItem.SubItems.Add('Zweite..');
end;
Jedoch, nehmen wir an du speicherst jedes einzelne Icon in der TImageList, bei 1.000 Dateien frisst das viel Speicher.

Zacherl 9. Nov 2006 21:36

Re: Dateitypen icons in listview
 
Um jetzt mal keinen neuen Thread aufzumachen: "Gibt es eine Funktion, die anhand der Dateierweiterung das Icon zurückgibt? Also wenn ich gif übergebe das GIF Icon anzeigt und wenn ich exe übergebe das standard exe Icon ausgibt ...

Florian

Luckie 9. Nov 2006 21:38

Re: Dateitypen icons in listview
 
Guckst du hier [oh]SHGetFileInfo[oh].


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