Валерий Борисок - Delphi. Трюки и эффекты

Тут можно читать онлайн Валерий Борисок - Delphi. Трюки и эффекты - бесплатно ознакомительный отрывок. Жанр: Программы. Здесь Вы можете читать ознакомительный отрывок из книги онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Delphi. Трюки и эффекты
  • Автор:
  • Жанр:
  • Издательство:
    неизвестно
  • Год:
    неизвестен
  • ISBN:
    нет данных
  • Рейтинг:
    4.11/5. Голосов: 91
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

Валерий Борисок - Delphi. Трюки и эффекты краткое содержание

Delphi. Трюки и эффекты - описание и краткое содержание, автор Валерий Борисок, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

«Delphi. Трюки и эффекты», как и все издания данной серии, адресована тем, кто хочет научиться делать с помощью уже знакомых программных пакетов новые, интересные вещи. В первой части книги многое говорится о среде разработки Delphi (самых последних версий) и программировании на языке Object Pascal. Благодаря этому издание подходит и новичкам, и начинающим программистам. Вторая (основная) часть книги описывает удивительные возможности, скрытые в языке, и на примерах учит читателя программистским фокусам – от «мышек-невидимок» и «непослушных окон» до воспроизведения МРЗ и управления офисными программами Word и Excel из приложений Delphi. Купив эту книгу, вы пройдете непростой путь к вершинам программистского мастерства весело и интересно.

Delphi. Трюки и эффекты - читать онлайн бесплатно ознакомительный отрывок

Delphi. Трюки и эффекты - читать книгу онлайн бесплатно (ознакомительный отрывок), автор Валерий Борисок
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Возможный результат поиска с использованием функции SearchlnFolder приводится на рис. 4.5.

Рис. 4.5. Поиск в заданной папке

Пример вызова функции SearchlnFolder (для показанного на рис. 4.5 приложения) приведен в листинге 4.25.

...

Листинг 4.25.

Использование функции SearchlnFolder

//Запуск поиска файла в заданной папке

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;

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

В листинге 4.26 приводится одна из возможных реализаций рекурсивного поиска по дереву каталогов. Алгоритм поиска работает следующим образом.

1. Выполняется поиск в папке folder(все найденные файлы или папки добавляются в список names).

2. Функция SearchlnTree вызывается для каждого подкаталога BfoLder для продолжения поиска в поддереве, определяемом подкаталогом.

...

Листинг 4.26.

Поиск по дереву каталогов

function SearchInTree(folder, mask: String; flags: DWORD;

names: TStrings; addpath: Boolean = False): Boolean;

var

hSearch: THandle;

FindData: WIN32_FIND_DATA;

bRes: Boolean; //Если равен True, то нашли хотя бы один файл или каталог

begin

//Осуществляем поиск в текущей папке

bRes := SearchInFolder(folder, mask, flags, names, addpath);

//Продолжим поиск в каждом из подкаталогов

