home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2003 February
/
Chip_2003-02_cd1.bin
/
zkuste
/
delphi
/
kompon
/
d13456
/
FINDFILE.ZIP
/
Demo
/
Main.pas
< prev
Wrap
Pascal/Delphi Source File
|
2002-08-01
|
9KB
|
314 lines
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.