⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ch24.htm

📁 好书《C++ Builder高级编程技术》
💻 HTM
📖 第 1 页 / 共 4 页
字号:

}



</FONT></PRE>
<P><A NAME="Heading10"></A><FONT COLOR="#000077"><B>Listing 24.3. The header for
the 
programs data module.</B></FONT></P>
<PRE><FONT COLOR="#0066FF">///////////////////////////////////////

// FindDirsDMod.h

// SearchDirs

// Copyright (c) 1997 by Charlie Calvert

//

#ifndef FindDirsDModH

#define FindDirsDModH

#include 
&lt;vcl\Classes.hpp&gt;

#include &lt;vcl\Controls.hpp&gt;

#include &lt;vcl\StdCtrls.hpp&gt;

#include &lt;vcl\Forms.hpp&gt;

#include &lt;vcl\DB.hpp&gt;

#include &lt;vcl\DBTables.hpp&gt;



class TDMod : public TDataModule

{

__published: 

  
TDatabase *FileData1;

  TTable *DirNamesTable;

  TTable *FileNamesTable;

  TTable *DiskNamesTable;

  TTable *DiskTypeTable;

  TDataSource *DirNamesSource;

  TDataSource *FileNamesSource;

  TDataSource *DiskNamesSource;

  TDataSource 
*DiskTypeSource;

  TIntegerField *DirNamesTableALEVEL;

  TStringField *DirNamesTableDIRNAME;

  TIntegerField *DirNamesTableDISKCODE;

  TIntegerField *FileNamesTableCODE;

  TStringField *FileNamesTableDIRECTORY;

  TStringField 
*FileNamesTableFILENAME;

  TIntegerField *FileNamesTableDIRCODE;

  TIntegerField *DirNamesTableCODE;

  TQuery *DeleteFileNames;

  TQuery *DeleteDirNames;

  TQuery *DeleteDiskNames;

  TAutoIncField *DiskTypeTableCode;

  TStringField 
*DiskTypeTableDiskType;

  TIntegerField *DiskTypeTableDiskTypeCode;

  TAutoIncField *DiskNamesTableCode;

  TStringField *DiskNamesTableDiskName;

  TIntegerField *DiskNamesTableType;

  void __fastcall DModCreate(TObject *Sender);

  

  

  

  


private:

public:

  virtual __fastcall TDMod(TComponent* Owner);

  void CascadingDelete(void);

};



extern TDMod *DMod;



#endif



</FONT></PRE>
<P><A NAME="Heading11"></A><FONT COLOR="#000077"><B>Listing 24.4. The data module
for the 
program.</B></FONT></P>
<PRE><FONT COLOR="#0066FF">///////////////////////////////////////

// FindDirsDMod.cpp

// SearchDirs

// Copyright (c) 1997 by Charlie Calvert

//

#include &lt;vcl\vcl.h&gt;

#pragma hdrstop

#include 
&quot;FindDirsDMod.h&quot;

#pragma resource &quot;*.dfm&quot;



TDMod *DMod;



__fastcall TDMod::TDMod(TComponent* Owner)

        : TDataModule(Owner)

{

}



void __fastcall TDMod::DModCreate(TObject *Sender)

{

  DirNamesTable-&gt;Open();

  
FileNamesTable-&gt;Open();

  DiskNamesTable-&gt;Open();

  DiskTypeTable-&gt;Open();

}



void TDMod::CascadingDelete(void)

{

  DirNamesTable-&gt;First();

  DeleteFileNames-&gt;Prepare();

  while (!DirNamesTable-&gt;Eof)

  {

    
DeleteFileNames-&gt;ExecSQL();

    DirNamesTable-&gt;Delete();

  }

  FileNamesTable-&gt;Refresh();



  DirNamesTable-&gt;Refresh();



  int i = DiskNamesTableCode-&gt;Value;

  DeleteDiskNames-&gt;Params-&gt;Items[0]-&gt;AsInteger = i;

  
DeleteDiskNames-&gt;ExecSQL();

  DiskNamesTable-&gt;Refresh();

}

</FONT></PRE>
<H3 ALIGN="CENTER"><FONT COLOR="#0066FF"></FONT></H3>
<P><A NAME="Heading12"></A><FONT COLOR="#000077"><B>Listing 24.5. The header for
the DiskArchive 
form.</B></FONT></P>
<PRE><FONT COLOR="#0066FF">///////////////////////////////////////

// DiskArchive.h

// SearchDirs

// Copyright (c) 1997 by Charlie Calvert

//

#ifndef DiskArchiveH

#define DiskArchiveH

#include &lt;vcl\Classes.hpp&gt;


#include &lt;vcl\Controls.hpp&gt;

#include &lt;vcl\StdCtrls.hpp&gt;

#include &lt;vcl\Forms.hpp&gt;

#include &lt;vcl\DBGrids.hpp&gt;

#include &lt;vcl\Grids.hpp&gt;

#include &lt;vcl\ExtCtrls.hpp&gt;

#include &lt;vcl\DBCtrls.hpp&gt;

#include 
&lt;vcl\Buttons.hpp&gt;



class TArchiveForm : public TForm

{

__published: 

  TDBGrid *DBGrid1;

  TPanel *Panel1;

