unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Search;

type
  TForm2 = class(TForm)
    Label1: TLabel;
    txtFolder: TEdit;
    txtMask: TEdit;
    Label2: TLabel;
    GroupBox1: TGroupBox;
    chkDirs: TCheckBox;
    chkHidden: TCheckBox;
    chkSystem: TCheckBox;
    chkReadOnly: TCheckBox;
    lstFiles: TListBox;
    Button1: TButton;
    Button2: TButton;
    chkArchive: TCheckBox;
    lblFound: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

//Запуск поиска файла в заданной папке
procedure TForm2.Button1Click(Sender: TObject);
var
  flags: DWORD;
begin
  //Формируем набор атрибутов (по установленным галочкам на форме)
  flags := 0;
  if (chkDirs.Checked) then flags := flags or FILE_ATTRIBUTE_DIRECTORY;
  if (chkHidden.Checked) then flags := flags or FILE_ATTRIBUTE_HIDDEN;
  if (chkSystem.Checked) then flags := flags or FILE_ATTRIBUTE_SYSTEM;
  if (chkReadOnly.Checked) then flags := flags or FILE_ATTRIBUTE_READONLY;
  if (chkArchive.Checked) then flags := flags or FILE_ATTRIBUTE_ARCHIVE;

  lblFound.Caption := 'Поиск...';
  lstFiles.Clear;
  Refresh;
  //Поиск (файлы записываются прямо в список на форме)
  if not SearchInFolder(txtFolder.Text, txtMask.Text, flags,
                        lstFiles.Items)
  then
    lblFound.Caption := 'Поиск не дал результатов'
  else
    lblFound.Caption := 'Найдено объектов: ' + IntToStr(lstFiles.Count);
end;

//Запуск рекурсивного поиска файла в дереве каталогов
procedure TForm2.Button2Click(Sender: TObject);
var
  flags: DWORD;
begin
  //Формируем набор атрибутов (по установленным галочкам на форме)
  flags := 0;
  if (chkDirs.Checked) then flags := flags or FILE_ATTRIBUTE_DIRECTORY;
  if (chkHidden.Checked) then flags := flags or FILE_ATTRIBUTE_HIDDEN;
  if (chkSystem.Checked) then flags := flags or FILE_ATTRIBUTE_SYSTEM;
  if (chkReadOnly.Checked) then flags := flags or FILE_ATTRIBUTE_READONLY;
  if (chkArchive.Checked) then flags := flags or FILE_ATTRIBUTE_ARCHIVE;

  lblFound.Caption := 'Поиск...';
  lstFiles.Clear;
  Refresh;
  //Поиск (файлы записываются прямо в список на форме)
  if not SearchInTree(txtFolder.Text, txtMask.Text, flags,
                      lstFiles.Items, True)
  then
    lblFound.Caption := 'Поиск не дал результатов'
  else
    lblFound.Caption := 'Найдено объектов: ' + IntToStr(lstFiles.Count);
end;

end.
