скачать рефераты
  RSS    

Меню

Быстрый поиск

скачать рефераты

скачать рефератыКурсовая работа: Файловый менеджер

XI.  Служебные функции ListView: void ExpandTreeForFile(AnsiString FileName) и void OpenFileOrFolder().

Функция OpenFileOrFolder вызывается при клике на элементе списка ListView и осуществляет соответствующую операцию: при клике на папке – открывает ее, при клике на файле – запускает его. По щелчку на папке происходит вызов ViewFailAndFolderInListView с указанием пути к ней для отображения содержимого, по щелчку на файле предпринимается попытка запустить его функцией ShellExecute. Если попытка запуска неудачна, на экран выводится сообщение об ошибке, возвращаемое GetLastError.

Вызов функции ExpandTreeForFile осуществляется лишь из процедуры OpenFileOrFolder и предназначен для раскрытия ветвей дерева до текущей папки, при ее изменении. Новая текущая папка передается в функцию в качестве параметра, где этот путь последовательно разбивается на части и сопоставляется различным узлам дерева. Последовательным проходом сверху-вниз осуществляется раскрытие узлов, соответствующих родительским директориям, содержащим данную папку, и выделение новой текущей директории в дереве TreeView. Так становится возможной связь компонента ListView с TreeView: изменение текущей директории в ListView приводит к изменению выделения текущего контейнера в TreeView.

XII.  Функции работы с буфером: void PasteFileFromClipboard(), void CopyFileToClipboard(bool Copy).

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

Исходя из этого, реализация операции по вставке файлов из буфера была осуществлена в следующем порядке: открытие буфера OpenClipboard, проверка наличия в буфере данных нужного формата функцией IsClipboardFormatAvailable; получение указателя на данные GetClipboardData и, наконец, определение их количества и последовательное извлечение строк API функцией DragQueryFile. На основании полученных строк формируется массив frombuf передаваемый на обработку.

Еще одной проблемой стало получение информации о необходимости копирования, либо перемещения файла. Стандартом является получение указателя из буфера по регистрируемому формату CFSTR_PREFERREDDROPEFFECT. Указатель содержит адрес в памяти, по которому находится четыре байта информации о типе перемещения/копирования. Сравнением этих данных с константами и вызовом функции FileAndFolderOperation и завершается вставка файлов (папок) из буфера. Закрытие буфера по окончании функции разрешает доступ к нему для других программ.

Функция void CopyFileToClipboard(bool Copy) универсальная и в зависимости от переданного ей параметра осуществляет либо копирование, либо перемещение файла в буфер (точнее, лишь указание на перемещение или копирование). Результатом анализа переданного параметра является выделением памяти под двойное слово и помещение в нее соответствующей константы DROPEFFECT_COPY или DROPEFFECT_MOVE. Передача информации о копируемых файлах осуществляется последовательным заполнением структуры DROPFILES, построением буфера frombuf и перемещения этих данных в память. После открывается буфер, функцией SetClipboardData в буфере размещаются данные о фалах и типе операции, буфер закрывается – данные готовы к копированию (перемещению).


3.Конструкторская часть

файловый менеджер система пользовательский

I.  TreeView1 : TTreeView

Данный визуальный объект изображает дерево каталогов и настраивается динамически в процессе работы путем добавления/удаления узлов. Основные события, участвующие в формировании дерева – OnExpanded и OnCollapsing, возникающие соответственно при раскрытии и свертывании некоторого узла. По первому событию осуществляется помещение в дерево внуков раскрываемого узла посредством функции ViewChild, по последнему – удаление внуков сворачиваемого узла процедурой DeleteChild. Пользователь полностью скрыт от информации об изменении структуры дерева.

Обработчик события 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, заполняемых необходимыми данными в процессе получение свойств посредством API Windows. Разделение форм было произведено из-за существенного различия типа информации в свойствах дисков и файлов.

Предварительное заполнение и отображение формы 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};

void strcat0(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)

 BOOL fNC; // is it on NonClient area

 // and pt is in screen coords

 BOOL fWide; // WIDE character switch

};

class TForm1 : public TForm

{

__published:        // IDE-managed Components

 TMainMenu *MainMenu1;

 TMenuItem *NFile;

 TTreeView *TreeView1;

 TSplitter *Splitter1;

 TListView *ListView1;

 TImageList *ImageList1;

 TImageList *ImageList2;

 TMenuItem *NProperty;

 TImageList *ImageList3;

 TImageList *ImageList4;

 TControlBar *ControlBar1;

 TToolBar *TBMain;

 void __fastcall TreeView1Expanding(TObject *Sender,

 TTreeNode *Node, bool &AllowExpansion);

 void __fastcall TreeView1Compare(TObject *Sender, TTreeNode *Node1,

 TTreeNode *Node2, int Data, int &Compare);

 void __fastcall TreeView1Expanded(TObject *Sender,

 TTreeNode *Node);

 void __fastcall TreeView1Collapsing(TObject *Sender,

 TTreeNode *Node, bool &AllowCollapse);

 void __fastcall TreeView1Editing(TObject *Sender, TTreeNode *Node,

 bool &AllowEdit);

 void __fastcall ListView1Compare(TObject *Sender, TListItem *Item1,

 TListItem *Item2, int Data, int &Compare);

 void __fastcall ListView1DblClick(TObject *Sender);

 void __fastcall ListView1MouseDown(TObject *Sender,

 TMouseButton Button, TShiftState Shift, int X, int Y);

 void __fastcall TreeView1DragOver(TObject *Sender, TObject *Source,

 int X, int Y, TDragState State, bool &Accept);

 void __fastcall TreeView1DragDrop(TObject *Sender, TObject *Source,

 int X, int Y);

 void __fastcall TreeView1MouseDown(TObject *Sender,

 TMouseButton Button, TShiftState Shift, int X, int Y);

Страницы: 1, 2, 3, 4, 5


Новости

Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

  скачать рефераты              скачать рефераты

Новости

скачать рефераты

© 2010.