[Delphi] - Mehrspaltig

Hallo.

wie mache ich sowas :wink:

http://delphi312.tripod.com/temp.jpg

bye
Martin

Mit FindFist, FindNext, FindClose und nem TListView :smile:

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