Delphi:根据名称在TreeView中创建一个文件树

时间:2011-12-28 19:49:14

标签: delphi treeview

我有一个文件的字符串列表和一个日期作为他们的名字(分隔符可以是不同的:“ - |。”;掩码:yyyy/mm/dd):

2011-03-12.jpeg
2011|10-15.doc
2011.08-09.rar
2011.10-15.txt
2011-03-14.jpeg
2011.06.23.mp3
2011|07|01.zip
2011-07-05.rar

如何使用它们创建树视图?所有文件必须按月和日排序+分配到月份部分,如:

enter image description here

非常感谢您的帮助!!!

2 个答案:

答案 0 :(得分:3)

由于您已经填充了TStringList,我只需使用其CustomSort()方法对其进行排序,然后您可以根据需要循环遍历将节点添加到树中,例如:

function SortFilesByMonthAndDay(List: TStringList; Index1, Index2: Integer): Integer;
var
  Value1, Value2: Integer;
begin
  Value1 := StrToInt(Copy(List[Index1], 6, 2));
  Value2 := StrToInt(Copy(List[Index2], 6, 2));
  if Value1 = Value2 then
  begin
    Value1 := StrToInt(Copy(List[Index1], 9, 2));
    Value2 := StrToInt(Copy(List[Index2], 9, 2));
  end;
  Result := Value2 - Value1;
end;

var
  I: Integer;
  FileMonth, CurrentMonth: Integer;
  CurrentMonthNode: TTreeNode;
begin
  CurrentMonth := 0;
  CurrentMonthNode := nil;
  Files.CustomSort(@SortFilesByMonthAndDay);
  for I := 0 to Files.Count-1 do
  begin
    FileMonth := StrToInt(Copy(Files[I], 6, 2));
    if FileMonth <> CurrentMonth then
    begin
      CurrentMonth := FileMonth;
      CurrentMonthNode := TreeView1.Items.Add(nil, SysUtils.LongMonthNames[CurrentMonth]);
    end;
    TreeView1.Items.AddChild(CurrentMonthNode, Files[I]);
  end;
end;

答案 1 :(得分:0)

  • 创建一个包含12个字符串列表的数组,每月一个。
  • 遍历您的文件,将每个文件名添加到相应的月份。
  • 处理完所有文件后,请使用适当的排序顺序对每个单独的字符串列表进行排序。
  • 最后,填充树视图。对于每个字符串列表,添加顶级节点,然后通过迭代字符串列表添加所有子节点。

我假设您已经知道如何解析单个字符串,如何实现自定义排序顺序,以及如何填充字符串列表,以及您的问题是如何从高级别解决问题。