Смекни!
smekni.com

Файловый менеджер (стр. 3 из 7)

Обработчик события OnClick обеспечивает реакцию на щелчок на изображении некоторой папки. Задача обработчика – вызов процедуры перерисовки списка файлов в соответствии с изменившемся текущим каталогом.

Сортировка элементов дерева, осуществляется стандартным способом: путем включения условия сравнения в обработчик события OnCompare.

II. ListView1 : TListView

Визуальный объект имитирует список файлов и каталогов и изменяет свою структуру всякий раз, когда меняется текущая директория. Основное событие, участвующее в формировании - OnDoubleClick. Оно возникает при двойном щелчке на одном из пунктов списка, и в случае если им является папка, обработчик изменяет текущую директорию и вызывает функция переформирования элементов ListView.

Сортировка аналогично TreeViewосуществляется вписыванием нужного условия по событию OnCompare. А вот само условие сравнение может меняться и зависит от глобальных переменных ColumnToSort и Direct. Изменение колонки сортировки и направления может происходить как из меню, но чаще путем клика на заголовке столбца. Для этой ситуации предназначен обработчик события – OnColumnClick. Извлекающий данные о новом сортируемом столбце и вызывающий процедуру пересортировки списка – AlphaSort.

Еще одним важным событием для списка файлов менеджера является OnEdited, возникающее по окончанию переименования некоторого элемента. Обработчик предусматривает вызов процедуры переименования файла, которая в случае успеха позволяет переименовать узел, в случае неудачи имя узла остается неизменным.

III. StatusBar1 : TStatusBar

Этот компонент служит для вывода справочной информации, вывод которой осуществляется в пользовательских функциях: ViewFailAndFolderInListView и UpdateAll.

IV. Элементы управления MainMenu1 : TMainMenu, ControlBar1 : TControlBarи PopupMenu1 : TPopupMenu.

Элементы управления содержат схожие группы команд и позволяют пользователю влиять на работу приложения.

Работа компонента MainMenuорганизуется обработкой нажатий на отдельные пункты меню, как-то «Создать папку», «Удалить», «Переименовать» и т.д. Обработчики нажатий, как правило, содержат лишь вызов соответствующих процедур. ControlBar1 и PopupMenu1 в основном дублируют пункты меню и содержат аналогичные обработчики. Они введены для удобства пользователя и более быстрому доступу к отдельным командам.

Эти компоненты отличаются лишь способом динамического формирования меню. Для ControlBar1, правда, вообще отсутствуют какие-либо изменения, а вот MainMenu1 и PopupMenu1 меняют состав своих компонентов. Для MainMenu1 осуществляется динамического отслеживание активных компонентов и при открытии группы команд происходит отключение (подсвечивание блеклым светом) тех из них, которые не могут быть доступны в текущий момент. Так как компонент PopupMenu1 представляет собой довольно длинный линейный список команд, закрывающий собой большую часть экрана, ненужные действия просто изымаются из всплывающего меню. Пользователь видит лишь те, которые возможны в текущий момент.

3.1Дополнительные возможности

3.1.1Копирование/перемещение перетаскиванием

Копирование/перемещение осуществляется перетаскиванием между двумя компонентами ListViewи TreeView. Для осуществления такой возможности используются 3 события в каждом из компонентов: OnMouseDown, OnDragOverи OnDragDrop (расставлены в порядке использования). Первое из них начинает процесс перетаскивания, а именно: проверяет нажата ли левая клавиша на компоненте, осуществляет распознавание типа перетаскивания (копирование/перемещения) путем анализа нажатия клавиши CTRL, начинает перетаскивание методом BeginDrag.

Событие OnDragOver возникает при каждый раз при перемещении перетаскиваемого элемента по объекту. Здесь необходимо определить возможность получения элемента, путем анализа источника и места помещения в приемнике.

Наступление события OnDragDropозначает окончание перетаскивания. В обработчике анализируются перемещенный элемент и место его опускания. В соответствии с этими данными, а также производимой операцией, сохраненной в глобальной переменной обработчиком OnMouseDown, осуществляется заполнение буферов frombufи tobufи вызов FileAndFolderOperation с соответствующим кодом.

3.1.2 Работа с дискетами и дисками

Работа с дискетами и дисками осложнена тем, что отсутствие носителя информации приводит к неоправданному обращению к приводу и появлению различных информационных сообщений на экране, что, безусловно, раздражает пользователя, не работающего с дискетой/диском. Для исключения таких ситуаций для приводов со сменными носителями предусмотрена глобальная переменная DiskIn в виде перечисления. Она включает в себя буквы тех приводов в которые действительно вставлены носители. Проверка таким образом наличия диска/дискеты, необходимая во многих функциях работы с деревом, вроде обновления и т.д, заключается в обращении к этой глобальной переменной. Помещение букв носителей в это множество осуществляется при удачном обращении к приводу со вставленной дискетой/диском. Удаление организуется при первом неудачном обращении к приводу дисков/дискет – имя диска удаляет из множества DiskIn. Результатом введения такой переменной стал запрет доступа к незаполненным приводам.

