www.gusucode.com > Delphi刻录软件源码程序 > Delphi刻录软件源码程序/ym_MagicCDDVDBurnerVCL-hicode/Examples/FullDemoC/TreeView.cpp

    //---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "TreeView.h"
#include "unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "mbCDBC"
#pragma link "mbDrvLib"
#pragma resource "*.dfm"
TfrmTree *frmTree;


//---------------------------------------------------------------------------
__fastcall TfrmTree::TfrmTree(TComponent* Owner)
        : TForm(Owner)
{
}

//---------------------------------------------------------------------------

void __fastcall TfrmTree::FormShow(TObject *Sender)
{
  TTreeNode * RootNode = new TTreeNode(tvDir->Items);

  Form1->mcdb->FindDir("\\");
  RootNode = tvDir->Items->InsertObject(NULL,"CDROOT", Form1->mcdb->RootDir);
  DisplayDir(RootNode, Form1->mcdb->RootDir);
  tvDir->Selected = RootNode;
  tvDirClick(Sender);
}
//---------------------------------------------------------------------------

TfrmTree::DisplayDir(TTreeNode * treenode, PDirEntry Dir)
{
  TTreeNode * Node = new TTreeNode(tvDir->Items);
  PFileEntry CurrentFile;
  if (Dir == NULL)
    return 0;
  CurrentFile = Dir->Files;
  while ( CurrentFile != NULL )
  {
    if (CurrentFile->Attr == faDirectory )
    {
      Node = tvDir->Items->AddChildObject(treenode, CurrentFile->LongName, CurrentFile->DirRec);
      DisplayDir(Node, CurrentFile->DirRec);
    }
    CurrentFile = CurrentFile->Next;
  }
}

//---------------------------------------------------------------------------

void __fastcall TfrmTree::tvDirClick(TObject *Sender)
{
  PDirEntry p;
  PFileEntry f;
  int i;
  p = (PDirEntry) tvDir->Selected->Data;
  f = p->Files;
  i = 1;
  fl->Cells[0][0] = "File Name";
  fl->Cells[1][0] = "File Size";
  fl->Cells[2][0] = "   Date";
  fl->Cells[3][0] = "  Time";

  while (f != NULL )
  {
    fl->Cells[0][i] = f->LongName;
    if ( !(f->Attr & faDirectory))
    {
      fl->Objects[1][i] = (TObject *)f;
      fl->Cells[1][i] = f->FileSize;
    }
    else
    {
      fl->Cells[1][i] = " < DIR > ";
      fl->Objects[1][i] = (TObject *)(f);
    }
    f = f->Next;
    i++;
  }
  if (i == 1)
  {
   fl->Rows[1]->Clear();
   i = 2;
  }
  fl->RowCount = i;
}
//---------------------------------------------------------------------------

void __fastcall TfrmTree::flDblClick(TObject *Sender)
{
  String TargetName;
  PFileEntry SourceFile;
  SourceFile = (PFileEntry)fl->Objects[1][fl->Row];
  TargetName = SourceFile->LongName;
  if ( ( (SourceFile->Attr & faDirectory) == faDirectory ))
  {
    ShowMessage("You can not extract directory, " + TargetName + " is a directory");
    return;
  }
  if ( InputQuery("Extract File","Enter Filename and Path", TargetName) )
  {
    Form1->mcdb->ExtractFile(SourceFile, TargetName);
  }
}