Edit: Problem gelöst!
Hey da,
Ich hatte vor, in einer Listview Dateinamen und das dazugehörige Icon darzustellen.
Um das Icon zu bekommen, mache ich Folgendes:
Delphi-Quellcode:
//System-Imagelist Handle besorgen
procedure TSearchForm.FormCreate(Sender: TObject);
var FI: SHFILEINFO;
begin
ImageList3.Handle := SHGetFileInfo('
', 0, FI, SizeOf(FI) ,
SHGFI_SYSICONINDEX
or SHGFI_SMALLICON );
If ImageList3.Handle <> 0
then
ImageList3.ShareImages := True;
(* ... *)
end;
//Icon-Index besorgen
function TSearchForm.GetShellImage(Path: PChar): Integer;
var
FileInfo : TSHFileInfo;
FileInfoResult: DWORD;
begin
Result := -1;
FileInfoResult :=SHGetFileInfo(Path, 0, FileInfo, sizeof(FileInfo),
SHGFI_ICON
OR SHGFI_SMALLICON
OR SHGFI_SYSICONINDEX );
If FileInfoResult<>0
then
Result := FileInfo.iIcon
else
begin
(* FileInfoResult := GetLastError;
ShowMessage(SysErrorMessage(FileInfoResult)); *)
end;
end;
//und schließlich...
procedure TSearchForm.AddSearchResult(Folder:
String;
var FileInfo: TsearchRec);
var newItem: TListItem;
begin
Application.ProcessMessages;
newItem := LV.Items.Add;
If Folder[Length(Folder)]<>'
\'
then Folder := Folder + '
\';
with newItem
do
begin
Caption := FileInfo.
Name;
ImageIndex := GetShellImage(Folder+FileInfo.
Name);
SubItems.Add(Folder);
Subitems.Add(FormatFloat('
#0,',FileInfo.Size / 1024)+'
KB' );
Tag := FileInfo.Size;
SubItems.Add(GetFileDesc(Folder+FileInfo.
Name));
end;
end;
Man muss dabei nur beachten, dass man der Funktion GetShellImage auch nen gültigen Dateipfad übergibt!
Gruß,
Dani
Dani H.