3.1.3 Свойства файлов, папок и дисков

Важной частью файлового менеджера являются средства отображения свойств различных объектов файловой системы. Реализация этих средств была сведена к созданию двух дополнительных форм FPropertyFile и FPropertyDrive, заполняемых необходимыми данными в процессе получение свойств посредством APIWindows. Разделение форм было произведено из-за существенного различия типа информации в свойствах дисков и файлов.

Предварительное заполнение и отображение формы FPropertyFile осуществляется в пользовательской функции Prepare, получающей в качестве параметра путь к файлу. Ниже перечислены основные отображаемые свойства и методы их получения: иконка файла/папки, тип файла (функция SHGetFileInfo); имя файла/папки (функция ExtractFileName); папки (ExtractFilePath); размера (функция GetFileAttributesEx), размера на диске (функции GetFileAttributesEx и GetDiskFreeSpace для получения информации о размере кластера/сектора); даты создания, изменения, открытия (функции GetFileAttributesEx и FileTimeToLocalFileTime, FileTimeToSystemTime и SystemTimeToDateTimeдля преобразования даты к удобному виду); свойства файла/папки (функция GetFileAttributesEx). Для определения размера папки и количества, содержащихся в ней объектов, используется рекурсивная функция Get_Size_Folder, обходящая всю иерархическую структуру директории, подсчитывая и суммируя размеры отдельных объектов. Сохранение возможно измененных имени и атрибутов осуществляется в процедуре Set_Change.

Аналогично FPropertyFile заполнение полей формы FPropertyDrive производится в процедуре Prepare. Свойства, отображаемые с помощью элементов формы, следующие: иконка (по типу диска функцией GetDriveType); метка диска и тип файловой системы (функция GetVolumeInformation); количество занятого и свободного места (функция GetDiskFreeSpaceEx). Кроме того занятое/свободное место отображается в виде круговой диаграммы – объект класса TChart. Единственным свойством изменение которого возможно является метка диска. Именно она изменяется по нажатию на клавиши OK или «Применить».

Вызов функций отображения и подготовки форм осуществляется из процедуры ViewProperty. Единственная задача этой функции - определить какую из форм следует показать. Эта проблема решается путем сравнения пути к отображаемой папке с путем к корневому каталогу диска.


4. Техническая документация

Приложение не требует установки. Для его работы следует запустить FileManager.exe. Приложение рекомендуется для работы с файловой системойи файлами. Файловый менеджер позволяет выполнять наиболее частые операции над файлами - создание, открытие/проигрывание/просмотр, редактирование, перемещение, переименование, копирование, удаление, изменение атрибутов и свойств, поиск файлов и назначение прав.


5. Экспериментальная часть

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

При нажатии на кнопки «Удалить» и «Создать» программа выводит на экран соответствующие диалоговые окна, где так же есть предусмотренные действия пользователя с объектами на этих формах.

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

Для завершения работы с Файловым Менеджером пользователю достаточно нажать на кнопку «Закрыть» системного меню, находящуюся в правом верхнем углу окна программы.


Выводы

Результатом данной курсовой работы является программа для работы с файлами. Программа представляет собой необходимый минимум для выполнения этой задачи.

Программа может иметь более развитый интерфейс и двупанельный вид — в общем случае имеют две равноценных панели для списка файлов, а в данном случае программа имеет однопанельный вид. В данной курсовой работе это не было реализовано.


Список используемой литературы

1. Общая информация

http://yandex.ru/

http://www.google.ru/

http://ru.wikipedia.org/

2. Информация о языке программирования

http://www.itkursi.ru/

ПауэрсЛ., СнеллМ. Microsoft Visual Studio 2008 => Microsoft Visual Studio 2008 Unleashed by Lars Powers and Mike Snell.

3. Алгоритмы программы

http://program.rin.ru/

http://www.progz.ru/


Листинги

1.1. Листинг Unit1.h

enum {ImageWindows, ImageFloppy, ImageDrive, ImageCD, ImageMyComp,ImageCloseFolder, ImageOpenFolder};

voidstrcat0(char * &dest,char *source); //Соединение строк с оставлением нулевого символа

void finstr(char *dest);

unsigned int lengthfinstr(char *dest);

struct DROPFILES {

DWORD pFiles; // offset of file list

POINT pt; // drop point (client coords)