Hallo.
wie mache ich sowas 
http://delphi312.tripod.com/temp.jpg
bye
Martin
Mit FindFist, FindNext, FindClose und nem TListView 
Hi Martin,
die Dateien grabbelst Du Dir mit FindFirst, FindNext zusammen. In der Prozedur ScanFiles werden die dann in einen ListView (ViewStyle auf vsReport stellen) eingelesen. Die erste Spalte ist dabei die Eigenschaft „Caption“ der Listvieweinträge, die nächsten Spalten füllst Du mit " NewItem.SubItems.Add(inttostr(SearchRec.Size));"…
procedure TMainForm.ScanFiles(AFileMask: string);
var
Found : Integer;
SearchRec : TSearchRec;
NewItem : TListItem;
ShFileInfo : TShFileInfo;
begin
ListViewFiles.Items.BeginUpdate;
try
ListViewFiles.Items.Clear;
Found := FindFirst(CurrentDir + '\'+ AFileMask, faAnyFile - faDirectory - faHidden, SearchRec);
while Found = 0 do
begin
NewItem := ListViewFiles.Items.Add;
// Dateiname
NewItem.Caption := SearchRec.Name;
// Icon anzeigen
ShGetFileInfo (PChar(CurrentDir + NewItem.Caption), 0, ShFileInfo, SizeOf(ShFileInfo),
shgfi\_SysIconIndex or shgfi\_Icon or
shgfi\_DisplayName or shgfi\_SmallIcon);
NewItem.ImageIndex := ShFileInfo.IIcon;
// Größe
NewItem.SubItems.Add(inttostr(SearchRec.Size));
Found := FindNext(SearchRec);
end;
finally
FindClose(SearchRec);
ListViewFiles.Items.EndUpdate;
end;
end;
Das zugehörige SystemIcon lese ich aus den ImageListen des Listviews, die ich vorher mit der sgn. SystemImageList gefüllt habe, in der alle Icons der bekannten Dateitypen drin sind.
procedure TMainForm.GetSystemImageList;
{--------------------------------------------------------------------
System-Iconlisten lesen für Datei-Icon
--------------------------------------------------------------------}
var
SysImageList : Integer; // temporäres Handle für System ImageLists
ShFileInfo : TShFileInfo;
begin
ListViewFiles.LargeImages := TImageList.Create(Self);
SysImageList := ShGetFileInfo('', 0, ShFileInfo, SizeOf(ShFileInfo),
shgfi\_SysIconIndex or shgfi\_LargeIcon);
if SysImageList 0 then
begin
ListViewFiles.LargeImages.Handle := SysImageList;
ListViewFiles.LargeImages.ShareImages := True;
end;
ListViewFiles.SmallImages := TImageList.Create(Self);
SysImageList := ShGetFileInfo('', 0, ShFileInfo, SizeOf(ShFileInfo),
shgfi\_SysIconIndex or shgfi\_SmallIcon);
if SysImageList 0 then
begin
ListViewFiles.SmallImages.Handle := SysImageList;
ListViewFiles.SmallImages.ShareImages := True;
end;
end;
Gruß Thomas
Übrigens wird mit der obigen Methode nur ein Icon in der ersten Spalte gezeichnet (automatisch). Wenn Du in den anderen Spalten auch Icons darstellen willst, mußt Du m.E. die Eigenschaft „OwnerDraw“ des Listviews auf True setzen und im Ereignis „OnDrawItem“ den ganzen Mist selbst zeichnen…Ist nicht jedermanns Sache :o) Wenn Du das vorhast, schreib ich mal ein Beispiel für so ein Ereignis…
Gruß Thomas