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