Treeview的items通过Treeview.LoadFromFile('list.txt')加载的一个文本文件,但我只想选择的加载文本文件的部分内容,比如list.txt的内容如下:
GAME
  泡泡龙               -2003
  魔兽3                -2002
  仙剑外传             -2004
MUSIC
  take me to your heart -2004
  江南                  -2004 
  真的爱你              -198*
MOVIE
  怪物史莱克2           -2004  
  江湖                  -2003
  功夫                  -2005
我想用一个combobox,如果combobox选中的2004年那么treeview就只加载list.txt中满足2004年的数据,如何实现这个filter的功能呢?  

解决方案 »

  1.   

    现读入到 TMemoryStream 里,过滤之,再 LoadFromStream
     
    呵呵, 不是什么好办法。还不如直接读文件(格式自己定),过滤之,然后在 TreeView 里创建相应节点。
      

  2.   

    OK,我也不希望是读入TMemoryStream中再过滤
    直接读文件(格式自己定),过滤?怎么格式自己定,LoadFromFile的格式是怎么定义,如果要自己定义在那里可以定义。新手,勿笑~!
      

  3.   

    你看看 TTreeView.LoadFromFile、SaveToFile 的帮助、源代码,看看其文件格式。文件格式自己定义的意思是:自己定义一种文件格式,然后按此格式写 list.txt,然后按此格式读出之,然后在 TTreeView 里添加相应节点。——此过程不使用 LoadFromFile 函数。
      

  4.   

    已经看了TTreeView.LoadFromFile、SaveToFile 的帮助、源代码,提及的格式只能读取文件,要过滤?好像没有提及,很困难的样子~!想自己定义格式,不过 zhengji(看雨飞)大侠说的‘不使用 LoadFromFile 函数就能实现?‘我不是很清楚,能不能给个简单的例子,感谢了!
      

  5.   

    比如 list.txt 写作:
    aa
    bb
    cc
    然后读入之:
    var
      List: TStringList;
      i: Integer;
      Root: TTreeNode;
    begin
      List := TStringList.Create;
      List.LoadFromFile('list.txt');
      Tree.Items.Clear;
      Root := Tree.Items.AddChild(nil, 'Root'); // 根节点
      for i := 0 to List.Count - 1 do
      begin
        if 合适 then
        begin    
          Tree.Items.AddChild(Root, List.Strings[i]);
        end;
      end;
      List.Free;
    end;这里 list.txt 的格式太过简单了,楼主可根据具体情况自行设计一个可用的格式。
      

  6.   

    如果是用TStringList来读入文本文件,我想知道TStringList是如何储存象下面数据的(包括众多的空格,回车,TAB):
    GAME
      泡泡龙               -2003
      魔兽3                -2002
      仙剑外传             -2004
    MUSIC
      take me to your heart -2004
      江南                  -2004 
      真的爱你              -198*
    MOVIE
      怪物史莱克2           -2004  
      江湖                  -2003
      功夫                  -2005
    如何又对TStringList的数据进行过滤呢?
      

  7.   

    i  := 0;
        List := TStringList.Create();
        List.LoadFromFile('d:\test.txt');
        for i:=0 to List.Count-1 do
            ShowMessage(List[i]);
        List.Destroy;
    List就是一个字符串数组,list[i]代表文本文件中的每一行的内容