builder如何利用treeview做文件列表

就是要做出类似windows管理器的树列表,该怎么做呢,用treeview做,但是怎么在treeview里显示文件列表,求各位大神图片说明

资源管理器左边区域显示目录的是treeview,而右边显示文件和目录的是ListView,是两个不同的控件


// 完美解决方案
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  String Path=Edit1->Text;
    if(Path.SubString(Path.Length(),1)!="\\"){
      Path+="\\";
    }
  TTreeNode * Node1=TreeView3->Items->Add(NULL,Path);
  TSearchRec sr;
  TSearchRec sr1;
    if(FindFirst(Path+"*.*", faAnyFile, sr) == 0){
        do{
            if((sr.Attr & faDirectory) && sr.Name!="." && sr.Name!=".."){
              TTreeNode * NodeTmp=TreeView3->Items->AddChild(Node1,sr.Name);
                    if(FindFirst(Path+sr.Name+"\\*.*", faAnyFile, sr1) == 0){
                        do{
                            if((sr1.Attr & faDirectory) && sr1.Name!="." && sr1.Name!=".."){
                              NodeTmp->HasChildren=true;
                              break;
                            }
                        }while(FindNext(sr1) == 0);
                    }
            }
        } while (FindNext(sr) == 0);
      FindClose(sr);
    }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::TreeView3Changing(TObject *Sender, TTreeNode *Node, bool &AllowChange)

{
  Screen->Cursor=crHourGlass;
  //Animate1->Active=true;
  //防止重复增加节点
    if(Node->Count==0){
      TSearchRec sr;
      TSearchRec sr1;
      String DirName,DirTmp;
      TTreeNode * NodeTmp=Node;
      DirName=Node->Text;
      //得到完整的路径
        for(int I=Node->Level ;I>0 ;I--){
          NodeTmp=NodeTmp->Parent;
          DirTmp=NodeTmp->Text;
            if(DirTmp.SubString(DirTmp.Length(),1)!="\\"){
              DirTmp+="\\";
            }
          DirName.Insert(DirTmp,0);
        }
        if(DirName.SubString(DirName.Length(),1)!="\\"){
          DirName+="\\";
        }
        if(FindFirst(DirName+"*.*", faAnyFile, sr) == 0){
            do{
                if((sr.Attr & faDirectory) && sr.Name!="." && sr.Name!=".."){
                  TTreeNode * NodeTmp=TreeView3->Items->AddChild(Node,sr.Name);
                    if(FindFirst(DirName+sr.Name+"\\*.*", faAnyFile, sr1) == 0){
                        do{
                            if((sr1.Attr & faDirectory) && sr1.Name!="." && sr1.Name!=".."){
                              NodeTmp->HasChildren=true;
                              break;
                            }
                        }while(FindNext(sr1) == 0);
                    }
                }
            }while(FindNext(sr) == 0);
          FindClose(sr);
        }
    }
  Screen->Cursor=crDefault;
  //Animate1->Active=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::TreeView3MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift,
          int X, int Y)
{
  // 因为上面的代码是在选中了节点后执行的,当点击“+”时不会添加下层节点(要先选中然后点+才可以),此处解决了此问题
  // 当点“+”后自动添加子节点并展开
    //if(Button==mbLeft) // 按鼠标左键选中节点
    //if(Button==mbRight) // 按鼠标右键选中节点
    {
      //TTreeNode *&temp_node=TreeView1->GetNodeAt(X,Y);
        //if(temp_node!=NULL){
        if(TreeView3->GetNodeAt(X,Y)!=NULL)
        {
          //temp_node->Selected=true;
          TreeView3->GetNodeAt(X,Y)->Selected=true;
          TreeView3->Selected->Expand(true); // 展开选中的节点
          //下面判断temp_node的Caption或Data,然后,修改PopupMenu
          //ShowMessage("Hello");
        }
    }
}