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   
Pascal/Delphi Source File  |  2002-08-01  |  9KB  |  314 lines

  1. unit Main;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.   ComCtrls, StdCtrls, ExtCtrls, Spin, FindFile;
  8.  
  9. type
  10.   TMainForm = class(TForm)
  11.     FindButton: TButton;
  12.     StopButton: TButton;
  13.     FindFile: TFindFile;
  14.     Animate: TAnimate;
  15.     FoundFiles: TListView;
  16.     StatusBar: TStatusBar;
  17.     Threaded: TCheckBox;
  18.     PageControl: TPageControl;
  19.     TabSheet1: TTabSheet;
  20.     Label1: TLabel;
  21.     Label2: TLabel;
  22.     Filename: TEdit;
  23.     Location: TEdit;
  24.     Subfolders: TCheckBox;
  25.     BrowseButton: TButton;
  26.     TabSheet2: TTabSheet;
  27.     Attributes: TGroupBox;
  28.     System: TCheckBox;
  29.     Hidden: TCheckBox;
  30.     Readonly: TCheckBox;
  31.     Archive: TCheckBox;
  32.     Directory: TCheckBox;
  33.     ExactAttr: TCheckBox;
  34.     TabSheet3: TTabSheet;
  35.     BeforeDate: TDateTimePicker;
  36.     DateRangeChoice: TRadioGroup;
  37.     AfterDate: TDateTimePicker;
  38.     Label3: TLabel;
  39.     Containing: TEdit;
  40.     BeforeTime: TDateTimePicker;
  41.     AfterTime: TDateTimePicker;
  42.     FileSize: TGroupBox;
  43.     SizeMax: TSpinEdit;
  44.     Label8: TLabel;
  45.     SizeMin: TSpinEdit;
  46.     Label9: TLabel;
  47.     Label10: TLabel;
  48.     Label11: TLabel;
  49.     BD: TCheckBox;
  50.     BT: TCheckBox;
  51.     AD: TCheckBox;
  52.     AT: TCheckBox;
  53.     IgnoreCase: TCheckBox;
  54.     procedure FindButtonClick(Sender: TObject);
  55.     procedure StopButtonClick(Sender: TObject);
  56.     procedure FindFileFolderChange(Sender: TObject; const Folder: String;
  57.       var IgnoreFolder: Boolean);
  58.     procedure FindFileFileMatch(Sender: TObject; const Folder: String;
  59.       const FileInfo: TSearchRec);
  60.     procedure BrowseButtonClick(Sender: TObject);
  61.     procedure FoundFilesColumnClick(Sender: TObject; Column: TListColumn);
  62.     procedure FoundFilesCompare(Sender: TObject; Item1, Item2: TListItem;
  63.       Data: Integer; var Compare: Integer);
  64.     procedure FindFileSerachFinish(Sender: TObject);
  65.     procedure FoundFilesDblClick(Sender: TObject);
  66.     procedure FormCreate(Sender: TObject);
  67.     procedure BDClick(Sender: TObject);
  68.     procedure BTClick(Sender: TObject);
  69.     procedure ADClick(Sender: TObject);
  70.     procedure ATClick(Sender: TObject);
  71.     procedure FindFileSearchBegin(Sender: TObject);
  72.     procedure FormClose(Sender: TObject; var Action: TCloseAction);
  73.   private
  74.     Folders: Integer;
  75.     StartTime: DWord;
  76.     SortedColumn: Integer;
  77.     Descending: Boolean;
  78.   end;
  79.  
  80. var
  81.   MainForm: TMainForm;
  82.  
  83. implementation
  84.  
  85. {$R *.DFM}
  86.  
  87. uses
  88.   FileCtrl, ShellAPI;
  89.  
  90. procedure TMainForm.FindButtonClick(Sender: TObject);
  91. begin
  92.   // Fills FileFile properties
  93.   FindFile.Threaded := Threaded.Checked;
  94.   // - Name & Location
  95.   with FindFile.Criteria.Files do
  96.   begin
  97.     FileName := Self.Filename.Text;
  98.     Location := Self.Location.Text;
  99.     Subfolders := Self.Subfolders.Checked;
  100.   end;
  101.   // - Containing Text
  102.   with FindFile.Criteria.Content do
  103.   begin
  104.     Phrase := Containing.Text;
  105.     IgnoreCase := Self.IgnoreCase.Checked;
  106.   end;
  107.   // - Attributes
  108.   with FindFile.Criteria.Attribute do
  109.   begin
  110.     Attributes := [];
  111.     if Archive.Checked then
  112.       Attributes := Attributes + [ffArchive];
  113.     if Readonly.Checked then
  114.       Attributes := Attributes + [ffReadonly];
  115.     if Hidden.Checked then
  116.       Attributes := Attributes + [ffHidden];
  117.     if System.Checked then
  118.       Attributes := Attributes + [ffSystem];
  119.     if Directory.Checked then
  120.       Attributes := Attributes + [ffDirectory];
  121.     ExactMatch := ExactAttr.Checked;
  122.   end;
  123.   // - Size ranges
  124.   with FindFile.Criteria.Size do
  125.   begin
  126.     Min := SizeMin.Value * 1024; // KB -> byte
  127.     Max := SizeMax.Value * 1024; // KB -> byte
  128.   end;
  129.   // - TimeStamp ranges
  130.   with FindFile.Criteria.TimeStamp do
  131.   begin
  132.     AccessedBefore := 0;
  133.     AccessedAfter := 0;
  134.     ModifiedBefore := 0;
  135.     ModifiedAfter := 0;
  136.     CreatedBefore := 0;
  137.     CreatedAfter := 0;
  138.     case DateRangeChoice.ItemIndex of
  139.       0: begin // Created on
  140.            if BD.Checked then
  141.              CreatedBefore := BeforeDate.Date;
  142.            if BT.Checked then
  143.              CreatedBefore := CreatedBefore + BeforeTime.Time;
  144.            if AD.Checked then
  145.              CreatedAfter := AfterDate.Date;
  146.            if AT.Checked then
  147.              CreatedAfter := CreatedAfter + AfterTime.Time;
  148.          end;
  149.       1: begin // Modified on
  150.            if BD.Checked then
  151.              ModifiedBefore := BeforeDate.Date;
  152.            if BT.Checked then
  153.              ModifiedBefore := ModifiedBefore + BeforeTime.Time;
  154.            if AD.Checked then
  155.              ModifiedAfter := AfterDate.Date;
  156.            if AT.Checked then
  157.              ModifiedAfter := ModifiedAfter + AfterTime.Time;
  158.          end;
  159.       2: begin // Last Accessed on
  160.            if BD.Checked then
  161.              AccessedBefore := BeforeDate.Date;
  162.            if BT.Checked then
  163.              AccessedBefore := AccessedBefore + BeforeTime.Time;
  164.            if AD.Checked then
  165.              AccessedAfter := AfterDate.Date;
  166.            if AT.Checked then
  167.              AccessedAfter := AccessedAfter + AfterTime.Time;
  168.          end;
  169.     end;
  170.   end;
  171.   // Updates visual controls
  172.   SortedColumn := -1;
  173.   FoundFiles.SortType := stNone;
  174.   FoundFiles.Items.BeginUpdate;
  175.   FoundFiles.Items.Clear;
  176.   FoundFiles.Items.EndUpdate;
  177.   FindButton.Enabled := False;
  178.   StopButton.Enabled := True;
  179.   Animate.Active := True;
  180.   // Begins search
  181.   FindFile.Execute;
  182. end;
  183.  
  184. procedure TMainForm.StopButtonClick(Sender: TObject);
  185. begin
  186.   FindFile.Abort;
  187. end;
  188.  
  189. procedure TMainForm.FindFileSearchBegin(Sender: TObject);
  190. begin
  191.   Folders := 0;
  192.   FoundFiles.ColumnClick := False;
  193.   StartTime := GetTickCount;
  194. end;
  195.  
  196. procedure TMainForm.FindFileSerachFinish(Sender: TObject);
  197. begin
  198.   StatusBar.SimpleText := Format('%d folder(s) searched and %d file(s) found - %.3f second(s)',
  199.     [Folders, FoundFiles.Items.Count, (GetTickCount - StartTime) / 1000]);
  200.   if FindFile.Aborted then
  201.     StatusBar.SimpleText := 'Search aborted - ' + StatusBar.SimpleText;
  202.   Animate.Active := False;
  203.   StopButton.Enabled := False;
  204.   FindButton.Enabled := True;
  205.   FoundFiles.ColumnClick := True;
  206. end;
  207.  
  208. procedure TMainForm.FindFileFolderChange(Sender: TObject; const Folder: String;
  209.   var IgnoreFolder: Boolean);
  210. begin
  211.   Inc(Folders);
  212.   StatusBar.SimpleText := Folder;
  213.   if not FindFile.Threaded then
  214.     Application.ProcessMessages;
  215. end;
  216.  
  217. procedure TMainForm.FindFileFileMatch(Sender: TObject; const Folder: String;
  218.   const FileInfo: TSearchRec);
  219. begin
  220.   with FoundFiles.Items.Add do
  221.   begin
  222.     Caption := FileInfo.Name;
  223.     SubItems.Add(Folder);
  224.     if (FileInfo.Attr and faDirectory) <> 0 then
  225.       SubItems.Add('Folder')
  226.     else
  227.       SubItems.Add(IntToStr((FileInfo.Size + 1023) div 1024) + 'KB');
  228.     SubItems.Add(DateTimeToStr(FileDateToDateTime(FileInfo.Time)));
  229.   end;
  230.   if not FindFile.Threaded then
  231.     Application.ProcessMessages;
  232. end;
  233.  
  234. procedure TMainForm.BrowseButtonClick(Sender: TObject);
  235. var
  236.   Folder: String;
  237. begin
  238.   if Pos(';', Location.Text) = 0 then
  239.     Folder := Location.Text;
  240.   if SelectDirectory(Folder, [], 0) then
  241.     Location.Text := Folder;
  242. end;
  243.  
  244. procedure TMainForm.FoundFilesColumnClick(Sender: TObject; Column: TListColumn);
  245. begin
  246.   TListView(Sender).SortType := stNone;
  247.   if Column.Index <> SortedColumn then
  248.   begin
  249.     SortedColumn := Column.Index;
  250.     Descending := False;
  251.   end
  252.   else
  253.     Descending := not Descending;
  254.   TListView(Sender).SortType := stText;
  255. end;
  256.  
  257. procedure TMainForm.FoundFilesCompare(Sender: TObject; Item1,
  258.   Item2: TListItem; Data: Integer; var Compare: Integer);
  259. begin
  260.   if SortedColumn = 0 then
  261.     Compare := CompareText(Item1.Caption, Item2.Caption)
  262.   else if SortedColumn > 0 then
  263.     Compare := CompareText(Item1.SubItems[SortedColumn-1],
  264.                            Item2.SubItems[SortedColumn-1]);
  265.   if Descending then Compare := -Compare;
  266. end;
  267.  
  268. procedure TMainForm.FoundFilesDblClick(Sender: TObject);
  269. begin
  270.   if FoundFiles.Selected <> nil then
  271.     with FoundFiles.Selected do
  272.       ShellExecute(0, 'Open', PChar(Caption), nil, PChar(SubItems[0]), SW_NORMAL);
  273. end;
  274.  
  275. procedure TMainForm.FormCreate(Sender: TObject);
  276. begin
  277.   BeforeDate.Date := Date;
  278.   BeforeDate.Time := 0;
  279.   AfterDate.Date := Date;
  280.   AfterDate.Time := 0;
  281.   BeforeTime.Time := Time;
  282.   BeforeTime.Date := 0;
  283.   AfterTime.Time := Time;
  284.   AfterTime.Date := 0;
  285. end;
  286.  
  287. procedure TMainForm.BDClick(Sender: TObject);
  288. begin
  289.   BeforeDate.Enabled := BD.Checked;
  290. end;
  291.  
  292. procedure TMainForm.BTClick(Sender: TObject);
  293. begin
  294.   BeforeTime.Enabled := BT.Checked;
  295. end;
  296.  
  297. procedure TMainForm.ADClick(Sender: TObject);
  298. begin
  299.   AfterDate.Enabled := AD.Checked;
  300. end;
  301.  
  302. procedure TMainForm.ATClick(Sender: TObject);
  303. begin
  304.   AfterTime.Enabled := AT.Checked;
  305. end;
  306.  
  307. procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
  308. begin
  309.   if FindFile.Busy then
  310.     FindFile.Abort;
  311. end;
  312.  
  313. end.
  314.