hSearch := FindFirstFile(PAnsiChar(folder + \'\*\'), FindData);

if (hSearch <> INVALID_HANDLE_VALUE) then

begin

repeat

if (String(FindData.cFileName) <> \'..\') and

(String(FindData.cFileName) <> \'.\') then

//Пропускаем . и ..

begin

if (FindData.dwFileAttributes and

FILE_ATTRIBUTE_DIRECTORY <> 0)

then

//Нашли подкаталог – выполним в нем поиск

if SearchInTree(folder + \'\\' + String(FindData.cFileName),

mask, flags, names, addpath)

then

bRes := True;

end;

until FindNextFile(hSearch, FindData) = False;

FindClose(hSearch);

end;

SearchInTree := bRes;

end;

В функции SearchlnTree не используется просмотр каталога folder вручную (при помощи API-функций) из соображений эффективности. Если захотите, можете реализовать поиск подкаталогов при помощи функции SearchlnFolder. Правда, при этом нужно будет завести дополнительный список (TStringList) для сохранения найденных в текущем каталоге подкаталогов. Элементы списка будут использоваться только один раз: для поиска в подкаталогах.

Возможный результат поиска с использованием функции SearchlnTree приводится на рис. 4.6.

Рис. 4.6. Поиск по дереву каталогов

С небольшими модификациями алгоритм рекурсивного обхода дерева каталогов, реализованный в листинге 4.25, можно использовать и при операциях, отличных от простого поиска: например, при копировании или удалении дерева каталогов. Для этого достаточно выполнять нужные операции над каждым найденным объектом.

Построение дерева каталогов

Рассмотрим довольно интересный пример, основанный на использовании функции поиска SearchlnFolder, – построение дерева каталогов для определенного диска (рис. 4.7).

Рис. 4.7. Дерево каталогов

Для простоты (и чтобы не отвлекать внимания от построения дерева) диск задается в программе жестко. При необходимости это можно легко исправить (как определять диски, вы уже знаете).

Рассмотрим работу приложения по порядку. Элемент управления TreeView на форме имеет имя tree. Содержимое списка изображений (ImageList), используемого деревом, приведено на рис. 4.8.

Рис. 4.8. Изображения для элементов дерева

Первый элемент дерева (соответствует диску) образуется при создании формы (листинг 4.27).

...

Листинг 4.27.

Создание первого элемента дерева – диска

procedure TForm3.FormCreate(Sender: TObject);

begin

//Корневой элемент дерева (диск)

root := tree.Items.Add(tree.Items.GetFirstNode, \'C:\');

root.ImageIndex := 0;

root.SelectedIndex := 0;

SetExpanded(root, False);

end;

Здесь и далее в примере root позволяет быстро получать доступ к корневому элементу дерева. Используемая в листинге 4.27 процедура применяется для установки состояния элементов дерева (листинг 4.28).

...

Листинг 4.28.

Установка состояния элемента дерева

procedure TForm3.SetExpanded(Node: TTreeNode; isExpanded: Boolean);

begin

if isExpanded then

begin

//Подготавливаем элемент к загрузке содержимого каталога

Node.Data := Pointer(1);

Node.DeleteChildren;

end

else

begin

//Содержимое каталога не прочитано (или его следует обновить)

Node.Data := Pointer(0);

Node.Collapse(False);

Node.DeleteChildren;

tree.Items.AddChild(Node, \'\'); //Фиктивный элемент(чтобы

//отображался "+", позволяющий

//развернуть элемент)

end;

end;

Если после создания элементов дерева процедура SetExpanded вызывается с параметром isExpanded, равным False (как в листинге 4.27), то для переданного в процедуру элемента дерева создается фиктивный дочерний элемент. Это делается для того, чтобы не зачитывать содержимое каждого не развернутого еще элемента дерева (для папок с большим количество файлов программа будет сильно «тормозить»). А так у каждого еще не развернутого элемента отображается символ +, позволяющий развернуть его в нужный момент. При этом не нужно забывать удалять созданный фиктивный элемент дерева (что и делает SetExpanded с параметром isExpanded, равным True).

Каждый не развернутый еще элемент дерева помечается значением поля Node. Data, равным 0. Каждый элемент, содержимое которого уже прочитано с диска, помечается значением поля Node. Data, равным 1. Для проверки, было ли прочитано содержимое каталога, соответствующего элементу дерева, используется простая функция IsExpanded (листинг 4.29).

...

Листинг 4.29.

Проверка, загружено ли содержимое каталога

function TForm3.IsExpanded(Node: TTreeNode): Boolean;

begin

IsExpanded := Integer(Node.Data) = 1;

end;

Загрузка содержимого каталога и одновременное формирование дочерних элементов в дереве происходят при разворачивании элемента дерева (листинг 4.30).

...

Листинг 4.30.

Загрузка содержимого каталога

procedure TForm3.treeExpanding(Sender: TObject; Node: TTreeNode;

var AllowExpansion: Boolean);

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Валерий Борисок читать все книги автора по порядку

Валерий Борисок - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Delphi. Трюки и эффекты отзывы


Отзывы читателей о книге Delphi. Трюки и эффекты, автор: Валерий Борисок. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x