Um es noch sauberer zu machen:
Einen Class Helper verwenden, der das ListItem befüllt. Bei der Gelegenheit kann man dann auch gleich konsequent refaktorisieren.
Damit sollten dann die Grundregeln ordentlichen
OOP einigermaßen erfüllt sein.
Delphi-Quellcode:
Type
// Es ist die Aufgabe eines TFileInfo, in meiner Applikation das richtige Icon zu liefern
TIconIndexHelper = Class Helper For TFileInfo
Function IsDirectory : Boolean;
Function GetImageIndexFromFileName : Integer;
End;
// Es ist Aufgabe eines TListItem, in meiner App sich selbst anhand eines TFileInfo zu befüllen
TListViewItemFillFromFileInfoHelper = Class Helper For TListItem
Procedure FillSubItemsWithNameInfo (aFileInfo : TFileInfo);
Procedure FillContentsFromFileInfo (aFileInfo : TFileInfo);
End;
Const
iiNoIcon = -1;
iiMP3Icon = 0;
Function TIconIndexHelper.GetImageIndexFromFileName : Integer;
Begin
if AnsiUpperCase(ExtractFileExt(Name)) = AnsiUpperCase('.mp3') then
Result := iiMP3Icon
else
Result := iiNoIcon;
End;
Function TIconIndexHelper.IsDirectory : Boolean;
Begin
Result := LongBool(Attributes and FILE_ATTRIBUTE_DIRECTORY)
End;
Procedure TListViewItemFillFromFileInfoHelper.FillSubItemsWithNameInfo (aFileInfo : TFileInfo);
Begin
SubItems.Add(aFileInfo.Location);
SubItems.Add(aFileInfo.Name);
if aFileInfo.IsDirectory then
SubItems.Add('Folder')
else begin
SubItems.Add(FormatFileSize(aFileInfo.Size));
SubItems.Add(DateTimeToStr(aFileInfo.ModifiedTime));
end;
End;
Procedure TListViewItemFillFromFileInfoHelper.FillContentsFromFileInfo (aFileInfo : TFileInfo);
Begin
Caption := IntToStr(Self.ListView.Items.Count);
FillSubItemsWithNameInfo(aFileInfo);
ImageIndex := aFileInfo.GetImageIndexFromFilename;
end;
...
ListView1.Items.BeginUpdate;
Try
ListView1.Items.Add.FillContentsFromFileInfo (FileInfo);
Finally
ListView1.Items.EndUpdate;
End;
if not FindFile.Threaded then
Application.ProcessMessages;
end;
Es ist natürlich 3x soviel Schreibarbeit, aber dafür übersichtlich, verständlich und leichter erweiterbar. Meine Meinung.
Das Bild hängt schief.