Рассмотренный в разд. 10.6.1 пример может использоваться как фрагмент самых различных приложений, в которых пользователю надо предоставить возможность выбора и доступа к файлам, удовлетворяющим некоторым критериям. Правда, в этом приложении введены только критерии по дате и размерам файлов. И нет более существенного критерия - шаблона файлов. Это связано с принятым алгоритмом поиска. Для того чтобы охватить поиском все вложенные папки, поиск ведется с шаблоном "*.*". И тут уже не остается места для шаблона файла. Рассмотрим возможности задания шаблона файла. Первый самый простой вариант - заменить в процедуре ViewDir оператор

ires := FindFirst('*.* 1, faAnyFile, SR) ;

оператором

ires := FindFirst(Dir, faAnyFile, SR) ;

Тем самым отсечется поиск во вложенных папках, но зато в заданной пользователем папке будет проводиться поиск с учетом заданного шаблона файлов. Правда, для открытия пользователем какого-то из найденных файлов надо еще несколько переделать процедуру TreeViewlDblClick.

Второй вариант - дополнить в процедуре ViewDir проверку условий, которым удовлетворяют файлы, проверкой соответствия их шаблону. Это несколько усложнит код, так как надо будет воспроизвести принятую в Windows методику обработки шаблонов. И третий вариант - изменить алгоритм поиска. Можно в каждой папке сначала проводить поиск файлов по заданному шаблону, а затем проводить поиск вложенных папок и рекурсивно вызывать в них аналогичный поиск. Правда, это затянет время, так как, фактически, потребует двойного поиска. Но о времени поиска будет сказано позднее. А пока рассмотрим подобный пример поиска с учетом шаблона файлов. Он содержится на приложенном к книге диске в каталоге Files в проекте PFind2.

Форма проекта во время выполнения показана на рис. 10.7. Она отличается от показанной ранее на рис. 10.6 только наличием окна редактирования Edit с именем EFileName, в котором пользователь может задавать шаблон файлов. Например, "*.txt" или "Отчет*.doc".

Рис. 10.7

Окно приложения PFind2

10.6.2 Поиск по шаблонам по всему дереву каталогов

Код приложения отличается от рассмотренного выше в проекте PFind только процедурой ViewDir, которая имеет вид:

procedure TForml.ViewDir(Dir: string;
Node: TTreeNode);
// основная процедура поиска var SR: TSearchRec;
ires, TBegin: integer;
NewNode, PNode:- TTreeNode;

ladd: boolean; // указывает, надо ли включать в дерево данный файл begin

// смена каталога, чтобы не задавать полный путь к файлам ChDir(Dir) ;

// добавление узла с именем данного каталога

PNode := TreeViewl.Items.AddChild(Node, Dir); // задание пиктограммы закрытой папки

PNode.ImageIndex := 0;

PNode.Selectedlndex := PNode.Imagelndex; // начало поиска файлов, удовлетворяющих шаблону

ires := FindFirst(EFileName.Text, faHidden+faSysFile, SR) ; while ires = 0 do

begin ladd := true;

if ((SR.Attr and faDirectory) = 0) then begin // проверка условий, наложенных на файл // проверка даты

case RadioGroupl.Itemlndex of 0: TBegin := 0;
1: TBegin := DateTimeToFileDate(Date - 7);

|Следующая страница ⇒

Приемы программирования в Delphi на основе VCL



Новости за месяц

  • Июнь
    2020
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31