📄 ch24.htm
字号:
}
</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
<vcl\Classes.hpp>
#include <vcl\Controls.hpp>
#include <vcl\StdCtrls.hpp>
#include <vcl\Forms.hpp>
#include <vcl\DB.hpp>
#include <vcl\DBTables.hpp>
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 <vcl\vcl.h>
#pragma hdrstop
#include
"FindDirsDMod.h"
#pragma resource "*.dfm"
TDMod *DMod;
__fastcall TDMod::TDMod(TComponent* Owner)
: TDataModule(Owner)
{
}
void __fastcall TDMod::DModCreate(TObject *Sender)
{
DirNamesTable->Open();
FileNamesTable->Open();
DiskNamesTable->Open();
DiskTypeTable->Open();
}
void TDMod::CascadingDelete(void)
{
DirNamesTable->First();
DeleteFileNames->Prepare();
while (!DirNamesTable->Eof)
{
DeleteFileNames->ExecSQL();
DirNamesTable->Delete();
}
FileNamesTable->Refresh();
DirNamesTable->Refresh();
int i = DiskNamesTableCode->Value;
DeleteDiskNames->Params->Items[0]->AsInteger = i;
DeleteDiskNames->ExecSQL();
DiskNamesTable->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 <vcl\Classes.hpp>
#include <vcl\Controls.hpp>
#include <vcl\StdCtrls.hpp>
#include <vcl\Forms.hpp>
#include <vcl\DBGrids.hpp>
#include <vcl\Grids.hpp>
#include <vcl\ExtCtrls.hpp>
#include <vcl\DBCtrls.hpp>
#include
<vcl\Buttons.hpp>
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 <vcl\vcl.h>
#pragma hdrstop
#include "DiskArchive.h"
#include
"FindDirsDMod.h"
#pragma resource "*.dfm"
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 <vcl\ComCtrls.hpp>
#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 <vcl\vcl.h>
#include <vcl\ComCtrls.hpp>
#pragma hdrstop
#include "FindDirs2.h"
// -- TDirStack ----------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -