home *** CD-ROM | disk | FTP | other *** search
- unit Main;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- ComCtrls, StdCtrls, ExtCtrls, Spin, FindFile;
-
- type
- TMainForm = class(TForm)
- FindButton: TButton;
- StopButton: TButton;
- FindFile: TFindFile;
- Animate: TAnimate;
- FoundFiles: TListView;
- StatusBar: TStatusBar;
- Threaded: TCheckBox;
- PageControl: TPageControl;
- TabSheet1: TTabSheet;
- Label1: TLabel;
- Label2: TLabel;
- Filename: TEdit;
- Location: TEdit;
- Subfolders: TCheckBox;
- BrowseButton: TButton;
- TabSheet2: TTabSheet;
- Attributes: TGroupBox;
- System: TCheckBox;
- Hidden: TCheckBox;
- Readonly: TCheckBox;
- Archive: TCheckBox;
- Directory: TCheckBox;
- ExactAttr: TCheckBox;
- TabSheet3: TTabSheet;
- BeforeDate: TDateTimePicker;
- DateRangeChoice: TRadioGroup;
- AfterDate: TDateTimePicker;
- Label3: TLabel;
- Containing: TEdit;
- BeforeTime: TDateTimePicker;
- AfterTime: TDateTimePicker;
- FileSize: TGroupBox;
- SizeMax: TSpinEdit;
- Label8: TLabel;
- SizeMin: TSpinEdit;
- Label9: TLabel;
- Label10: TLabel;
- Label11: TLabel;
- BD: TCheckBox;
- BT: TCheckBox;
- AD: TCheckBox;
- AT: TCheckBox;
- IgnoreCase: TCheckBox;
- procedure FindButtonClick(Sender: TObject);
- procedure StopButtonClick(Sender: TObject);
- procedure FindFileFolderChange(Sender: TObject; const Folder: String;
- var IgnoreFolder: Boolean);
- procedure FindFileFileMatch(Sender: TObject; const Folder: String;
- const FileInfo: TSearchRec);
- procedure BrowseButtonClick(Sender: TObject);
- procedure FoundFilesColumnClick(Sender: TObject; Column: TListColumn);
- procedure FoundFilesCompare(Sender: TObject; Item1, Item2: TListItem;
- Data: Integer; var Compare: Integer);
- procedure FindFileSerachFinish(Sender: TObject);
- procedure FoundFilesDblClick(Sender: TObject);
- procedure FormCreate(Sender: TObject);
- procedure BDClick(Sender: TObject);
- procedure BTClick(Sender: TObject);
- procedure ADClick(Sender: TObject);
- procedure ATClick(Sender: TObject);
- procedure FindFileSearchBegin(Sender: TObject);
- procedure FormClose(Sender: TObject; var Action: TCloseAction);
- private
- Folders: Integer;
- StartTime: DWord;
- SortedColumn: Integer;
- Descending: Boolean;
- end;
-
- var
- MainForm: TMainForm;
-
- implementation
-
- {$R *.DFM}
-
- uses
- FileCtrl, ShellAPI;
-
- procedure TMainForm.FindButtonClick(Sender: TObject);
- begin
- // Fills FileFile properties
- FindFile.Threaded := Threaded.Checked;
- // - Name & Location
- with FindFile.Criteria.Files do
- begin
- FileName := Self.Filename.Text;
- Location := Self.Location.Text;
- Subfolders := Self.Subfolders.Checked;
- end;
- // - Containing Text
- with FindFile.Criteria.Content do
- begin
- Phrase := Containing.Text;
- IgnoreCase := Self.IgnoreCase.Checked;
- end;
- // - Attributes
- with FindFile.Criteria.Attribute do
- begin
- Attributes := [];
- if Archive.Checked then
- Attributes := Attributes + [ffArchive];
- if Readonly.Checked then
- Attributes := Attributes + [ffReadonly];
- if Hidden.Checked then
- Attributes := Attributes + [ffHidden];
- if System.Checked then
- Attributes := Attributes + [ffSystem];
- if Directory.Checked then
- Attributes := Attributes + [ffDirectory];
- ExactMatch := ExactAttr.Checked;
- end;
- // - Size ranges
- with FindFile.Criteria.Size do
- begin
- Min := SizeMin.Value * 1024; // KB -> byte
- Max := SizeMax.Value * 1024; // KB -> byte
- end;
- // - TimeStamp ranges
- with FindFile.Criteria.TimeStamp do
- begin
- AccessedBefore := 0;
- AccessedAfter := 0;
- ModifiedBefore := 0;
- ModifiedAfter := 0;
- CreatedBefore := 0;
- CreatedAfter := 0;
- case DateRangeChoice.ItemIndex of
- 0: begin // Created on
- if BD.Checked then
- CreatedBefore := BeforeDate.Date;
- if BT.Checked then
- CreatedBefore := CreatedBefore + BeforeTime.Time;
- if AD.Checked then
- CreatedAfter := AfterDate.Date;
- if AT.Checked then
- CreatedAfter := CreatedAfter + AfterTime.Time;
- end;
- 1: begin // Modified on
- if BD.Checked then
- ModifiedBefore := BeforeDate.Date;
- if BT.Checked then
- ModifiedBefore := ModifiedBefore + BeforeTime.Time;
- if AD.Checked then
- ModifiedAfter := AfterDate.Date;
- if AT.Checked then
- ModifiedAfter := ModifiedAfter + AfterTime.Time;
- end;
- 2: begin // Last Accessed on
- if BD.Checked then
- AccessedBefore := BeforeDate.Date;
- if BT.Checked then
- AccessedBefore := AccessedBefore + BeforeTime.Time;
- if AD.Checked then
- AccessedAfter := AfterDate.Date;
- if AT.Checked then
- AccessedAfter := AccessedAfter + AfterTime.Time;
- end;
- end;
- end;
- // Updates visual controls
- SortedColumn := -1;
- FoundFiles.SortType := stNone;
- FoundFiles.Items.BeginUpdate;
- FoundFiles.Items.Clear;
- FoundFiles.Items.EndUpdate;
- FindButton.Enabled := False;
- StopButton.Enabled := True;
- Animate.Active := True;
- // Begins search
- FindFile.Execute;
- end;
-
- procedure TMainForm.StopButtonClick(Sender: TObject);
- begin
- FindFile.Abort;
- end;
-
- procedure TMainForm.FindFileSearchBegin(Sender: TObject);
- begin
- Folders := 0;
- FoundFiles.ColumnClick := False;
- StartTime := GetTickCount;
- end;
-
- procedure TMainForm.FindFileSerachFinish(Sender: TObject);
- begin
- StatusBar.SimpleText := Format('%d folder(s) searched and %d file(s) found - %.3f second(s)',
- [Folders, FoundFiles.Items.Count, (GetTickCount - StartTime) / 1000]);
- if FindFile.Aborted then
- StatusBar.SimpleText := 'Search aborted - ' + StatusBar.SimpleText;
- Animate.Active := False;
- StopButton.Enabled := False;
- FindButton.Enabled := True;
- FoundFiles.ColumnClick := True;
- end;
-
- procedure TMainForm.FindFileFolderChange(Sender: TObject; const Folder: String;
- var IgnoreFolder: Boolean);
- begin
- Inc(Folders);
- StatusBar.SimpleText := Folder;
- if not FindFile.Threaded then
- Application.ProcessMessages;
- end;
-
- procedure TMainForm.FindFileFileMatch(Sender: TObject; const Folder: String;
- const FileInfo: TSearchRec);
- begin
- with FoundFiles.Items.Add do
- begin
- Caption := FileInfo.Name;
- SubItems.Add(Folder);
- if (FileInfo.Attr and faDirectory) <> 0 then
- SubItems.Add('Folder')
- else
- SubItems.Add(IntToStr((FileInfo.Size + 1023) div 1024) + 'KB');
- SubItems.Add(DateTimeToStr(FileDateToDateTime(FileInfo.Time)));
- end;
- if not FindFile.Threaded then
- Application.ProcessMessages;
- end;
-
- procedure TMainForm.BrowseButtonClick(Sender: TObject);
- var
- Folder: String;
- begin
- if Pos(';', Location.Text) = 0 then
- Folder := Location.Text;
- if SelectDirectory(Folder, [], 0) then
- Location.Text := Folder;
- end;
-
- procedure TMainForm.FoundFilesColumnClick(Sender: TObject; Column: TListColumn);
- begin
- TListView(Sender).SortType := stNone;
- if Column.Index <> SortedColumn then
- begin
- SortedColumn := Column.Index;
- Descending := False;
- end
- else
- Descending := not Descending;
- TListView(Sender).SortType := stText;
- end;
-
- procedure TMainForm.FoundFilesCompare(Sender: TObject; Item1,
- Item2: TListItem; Data: Integer; var Compare: Integer);
- begin
- if SortedColumn = 0 then
- Compare := CompareText(Item1.Caption, Item2.Caption)
- else if SortedColumn > 0 then
- Compare := CompareText(Item1.SubItems[SortedColumn-1],
- Item2.SubItems[SortedColumn-1]);
- if Descending then Compare := -Compare;
- end;
-
- procedure TMainForm.FoundFilesDblClick(Sender: TObject);
- begin
- if FoundFiles.Selected <> nil then
- with FoundFiles.Selected do
- ShellExecute(0, 'Open', PChar(Caption), nil, PChar(SubItems[0]), SW_NORMAL);
- end;
-
- procedure TMainForm.FormCreate(Sender: TObject);
- begin
- BeforeDate.Date := Date;
- BeforeDate.Time := 0;
- AfterDate.Date := Date;
- AfterDate.Time := 0;
- BeforeTime.Time := Time;
- BeforeTime.Date := 0;
- AfterTime.Time := Time;
- AfterTime.Date := 0;
- end;
-
- procedure TMainForm.BDClick(Sender: TObject);
- begin
- BeforeDate.Enabled := BD.Checked;
- end;
-
- procedure TMainForm.BTClick(Sender: TObject);
- begin
- BeforeTime.Enabled := BT.Checked;
- end;
-
- procedure TMainForm.ADClick(Sender: TObject);
- begin
- AfterDate.Enabled := AD.Checked;
- end;
-
- procedure TMainForm.ATClick(Sender: TObject);
- begin
- AfterTime.Enabled := AT.Checked;
- end;
-
- procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
- begin
- if FindFile.Busy then
- FindFile.Abort;
- end;
-
- end.
-