home *** CD-ROM | disk | FTP | other *** search
/ Chip 2002 March / Chip_2002-03_cd1.bin / zkuste / delphi / kompon / d13456 / FINDFILE.ZIP / Demo32 / Main32.pas < prev   
Pascal/Delphi Source File  |  2000-04-15  |  8KB  |  285 lines

  1. unit Main32;
  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 FindFileNewFolder(Sender: TObject; Folder: String;
  57.       var IgnoreFolder: Boolean);
  58.     procedure FindFileFound(Sender: TObject; Folder: String;
  59.       var 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 FindFileComplete(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.   private
  72.     Folders: Integer;
  73.     StartTime: DWord;
  74.     SortedColumn: Integer;
  75.     Descending: Boolean;
  76.   end;
  77.  
  78. var
  79.   MainForm: TMainForm;
  80.  
  81. implementation
  82.  
  83. {$R *.DFM}
  84.  
  85. uses
  86.   FileCtrl, ShellAPI;
  87.  
  88. procedure TMainForm.FindButtonClick(Sender: TObject);
  89. begin
  90.   Folders := 0;
  91.   StartTime := GetTickCount;
  92.   // Fills FileFile properties
  93.   FindFile.Threaded := Threaded.Checked;
  94.   // - Name & Location
  95.   FindFile.Filename := Filename.Text;
  96.   FindFile.Location := Location.Text;
  97.   FindFile.Subfolders := Subfolders.Checked;
  98.   // - Containing Text
  99.   FindFile.Containing := Containing.Text;
  100.   FindFile.IgnoreCase := IgnoreCase.Checked;
  101.   // - Attributes
  102.   FindFile.Attributes := [];
  103.   if Archive.Checked then
  104.     FindFile.Attributes := FindFile.Attributes + [ffArchive];
  105.   if Readonly.Checked then
  106.     FindFile.Attributes := FindFile.Attributes + [ffReadonly];
  107.   if Hidden.Checked then
  108.     FindFile.Attributes := FindFile.Attributes + [ffHidden];
  109.   if System.Checked then
  110.     FindFile.Attributes := FindFile.Attributes + [ffSystem];
  111.   if Directory.Checked then
  112.     FindFile.Attributes := FindFile.Attributes + [ffDirectory];
  113.   FindFile.ExactAttribute := ExactAttr.Checked;
  114.   // - Size ranges
  115.   FindFile.SizeMin := SizeMin.Value * 1024; // KB -> byte
  116.   FindFile.SizeMax := SizeMax.Value * 1024; // KB -> byte
  117.   // - Date ranges
  118.   FindFile.AccessedBefore := 0;
  119.   FindFile.AccessedAfter := 0;
  120.   FindFile.ModifiedBefore := 0;
  121.   FindFile.ModifiedAfter := 0;
  122.   FindFile.CreatedBefore := 0;
  123.   FindFile.CreatedAfter := 0;
  124.   case DateRangeChoice.ItemIndex of
  125.     0: begin // Created on
  126.          if BD.Checked then
  127.            FindFile.CreatedBefore := BeforeDate.Date;
  128.          if BT.Checked then
  129.            FindFile.CreatedBefore := FindFile.CreatedBefore + BeforeTime.Time;
  130.          if AD.Checked then
  131.            FindFile.CreatedAfter := AfterDate.Date;
  132.          if AT.Checked then
  133.            FindFile.CreatedAfter := FindFile.CreatedAfter + AfterTime.Time;
  134.        end;
  135.     1: begin // Modified on
  136.          if BD.Checked then
  137.            FindFile.ModifiedBefore := BeforeDate.Date;
  138.          if BT.Checked then
  139.            FindFile.ModifiedBefore := FindFile.ModifiedBefore + BeforeTime.Time;
  140.          if AD.Checked then
  141.            FindFile.ModifiedAfter := AfterDate.Date;
  142.          if AT.Checked then
  143.            FindFile.ModifiedAfter := FindFile.ModifiedAfter + AfterTime.Time;
  144.        end;
  145.     2: begin // Last Accessed on
  146.          if BD.Checked then
  147.            FindFile.AccessedBefore := BeforeDate.Date;
  148.          if BT.Checked then
  149.            FindFile.AccessedBefore := FindFile.AccessedBefore + BeforeTime.Time;
  150.          if AD.Checked then
  151.            FindFile.AccessedAfter := AfterDate.Date;
  152.          if AT.Checked then
  153.            FindFile.AccessedAfter := FindFile.AccessedAfter + AfterTime.Time;
  154.        end;
  155.   end;
  156.   // Updates visual controls
  157.   SortedColumn := -1;
  158.   FoundFiles.SortType := stNone;
  159.   FoundFiles.Items.BeginUpdate;
  160.   FoundFiles.Items.Clear;
  161.   FoundFiles.Items.EndUpdate;
  162.   FindButton.Enabled := False;
  163.   StopButton.Enabled := True;
  164.   Animate.Active := True;
  165.   // Begins search
  166.   FindFile.Execute;
  167. end;
  168.  
  169. procedure TMainForm.StopButtonClick(Sender: TObject);
  170. begin
  171.   FindFile.Abort;
  172. end;
  173.  
  174. procedure TMainForm.FindFileComplete(Sender: TObject);
  175. begin
  176.   Animate.Active := False;
  177.   StopButton.Enabled := False;
  178.   FindButton.Enabled := True;
  179.   StatusBar.SimpleText := Format('%d files found in %d folders (%d ms)',
  180.     [FoundFiles.Items.Count, Folders, GetTickCount - StartTime]);
  181.   if FindFile.Aborted then
  182.     StatusBar.SimpleText := 'Search aborted - ' + StatusBar.SimpleText;
  183. end;
  184.  
  185. procedure TMainForm.FindFileNewFolder(Sender: TObject; Folder: String;
  186.   var IgnoreFolder: Boolean);
  187. begin
  188.   Inc(Folders);
  189.   StatusBar.SimpleText := Folder;
  190.   if not FindFile.Threaded then
  191.     Application.ProcessMessages;
  192. end;
  193.  
  194. procedure TMainForm.FindFileFound(Sender: TObject; Folder: String;
  195.   var FileInfo: TSearchRec);
  196. begin
  197.   with FoundFiles.Items.Add do
  198.   begin
  199.     Caption := FileInfo.Name;
  200.     SubItems.Add(Folder);
  201.     if (FileInfo.Attr and faDirectory) <> 0 then
  202.       SubItems.Add('Folder')
  203.     else
  204.       SubItems.Add(IntToStr((FileInfo.Size + 1023) div 1024) + 'KB');
  205.     SubItems.Add(DateTimeToStr(FileDateToDateTime(FileInfo.Time)));
  206.   end;
  207.   if not FindFile.Threaded then
  208.     Application.ProcessMessages;
  209. end;
  210.  
  211. procedure TMainForm.BrowseButtonClick(Sender: TObject);
  212. var
  213.   Dir: String;
  214. begin
  215.   if Pos(';', Location.Text) = 0 then
  216.     Dir := Location.Text;
  217.   if SelectDirectory(Dir, [], 0) then
  218.     Location.Text := Dir;
  219. end;
  220.  
  221. procedure TMainForm.FoundFilesColumnClick(Sender: TObject; Column: TListColumn);
  222. begin
  223.   TListView(Sender).SortType := stNone;
  224.   if Column.Index <> SortedColumn then
  225.   begin
  226.     SortedColumn := Column.Index;
  227.     Descending := False;
  228.   end
  229.   else
  230.     Descending := not Descending;
  231.   TListView(Sender).SortType := stText;
  232. end;
  233.  
  234. procedure TMainForm.FoundFilesCompare(Sender: TObject; Item1,
  235.   Item2: TListItem; Data: Integer; var Compare: Integer);
  236. begin
  237.   if SortedColumn = 0 then
  238.     Compare := CompareText(Item1.Caption, Item2.Caption)
  239.   else if SortedColumn > 0 then
  240.     Compare := CompareText(Item1.SubItems[SortedColumn-1],
  241.                            Item2.SubItems[SortedColumn-1]);
  242.   if Descending then Compare := -Compare;
  243. end;
  244.  
  245. procedure TMainForm.FoundFilesDblClick(Sender: TObject);
  246. begin
  247.   if FoundFiles.Selected <> nil then
  248.     with FoundFiles.Selected do
  249.       ShellExecute(0, 'Open', PChar(Caption), nil, PChar(SubItems[0]), SW_NORMAL);
  250. end;
  251.  
  252. procedure TMainForm.FormCreate(Sender: TObject);
  253. begin
  254.   BeforeDate.Date := Date;
  255.   BeforeDate.Time := 0;
  256.   AfterDate.Date := Date;
  257.   AfterDate.Time := 0;
  258.   BeforeTime.Time := Time;
  259.   BeforeTime.Date := 0;
  260.   AfterTime.Time := Time;
  261.   AfterTime.Date := 0;
  262. end;
  263.  
  264. procedure TMainForm.BDClick(Sender: TObject);
  265. begin
  266.   BeforeDate.Enabled := BD.Checked;
  267. end;
  268.  
  269. procedure TMainForm.BTClick(Sender: TObject);
  270. begin
  271.   BeforeTime.Enabled := BT.Checked;
  272. end;
  273.  
  274. procedure TMainForm.ADClick(Sender: TObject);
  275. begin
  276.   AfterDate.Enabled := AD.Checked;
  277. end;
  278.  
  279. procedure TMainForm.ATClick(Sender: TObject);
  280. begin
  281.   AfterTime.Enabled := AT.Checked;
  282. end;
  283.  
  284. end.
  285.