  TDBNavigator *DBNavigator1;

  TBitBtn *BitBtn1;

private:

public:

  virtual __fastcall TArchiveForm(TComponent* Owner);

};




extern TArchiveForm *ArchiveForm;



#endif



</FONT></PRE>
<P><A NAME="Heading13"></A><FONT COLOR="#000077"><B>Listing 24.6. The DiskArchive
form. This form is used only for displaying data. It has no custom code.</B></FONT></P>
<PRE><FONT 
COLOR="#0066FF">///////////////////////////////////////

// DiskArchive.cpp

// SearchDirs

// Copyright (c) 1997 by Charlie Calvert

//

#include &lt;vcl\vcl.h&gt;

#pragma hdrstop

#include &quot;DiskArchive.h&quot;

#include 
&quot;FindDirsDMod.h&quot;

#pragma resource &quot;*.dfm&quot;



TArchiveForm *ArchiveForm;



__fastcall TArchiveForm::TArchiveForm(TComponent* Owner)

    : TForm(Owner)

{

}



</FONT></PRE>
<P><A NAME="Heading14"></A><FONT 
COLOR="#000077"><B>Listing 24.7. The header for
the TFindDirs components.</B></FONT></P>
<PRE><FONT COLOR="#0066FF">///////////////////////////////////////

// FindDirs2.h

// SearchDirs

// Copyright (c) 1997 by Charlie Calvert

//

#ifndef 
FindDirs2H

#define FindDirs2H

#ifndef ComCtrlsHPP

#include &lt;vcl\ComCtrls.hpp&gt;

#endif



struct TDirInfo

{

  TSearchRec SearchRec;

  AnsiString CurDirectory;

};



class TDirStack : public TList

{

public:

  TDirStack(): TList() {}; 

  
void Push(TDirInfo *DirInfo);

  TDirInfo *Pop();

};



typedef void __fastcall (__closure *TFoundDirEvent)(AnsiString NewDir);



class TFindDirs : public TComponent

{

private:

  #ifdef DEBUG_FIND_DIRS

  FILE *fp;

  #endif

  AnsiString 
FStartString;     // Unchanged string passed in by user.

  AnsiString FFileExt;

  AnsiString FStartDir;        // The directory where the search starts

  AnsiString FCurDirectory;    // the current directory

  AnsiString FFileMask;        // The 
file mask of files to search for

  AnsiString FSearchString;    // Combine last three into a search string

  TDirStack *FDirStack;        // Stack of directories in the current dir

  TFoundDirEvent FOnFoundDir;

  TFoundDirEvent FOnFoundFile;

  
void GetAllFiles(AnsiString *StartDir);

  void FoundAFile(TSearchRec *FileData);

  void FoundADir(TSearchRec *FileData);

  void __fastcall Initialize(void);

  void SetupSearchString();

  void GetNextDirectory();

  BOOL SetupFirstDirectory();


protected:

  __fastcall virtual ~TFindDirs();

  virtual void ProcessFile(TSearchRec FileData, AnsiString FileName);

  virtual void ProcessDir(TSearchRec FileData, AnsiString DirName);

  virtual void __fastcall SetStartString(AnsiString 
AStartString);

public:

  virtual __fastcall TFindDirs(TComponent *AOwner)

    : TComponent(AOwner) { FDirStack = NULL; FOnFoundDir = NULL; }

  virtual __fastcall TFindDirs(TComponent *AOwner, AnsiString AStartString);

  virtual void Run(void);

  
__property AnsiString StartDir = {read = FStartDir};

  __property AnsiString CurDirectory = {read = FCurDirectory};

__published:

  __property AnsiString StartString={read=FStartString, write=SetStartString};

  __property TFoundDirEvent 
OnFoundFile={read=FOnFoundFile, write=FOnFoundFile};

  __property TFoundDirEvent OnFoundDirf={read=FOnFoundDir, write=FOnFoundDir};

};



class TFindDirsList : public TFindDirs

{

private:

  TStringList *FFileList;

  TStringList *FDirList;


protected:

  __fastcall virtual ~TFindDirsList();

  virtual void ProcessFile(TSearchRec FileData, AnsiString FileName);

  virtual void ProcessDir(TSearchRec FileData, AnsiString DirName);

public:

  virtual __fastcall TFindDirsList(TComponent 
*AOwner): TFindDirs(AOwner) {}

  virtual __fastcall TFindDirsList(TComponent *AOwner, AnsiString AStartString);

__published:

  __property TStringList *FileList = {read = FFileList, nodefault};

  __property TStringList *DirList = {read = FDirList, 
nodefault};

};



#endif



</FONT></PRE>
<P><A NAME="Heading15"></A><FONT COLOR="#000077"><B>Listing 24.8. The main source
file for the TFindDirs component.</B></FONT></P>
<PRE><FONT COLOR="#0066FF">///////////////////////////////////////

// 
FindDirs2.cpp

// SearchDirs

// Copyright (c) 1997 by Charlie Calvert

//

#include &lt;vcl\vcl.h&gt;

#include &lt;vcl\ComCtrls.hpp&gt;

#pragma hdrstop

#include &quot;FindDirs2.h&quot;





// -- TDirStack ----------------


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -