//---------------------------------------------------------------------------
#ifndef FileFindThreadH
#define FileFindThreadH
//---------------------------------------------------------------------------
#include <Classes.hpp>
//---------------------------------------------------------------------------
struct TFileFindInfo
{
AnsiString Name;
AnsiString Extension;
AnsiString Path;
TDateTime DateModified;
__int64 Size;
bool IsFolder;
};
// Callback types
typedef void __fastcall (__closure *CALLBACKPROC)(const TFileFindInfo& finfo, long ID);
typedef void __fastcall (__closure *COMPLETEDPROC)(long ID);
class TFileFindThread : public TThread
{
private:
TFileFindInfo FFInfo;
AnsiString FDirectory;
TStringList *FFileSpecs;
TStringList *FFileList;
CALLBACKPROC FCallbackProc;
COMPLETEDPROC FCompletedProc;
long FID;
bool FIncludeSubdirectories;
void __fastcall CallbackProxy(void);
void __fastcall CompletedProxy(void);
int CatalogFiles(const AnsiString& Directory, const AnsiString& FileSpec, TStringList& List);
int FindFiles(const AnsiString& Directory, TStringList& FileSpecs, TStringList& List, bool IncludeSubdirectories);
void __fastcall OnThreadTerminate(TObject *Sender);
protected:
void __fastcall Execute();
// Settors
void SetCallbackProc(CALLBACKPROC callback);
void SetCompletedProc(COMPLETEDPROC callback);
void SetDirectory(const AnsiString& directory);
void SetFileList(TStringList* filelist);
void SetFileSpecs(TStringList* filespecs);
void SetID(long ID);
void SetIncludeSubdirectories(bool Include);
public:
__fastcall TFileFindThread(void); // constructor (default)
__fastcall ~TFileFindThread(void); // destructor
// Properties (see references for more information about properties)
__property AnsiString Directory = {read=FDirectory, write=SetDirectory};
__property TStringList* FileSpecs = {read=FFileSpecs, write=SetFileSpecs};
__property TStringList* FileList = {read=FFileList, write=SetFileList};
__property CALLBACKPROC CallbackProc = {read=FCallbackProc, write=SetCallbackProc};
__property COMPLETEDPROC CompletedProc = {read=FCompletedProc, write=SetCompletedProc};
__property long ID = {read=FID, write=SetID};
__property bool IncludeSubdirectories = {read=FIncludeSubdirectories, write=SetIncludeSubdirectories};
};
//---------------------------------------------------------------------------
#endif