Реферат: Разработка файловой оболочки - текст реферата. Скачать бесплатно.
Банк рефератов, курсовых и дипломных работ. Много и бесплатно. # | Правила оформления работ | Добавить в избранное
 
 
   
Меню Меню Меню Меню Меню
   
Napishem.com Napishem.com Napishem.com

Реферат

Разработка файловой оболочки

Банк рефератов / Программирование

Рубрики  Рубрики реферат банка

закрыть
Категория: Реферат
Язык реферата: Русский
Дата добавления:   
 
Скачать
Архив Zip, 136 kb, скачать бесплатно
Заказать
Узнать стоимость написания уникального реферата

Узнайте стоимость написания уникальной работы

Разработка файловой оболочки Постановка задачи. Задача заключается в разработке файловой оболочки для операционной системы Windows ’ 95/98. В программе реализовать механизмы копирования , переноса , удаления , переименования файлов и директорий , поиск файлов по маске , просмотр списка файлов по маске , просмотр и редактирование файлов во внешних редакторах , присвоение и получение атрибутов файла , присвоение атрибутов группе файлов , запуск приложений со строкой параметров , создание директории , определение размера директории , получение информации о диске , настройки интерфейса про г раммы , определение суммарного объёма дискового пространства занимаемого группой файлов , восстановление интерфейсных параметров при повторном запуске программы . Так же обеспечить управление оболочкой при помощи манипулятора типа “мышь” и клавиатуры. Метод реализации. Для реализации поставленной задачи необходимо создать интерфейс пользователя состоящий из таких компонент : А ) список директорий. Б ) список файлов В ) список дисков Г ) главное меню программы Д ) панель инструментов. Для организации интерфей са пользователя будут использованы стандартные визуальные компоненты Delphi 3.0 . Для реализации механизма копирования /вставки необходимо запомнить список копируемых файлов /директорий , каждый элемент списка должен содержать информацию о месте нахождения фай ла /директории и имени файла /директории . При копировании группы файлов или одного файла необходимо определить их место положение в иерархии каталогов , а затем заполнить список , выбирая все файлы отмеченные пользователем из списка файлов показанного в интер ф ейсной части программы (списке файлов ). При копировании директории необходимо также определить её положение и произвести сканирование самой директории с сохранением в списке имён файлов содержащихся в копируемой директории и структуры каталогов . Для встав к и директории в место копирования , необходимо воссоздать её структуру , а затем скопировать в неё файлы . Для осуществления этого процесса вышеупомянутый список разбивается на два . В первом списке (назовем его временный список директорий ) должна находиться с т руктура каталогов , а во втором (временном списке файлов ) расположенные в этих каталогах файлы . Два списка необходимы для уменьшения времени затраченного на копирование , так как при наличии одного списка необходим анализ каждого элемента списка на предмет н аличия поддиректорий и создание этих поддиректорий в месте копирования , а в копируемой директории в большинстве случаев количество директорий меньше чем количество файлов и времени на проверку понадобиться больше , чем при использовании двух списков. Если ж е использовать два списка то для воссоздания структуры каталогов необходимо лишь отсортировать временный список директорий в соответствии с иерархией каталогов , и создавать директории проходя по списку сверху вниз . Так как после сортировки , директории рас п оложенные на верхних уровнях вложенности каталогов будут находиться в верхней части списка , а директории расположенные на нижних уровнях будут находиться в конце списка . После воссоздания структуры директории остаётся только переписать файлы . Алгоритм зап олнения временных списков показан на рисунке 1 в виде блок схемы . Реализация данного алгоритма будет базирована на использовании функций FindFirst и FindNext , эти функции осуществляют просмотр содержимого указанной директории и в качестве результата возвра щают имя найденного элемента , его атрибуты , время создания и размер . При анализе атрибутов найденного элемента можно определить данный элемент директория или файл , и в соответствии с анализом записать его имя и положение в соответствующий список . На описа н ном алгоритме будет базирован также механизм удаления директории. Упомянутые выше функции FindFirst и FindNext будут также применены при реализации механизма поиска файлов по маске. Описание программы. Программа реализована на языке паскаль с использовани ем Delphi 3.0 - среды визуального программирования приложений для Windows ’ 95 . Детально рассмотрим реализацию некоторых механизмов , таких как : Поиск файлов ; Копирование Директорий ; Удаление директорий. Поиск файлов : Поиск файлов в программе реализован с использованием маски . В маске возможно использование служебного символа , замены группы неизвестных символов в имени файла , или его расширении “ *” , а также возможен поиск с различием регистров символов , и без такового , с указанием области поиска . Так же с у ществуют возможности поиска с наложением дополнительных ограничений , таких как размер искомого файла , а так же времени создания файла . Детально с реализацией выше перечисленных механизмов вы можете ознакомиться в приложении 1 на страницах (29-35). Здесь ж е , мы рассмотрим реализацию основной части этого механизма. Для поиска файлов по маске необходимо задание маски поиска в виде * .сом или autoexec . * , или другие возможные варианты , и области поиска . В качестве дополнительного параметра может быть задана прове рка регистра символов . Блок схема поиска файлов показана на рисунке 1. При поиске используется рекурсивная процедура (текст 1.) в которой последовательно просматривается область поиска , включая подкаталоги , сравнивается имя найденного файл с маской поиска, и если все наложенные ограничения выполнены , найденный файл заносится в список предлагаемый пользователю для просмотра . Для организации поиска в разных областях изменяется лишь место первого вызова рекурсивной процедуры. Текст 1. Procedure TFindForm.Find InCurrentDir(CurDir:string); Var SizeF:integer; i:integer; EndList:boolean; F:TSearchRec; D:string; begin Вывод в статус строке директории в которой производится поиск FindForm.StatusFind.Panels[1].Text:=CurDir; FindFirst(CurDir+'*.*',faAnyFile,F); FindNext(F); repeat // Проверка расширенного поиска If FindForm.CBAdvSearch.Checked and (F.Attr<>faDirectory) then begin // Проверка на размер найденного файла // размер и время создания найденого файла должны нах одится в пределах заданных // пользователем if not(((F.Size < StrToInt(FindForm.SLess.Text)) and (F.Size > StrToInt(FindForm.SGreater.Text)))) then Continue; if not(((FileDateTime(CurDir+F.Name) FindForm.DateIsAfter.Date))) then Continue; end; // проверить не является ли найденый файл директорией if F.Attr=faDirectory then if (F.Name<>'.') and (F.Name<>'..') then begin // если найденный файл – директория , рекурсивный вызов поиска в да нной директории FindInCurrentDir(CurDir+F.Name+'\'); end; if (F.Name<>'..') and (F.Name<>'.') then // если файл подходит под маску , занести его в список if CompareFileWithMask(F.Name) then begin FindForm.FileWasFind.Items.Add(CurDir+F.Name); FindForm.StatusFind.Panels[0].Text:=IntToStr(StrToInt(FindForm.StatusFind.Panels[0].Text)+1); FindForm.FileWasFind.Refresh; end; // выполнять поиск пока не закончатся файлы в текущей области заданной области . Until((FindNext(F) <> 0)); FindClose(F); end; В форме поиска файлов возможен переход к выбранному файлу , из списка найденных , а также запуск либо просмотр /редактирование во внешнем редакторе. Копирование / Удаление директорий : Описанная выше реализация алгоритма поиска файлов применёна в реал изации копирования и удаления директорий . При реализации рассматриваемых процессов понадобится наличие двух временных списков : списка директорий и списка файлов (каждая строка обоих списков включает в себя “полный путь” ( FULL PATH )) файла /директории . Для р еализации временных списков использован визуальная компонента ListBo х , данная компонента представляет собой динамический список строк и набор процедур и функций для управления этим списком . Заполнение этих списков осуществляется при помощи просмотра директ ории. С листингом программы реализующем эти процессы вы можете ознакомиться в приложении 1 на страницах (17,23-27). Для копирования /удаления директорий составляются оба вышеупомянутых списка . При вставке директории создаётся полное дерево директории , а зат ем происходит копирование файлов . При удалении директории так же составляются оба списка , но так как стандартной процедуры удаляющей не пустую директорию нет , то в начале удаляются все файлы в удаляемой директории (включая файлы находящиеся в поддиректори я х ), а затем пустые директории. Анализ результатов. Программа имеет все необходимые функции работы с файлами . Все функции можно активизировать нажатием комбинации клавиш . Производиться статистика копирования , переноса , удаления файлов /директорий в удобной для восприятия пользователем форме . Существует простой механизм наложения фильтра на показываемые файлы . При изменении интерфейса программы , все изменения сохраняются и будут восстановлены при следующем запуске . Запуск приложений со строкой параметров с у к азанием типа запуска . Вывод сообщения о количестве поддиректорий в директории и о количестве файлов расположенных в ней . Определение размера директории присвоение атрибутов группе файлов простым нажатием двух клавиш . Выводы. В ходе работы была разработан а программа манипулирования файлами и директориями. В программе реализованы следующие механизмы : · копирования , переноса , удаления , переименования файлов и директорий , · поиск файлов по маске , · наложение фильтра на список файлов , · просмотр и редак тирование файлов во внешних редакторах, · присвоение и получение атрибутов файла , · присвоение атрибутов группе файлов , · запуск приложений со строкой параметров , · создание директории , · определение размера директории , · получение информации о диске , · настройки интерфейса программы , · определение суммарного объёма дискового пространства занимаемого группой файлов , · восстановление интерфейсных параметров при повторном запуске программы. Программа имеет удобный интерфейс и может использова ться для работы пользователями с разным уровнем знаний . Системные требования : Операционная система Windows ’ 95 и выше , 500 килобайт дискового пространства. Главная форма программы Модуль описывающий главную форму unit UMainForm; // главная форма программы interface // подключаемые модули ( стандартные ) uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Menus, ExtCtrls, ComCtrls, StdCtrls, FileCtr l, Grids, Outline, DirOutln, ToolWin, Buttons; type TMainForm = class(TForm) MainMenu1: TMainMenu; File1: TMenuItem; About1: TMenuItem; N1: TMenuItem; Exit1: TMenuItem; Options1: TMenuItem; Directory: TDirectoryOutline; FileList: TFileListBox; Drv: TDriveComboBox; StatusBar: TStatusBar; DirectoryMenu: TPopupMenu; FileMenu: TPopupMenu; Splitter: TSplitter; Cut: TMenuItem; Copy: TMenuItem; Paste: TMenuItem; Rename1: TMenuItem; Delete: TMenuItem; NewDir: TMenuItem; CopyDir: TMenuItem; RenameDir: TMenuItem; DeleteDir: TMenuItem; PasteDir: TMenuItem; TempDelete: TListBox; TempCopyMove: TListBox; Open: TMenuItem; View: TMenuItem; FileMask1: TMenuItem; CMDirList: TListBox; DFileList: TListBox; Find1: TMenuItem; Info1: TMenuItem; CMFileList: TListBox; FileAttr: TMenuItem; SizeDirectory1: TMenuItem; CutDir: TMenuItem; ToolBar1: TToolBar; DrBox: TDriveComboBox; Bevel1: TBevel; Bevel2: TBevel; SpeedButton1: TSpeedButton; SCut: TSpeedButton; Bevel3: TBevel; SCopy: TSpeedBut ton; SPaste: TSpeedButton; SDel: TSpeedButton; Up: TSpeedButton; Bevel4: TBevel; Cut1: TMenuItem; Copy1: TMenuItem; Paste1: TMenuItem; Rename: TMenuItem; Delete1: TMenuItem; Selectall: TMenuItem; InvertSelect: TMenuItem; procedure About1Click(Sender: TObject); procedure Exit1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Options1Click(Sender: TObject); procedure DrivesSectionClick(HeaderControl: THeaderControl; Section: THeaderSection); pro cedure DrivesMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure NewDirClick(Sender: TObject); procedure DirectoryChange(Sender: TObject); procedure CopyClick(Sender: TObject); procedure CutClick(Sender: TObjec t); procedure PasteClick(Sender: TObject); procedure Rename1Click(Sender: TObject); procedure DeleteDirClick(Sender: TObject); procedure DeleteClick(Sender: TObject); procedure FileMenuPopup(Sender: TObject); procedure FileMask1Click(Sender: TObject) ; procedure FileListDblClick(Sender: TObject); procedure SplitterMoved(Sender: TObject); procedure Find1Click(Sender: TObject); procedure Info1Click(Sender: TObject); procedure CopyDirClick(Sender: TObject); procedure RenameDirClick(Sender: TObject); procedure FileAttrClick(Sender: TObject); procedure ViewClick(Sender: TObject); procedure SizeDirectory1Click(Sender: TObject); procedure FileListMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FileListKeyPress(Sender: TObject; var Key: Char); procedure FileListKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure PasteDirClick(Sender: TObject); procedure DirectoryMenuPopup(Sender: TObject); procedure File1Click(S ender: TObject); procedure OpenClick(Sender: TObject); procedure DrBoxChange(Sender: TObject); procedure UpClick(Sender: TObject); procedure SCutClick(Sender: TObject); procedure SPasteClick(Sender: TObject); procedure SDelClick(Sender: TObject); pr ocedure SCopyClick(Sender: TObject); procedure FileListClick(Sender: TObject); procedure CutDirClick(Sender: TObject); procedure Cut1Click(Sender: TObject); procedure Copy1Click(Sender: TObject); procedure Paste1Click(Sender: TObject); procedure Dele te1Click(Sender: TObject); procedure RenameClick(Sender: TObject); procedure FormResize(Sender: TObject); procedure InvertSelectClick(Sender: TObject); procedure FileListKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); procedure SelectallCl ick(Sender: TObject); private public end; var MainForm: TMainForm; Size:integer; implementation // подключаемые модули (не стандартные ) uses UAboutBox,UMainForm_, UOptionsForm, UCreateDir, UProgressForm, URenameForm, UAskDeleteForm, UGetFileMask, FmxUtils, UFindForm, UInfoForm, UAttrFilesForm,UNotTrivial, UDeleteDir, URenameDirForm, URunForm, UViewForm; $R *.DFM procedure TMainForm.About1Click(Sender: TObject); // вывод формы "ИНФОРМАЦИЯ О ПРОГРАММЕ " begin AboutBox.Show; end; procedure TMainForm.Exit1Click(Sender: TObject); // Обработка выхода из программы begin If AskExit then begin // Подтверждение выхода If Application.MessageBox('Exit ?','Exit',MB_APPLMODAL+MB_ICONQuestion+MB_YESNO)=IDYes then Begin // запись информации о программе в файл МС .INI SaveIniMainForm; Close; end end else begin SaveIniMainForm; Close; end; end; procedure TMainForm.FormC reate(Sender: TObject); //Установка начльных параметров для компонент главной формы begin SetUpMainForm; SetUpComponents; end; procedure TMainForm.Options1Click(Sender: TObject); //Вывод формы параметров begin // Центрирование выводимой формы относител ьно главной формы GetFormToCenter(OptionsForm); OptionsForm.ShowModal; end; procedure TMainForm.DrivesSectionClick(HeaderControl: THeaderControl; Section: THeaderSection); // Смена текущего диска begin Directory.Drive:=Section.Text[1]; Directory.SetDirectory(Section.Text[1]+':\'); MainForm.Directory.BuildTree; end; procedure TMainForm.DrivesMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin //перерисовка списка директорий при необходимости Dire ctory.Repaint; end; procedure TMainForm.NewDirClick(Sender: TObject); // Создание директории и вывод соответствующей формы begin CreateDirForm.Show; end; Function CountDir(Str:String):String; // Определение количества поддиректорий в текущей директории Var F:TSearchRec; C:integer; begin c:=0; findfirst(Str+'\*.*',faAnyFile,F); findnext(F); repeat if (f.Attr>=16) and (f.attr<32) and (f.Name<>'.') and (f.Name<>'..') then c:=c+1; Until(findnext(f)<>0); CountDir:=IntToStr(c); end; procedure TMainForm.DirectoryChange(Sender: TObject); //Смена текущей директории begin //Обновление списка файлов FileList.SetDirectory(Directory.Directory); //Заполнение статус-строки MainForm.StatusBar.Panels[0].Text:=CountDir(Directory.Directory)+' di r. & '+IntToStr(MainForm.FileList.Items.Count)+ ' files '; MainForm.StatusBar.Panels[1].Text:=''; //Определение активных кнопок панели управления If UpperCase(MainForm.Directory.Directory)=UpperCase(MainForm.DrBox.Drive+':\') then begin Up.Enabled:=Fa lse; SCut.Enabled:=False; SCopy.Enabled:=False; SDel.Enabled:=False; end else begin Up.Enabled:=True; SCut.Enabled:=True; SCopy.Enabled:=True; SDel.Enabled:=True; end; end; procedure TMainForm.CopyClick(Sender: TObject); // Копирование файлов begin FlagCopyFile:=True; FlagMoveFile:=False; CopyPathFileInTemp; end; procedure TMainForm.CutClick(Sender: TObject); // Вырезание файлов begin FlagMoveFile:=True; CopyPathFileInTemp; end; procedure TMainForm.PasteClick(Sender: TObject); begin Pro gressForm.Show; PasteFileFromTemp; ProgressForm.Close; MainForm.TempCopyMove.Clear; end; procedure TMainForm.Rename1Click(Sender: TObject); // Переименование файлов в соответствующей экранной форме begin GetFormToCenter(RenameFileForm); RenameFileForm.ShowModal; end; procedure TMainForm.DeleteDirClick(Sender: TObject); // Удаление директории begin // Обнуление временных списков MainForm.CMDirList.Clear; MainForm.CMFileList.Clear; DeleteEmptyDirectory(MainForm.Directory.Directory); //Обновление списка директорий MainForm.Directory.Invalidate; end; procedure TMainForm.DeleteClick(Sender: TObject); //Удаление файлов begin AskDeleteForm.Show; end; procedure TMainForm.FileMenuPopup(Sender: TObject); //Определение видимых строк в конт ектсном меню файловой области //в момент его вызова begin if MainForm.FileList.SelCount=0 then begin with MainForm.FileMenu do begin Delete.Enabled:=False; Cut.Enabled:=False; Copy.Enabled:=False; Rename1.Enabled:=False; end; end else begin wi th MainForm.FileMenu do begin Delete.Enabled:=True; Cut.Enabled:=True; Copy.Enabled:=True; Rename1.Enabled:=True; end; end; if MainForm.TempCopyMove.Items.Count = 0 then Paste.Enabled:=False else Paste.Enabled:=True; end; procedure T MainForm.FileMask1Click(Sender: TObject); // Запрос маски файлов для списка файлов (в дальнейшем СФ ) begin GetFileMask.Show; end; procedure TMainForm.FileListDblClick(Sender: TObject); // Запуск программ /редактирование (просмотр ) во внешнем редакторе // п ри двойном щелчке мышкой Var str:string; begin Str:=FileList.FileName; ExecuteFile(Str,'','',SW_SHOW); end; procedure TMainForm.SplitterMoved(Sender: TObject); //Перемещение разделителя СФ и Списка директорий (В Дальнейшем СД ) begin // Ограничение на положение разделителя // Ширина СД не должна быть меньше Списка дисков (В дальнейшем СПД ) if Splitter.Left<=DrBox.Width then begin Directory.Width:=DrBox.Width+6; end; // Сохранение положения разделителя для следующего запуска программы McIni.WriteInteger('ASWindow','Splitter',MainForm.Directory.Width); // Установка размеров панелей статус-строки MainForm.StatusBar.Panels[0].Width:=MainForm.Directory.Width; end; procedure TMainForm.Find1Click(Sender: TObject); // Поиск файлов begin F indForm.Show end; procedure TMainForm.Info1Click(Sender: TObject); // Вывод информации о текущем диске и директории begin GetFormToCenter(InfoForm); InfoForm.ShowModal; end; procedure TMainForm.CopyDirClick(Sender: TObject); //Копирование директорий (В ыбран пункт меню копировать ) begin SourseDir:=MainForm.Directory.Directory; DoingWithDir:=True; CopyMoveDirectory; end; procedure TMainForm.RenameDirClick(Sender: TObject); //Переименование директории в соответствующей форме begin GetFormToCenter(RenameDirForm); RenameDirForm.ShowModal; end; procedure TMainForm.FileAttrClick(Sender: TObject); //Получение установка атрибутов файла в соотв . форме begin GetFormToCenter(AttrFileForm); AttrFileForm.ShowModal; end; procedure TMainFo rm.ViewClick(Sender: TObject); // Определение видимых компонент в меню VIEW // в момент его открытия begin if MainForm.FileList.SelCount = 0 then begin MainForm.FileAttr.Enabled:=False; end else begin MainForm.FileAttr.Enabled:=True; end; if Upper Case(MainForm.Directory.Directory)=UpperCase(MainForm.DrBox.Drive+':\') then MainForm.SizeDirectory1.Enabled:=False else MainForm.SizeDirectory1.Enabled:=True; end; Procedure DDD(DirS:string); // Определение размера текущей директории Var d:TSearchRec; begin FindFirst(DirS+'\'+'*.*',faAnyFile,D); FindNext(D); repeat if (D.Name<>'.') and (D.Name<>'..') then begin if (D.Attr=faDirectory) Or (D.Attr=18) then begin DDD(DirS+'\'+D.Name); end else begin Size:=Size+D.Size; end; end ; Until(FindNext(D) <> 0); FindClose(D); end; procedure TMainForm.SizeDirectory1Click(Sender: TObject); // Вывод информации о текущей директории в статус-строке begin Size:=0; MainForm.StatusBar.Panels[0].Text:='Wait...'; DDD(MainForm.Directory.Directory); MainForm.StatusBar.Panels[0].Text:=FormatSize(IntToStr(Size)); // перевод числа в читабельный формат MainForm.StatusBar.Panels[0].Text:=MainForm.StatusBar.Panels[0].Text+' b'; end; procedure TMainForm.FileListMouseUp( Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); // Левая кнопка мышки отпущена Var i:integer; F:TSearchRec; str:string; begin str:=' '; Size:=0; //Если при помощи мышки выделена группа файлов определить их суммарный размер for i:=0 to MainForm.FileList.Items.Count-1 do begin if MainForm.FileList.Selected[i] then begin FindFirst(MainForm.FileList.Items[i],faAnyFile,F); Size:=Size+F.Size; if MainForm.FileList.SelCount=1 then break; end; end; // Если один выделенный файл , вывести информацию о нем в строке статуса if MainForm.FileList.SelCount=1 then begin MainForm.StatusBar.Panels[1].Text:=ExtractFileName(F.Name)+' '+ FormatSize(IntToStr(F.Size))+' b'+' '+ DateToStr(FileDateTime(F.Name))+' '+TimeToStr(FileDateTim e(F.Name)); end else begin MainForm.StatusBar.Panels[1].Text:=FormatSize(intToStr(Size))+' b'+ ' in '+IntToStr(MainForm.FileList.SelCount)+ ' selected files'; end; end; Procedure ReselectAllFile; // Инвертирование выделения файлов Var i:integer; be gin For i:=0 to MainForm.FileList.Items.Count-1 do MainForm.FileList.Selected[i]:=not MainForm.FileList.Selected[i]; end; Procedure SelectAllF(Key:Char); // Выделить все файлы в СФ Var i:integer; F:TsearchRec; Str:string; begin if Key='*' then begin if MainForm.FileList.SelCount=MainForm.FileList.Items.Count then ReselectAllFile else begin for i:=0 to MainForm.FileList.Items.Count-1 do MainForm.FileList.Selected[i]:=True; str:=' '; Size:=0; // Обновление Статус-строки for i:=0 to MainF orm.FileList.Items.Count-1 do begin if MainForm.FileList.Selected[i] then begin FindFirst(MainForm.FileList.Items[i],faAnyFile,F); Size:=Size+F.Size; if MainForm.FileList.SelCount=1 then break; end; end; if MainForm.FileList.SelCount=1 then begin MainForm.StatusBar.Panels[1].Text:=ExtractFileName(F.Name)+' '+ FormatSize(IntToStr(F.Size))+' b'+' '+ DateToStr(FileDateTime(F.Name))+' '+TimeToStr(FileDateTime(F.Name)); end else begin MainForm.StatusBar.Panels[1].Text:=FormatSize(intToStr(Size))+' b'+ ' in '+IntToStr(MainForm.FileList.SelCount)+ ' selected files'; end; end; end; end; procedure TMainForm.FileListKeyPress(Sender: TObject; var Key: Char); begin SelectAllF(Key); end ; procedure TMainForm.FileListKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); //Нажата клавиша на клавиатуре Var i:integer; F:TSearchRec; str:string; begin // если нажат ENTER запустить файл if (Key=13) and not AskDeleteForm.Active then ExecuteFile(FileList.FileName,'','',SW_SHOW); str:=' '; Size:=0; for i:=0 to MainForm.FileList.Items.Count-1 do begin if MainForm.FileList.Selected[i] then begin FindFirst(MainForm.FileList.Items[i],faAnyFile,F); Size:=Size+F.Size; if MainForm.FileList.SelCount=1 then break; end; end; // Обновление статус строки if MainForm.FileList.SelCount=1 then begin MainForm.StatusBar.Panels[1].Text:=ExtractFileName(F.Name)+' '+ FormatSize(IntToStr(F.Size))+' b'+' '+ DateToStr(FileDateTi me(F.Name))+' '+TimeToStr(FileDateTime(F.Name)); end else begin MainForm.StatusBar.Panels[1].Text:=FormatSize(intToStr(Size))+' b'+ ' in '+IntToStr(MainForm.FileList.SelCount)+ ' selected files'; end; end; procedure TMainForm.PasteDirClick(Sender: T Object); //Вставка директории begin DestinationDir:=MainForm.Directory.Directory; PasteDirectory(SourseDir,MainForm.Directory.Directory); MainForm.Directory.BuildTree; //Если директория переноситься то удалить источник If not DoingWithDir then begin DelNotEmptyDirectory(SourseDir); MainForm.Directory.BuildTree; end; MainForm.CMDirList.Clear; end; procedure TMainForm.DirectoryMenuPopup(Sender: TObject); // Определение видимых компонент контектсного меню СД begin if MainForm.CMDirList.Items.Count= 0 then PasteDir.Enabled:=False else PasteDir.Enabled:=True; If Length(MainForm.Directory.Directory) <= 3 then begin CopyDir.Enabled:=False; CutDir.Enabled:=False; DeleteDir.Enabled:=False; RenameDir.Enabled:=False; end else begin CutDir.Enable d:=True; CopyDir.Enabled:=True; DeleteDir.Enabled:=True; RenameDir.Enabled:=True; end; end; procedure TMainForm.File1Click(Sender: TObject); //Определение является ли выделенный файл приложением и подсвечивание / скрытие //пункта меню RUN в момент отк рытия меню FILE begin if (UpperCase(ExtractFileExt(MainForm.FileList.FileName))='.EXE') or (UpperCase(ExtractFileExt(MainForm.FileList.FileName))='.COM') then Open.Enabled:=True else Open.Enabled:=False; end; procedure TMainForm.OpenClick(Sender: TObj ect); //Запуск приложения со строкой параметров begin GetFormToCenter(RunForm); RunForm.ShowModal; end; procedure TMainForm.DrBoxChange(Sender: TObject); //Смена текущего диска и обносление СФ и СД Var F:TSearchRec; s:string; begin MainForm.Directory. Drive:=MainForm.DrBox.Drive; MainForm.FileList.Directory:=MainForm.DrBox.Drive+':\'; S:=MainForm.FileList.Mask; MainForm.FileList.Mask:='>.>'; FindFirst(MainForm.DrBox.Drive+':\*.*',faDirectory,F); Repeat Until ((FindNext(F)<>0) or ((F.Attr=faDirectory) and ((F.Name<>'.') or (F.Name<>'..')))); if F.Attr<>faDirectory then MainForm.Directory.SetDirectory(MainForm.DrBox.Drive+':\') else MainForm.Directory.SetDirectory(MainForm.DrBox.Drive+':\'+F.Name); M ainForm.Directory.BuildTree; MainForm.Directory.SetDirectory(MainForm.DrBox.Drive+':\'); MainForm.FileList.Enabled:=True; MainForm.FileList.Mask:=s; MainForm.StatusBar.Panels[0].Text:=IntToStr(MainForm.FileList.Items.Count)+ ' files '; end; procedure TMainForm.UpClick(Sender: TObject); //Перход на один уровень вверх в списке директорий Var i:integer; Str:string; begin str:=MainForm.Directory.Directory; for i:=Length(Str) downto 0 do if Str[i]='\' then begin str[i+1]:=#0; break; end; MainForm.Directory.Directory:=str; MainForm.Directory.BuildTree; end; procedure TMainForm.SCutClick(Sender: TObject); // Нажата кнопка ВЫРЕЗАТЬ на панели инструментов begin //Если активен СФ то выреззать файлы if MainForm.FileList.Focused then begin FlagMoveFile:=True; CopyPathFileInTemp; end; //Если активен СД то вырезать директорию If MainForm.Directory.Focused then begin SourseDir:=MainForm.Directory.Directory; DoingWithDir:=False; MainForm.CMDirList.Items.Add(MainForm.Directory.Directory) ; GreateCopyMoveDirList(MainForm.Directory.Directory); end; end; procedure TMainForm.SPasteClick(Sender: TObject); //На панели инструментов нажата кнопка ВСТАВИТЬ begin // Определить (по заполнению временных списков ) что необходимо вставить // файлы и ли директории if MainForm.TempCopyMove.Items.Count<>0 then begin ProgressForm.Show; PasteFileFromTemp; ProgressForm.Close; end; If MainForm.CMDIrList.Items.Count<>0 then begin DestinationDir:=MainForm.Directory.Directory; PasteDirectory(SourseDir ,MainForm.Directory.Directory); MainForm.Directory.BuildTree; If not DoingWithDir then begin DelNotEmptyDirectory(SourseDir); MainForm.Directory.BuildTree; end; MainForm.CMDirList.Clear; end; end; procedure TMainForm.SDelClick(Sender: TObject); // на панели нажата кнопка УДАЛИТЬ begin if (MainForm.FileList.Focused) and (MainForm.FileList.SelCount>0) then begin AskDeleteForm.ShowModal; end; if MainForm.Directory.Focused then begin IndexDeleteDirectory:=MainForm.Directory.SelectedItem; MainForm.CMDirList.Clear; MainForm.CMFileList.Clear; DeleteEmptyDirectory(MainForm.Directory.Directory); MainForm.Directory.Invalidate; end; end; procedure TMainForm.SCopyClick(Sender: TObject); //На панели нажата кнопка КОПИРОВАТЬ begin If MainForm .Directory.Focused then begin SourseDir:=MainForm.Directory.Directory; DoingWithDir:=True; CopyMoveDirectory; end; If MainForm.FileList.Focused then begin FlagCopyFile:=True; FlagMoveFile:=False; CopyPathFileInTemp; end; end; procedure TMainFor m.FileListClick(Sender: TObject); begin MainForm.SDel.Enabled:=True; MainForm.SCopy.Enabled:=True; MainForm.SCut.Enabled:=True; end; procedure TMainForm.CutDirClick(Sender: TObject); // Вырезание Директории begin SourseDir:=MainForm.Directory.Directory; DoingWithDir:=False; MainForm.CMDirList.Items.Add(MainForm.Directory.Directory); GreateCopyMoveDirList(MainForm.Directory.Directory); end; procedure TMainForm.Cut1Click(Sender: TObject); // Вырезание в зависимо сти от контекста begin if MainForm.FileList.Focused then begin FlagMoveFile:=True; CopyPathFileInTemp; end; If MainForm.Directory.Focused then begin SourseDir:=MainForm.Directory.Directory; DoingWithDir:=False; MainForm.CMDirList.Items.Add(MainFo rm.Directory.Directory); GreateCopyMoveDirList(MainForm.Directory.Directory); end; end; procedure TMainForm.Copy1Click(Sender: TObject); // Копирование в зависимости от контекста begin If MainForm.Directory.Focused then begin SourseDir:=MainForm.Directory.Directory; DoingWithDir:=True; CopyMoveDirectory; end; If MainForm.FileList.Focused then begin FlagCopyFile:=True; FlagMoveFile:=False; CopyPathFileInTemp; end; end; procedure TMainForm.Paste1Click(Sender: TObject); // Вставка в зависимости от контекста begin if MainForm.TempCopyMove.Items.Count<>0 then begin ProgressForm.Show; PasteFileFromTemp; ProgressForm.Close; end; If MainForm.CMDIrList.Items.Count<>0 then begin DestinationDir:=MainForm.Directory.Directory; PasteDirectory(SourseDir,MainForm.Directory.Directory); MainForm.Directory.BuildTree; If not DoingWithDir then begin DelNotEmptyDirectory(SourseDir); MainForm.Directory.BuildTree; end; MainForm.CMDirLi st.Clear; end; end; procedure TMainForm.Delete1Click(Sender: TObject); //Удаление в зависимости от контекста begin if (MainForm.FileList.Focused) and (MainForm.FileList.SelCount>0) then begin AskDeleteForm.Show; end; if MainForm.Directory.Focused th en begin IndexDeleteDirectory:=MainForm.Directory.SelectedItem; MainForm.CMDirList.Clear; MainForm.CMFileList.Clear; DeleteEmptyDirectory(MainForm.Directory.Directory); MainForm.Directory.Invalidate; end; end; procedure TMainForm.RenameClick(Sender: TObject); // Переименование в зависимости от контекста begin If MainForm.Directory.Focused then begin GetFormToCenter(RenameDirForm); RenameDirForm.ShowModal; end; if MainForm.FileList.Focused then begin Rena meFileForm.ShowModal; end; end; procedure TMainForm.FormResize(Sender: TObject); // Наложение ограничений на минимальные размеры главной формы begin if MainForm.Width<391 then MainForm.Width:=391; if MainForm.Height<260 then MainForm.Height:=260; end ; procedure MainForm.InvertSelectClick(Sender: TObject); begin ReselectAllFile; end; procedure TMainForm.FileListKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); // Клавиша отпущена при работе с СФ Var i:integer; F:TSearchRec; str:string; begin // Обновление статус-строки str:=' '; Size:=0; for i:=0 to MainForm.FileList.Items.Count-1 do begin if MainForm.FileList.Selected[i] then begin FindFirst(MainForm.FileList.Items[i],faAnyFile,F); Size:=Size+F.Size; if MainForm.FileList.SelCo unt=1 then break; end; end; if MainForm.FileList.SelCount=1 then begin MainForm.StatusBar.Panels[1].Text:=ExtractFileName(F.Name)+' '+ FormatSize(IntToStr(F.Size))+' b'+' '+ DateToStr(FileDateTime(F.Name))+' '+TimeToStr(FileDateTime(F.Name)); end else begin MainForm.StatusBar.Panels[1].Text:=FormatSize(intToStr(Size))+' b'+ ' in '+IntToStr(MainForm.FileList.SelCount)+ ' selected files'; end; end; procedure TMainForm.SelectallClick(Sender: TObject); begin SelectAllF('*'); end; end. Вспомогате льные модули unit UMainForm_; //Вспомогательный модуль программы interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Menus,IniFiles,ExtCtrls, ComCtrls, StdCtrls, FileCtrl, Grids, Outline, DirOutln, ToolWin, Buttons ; Const FL1='1 column'; FL2='2 column'; FL3='3 column'; Var AskExit:boolean; MCIni:TIniFile; FlagCopyFile:Boolean; FlagMoveFile:Boolean; Function FloatToInt(x:real):integer; Procedure SaveIniMainForm; Procedure ReadIniMainForm; Procedure SetUpMainForm; Procedure GetFormToCenter(Form:TForm); Function FormatSize(S:String):String; Procedure UpdateMC; Procedure WriteIniOptions; Procedure ReadIniOptions; Procedure SetUpComponents; Var ColDeleteFiles,ColFilesIn_TempCopyMove:integer; AllDeleteFlag,DeleteFlag:boolean; ResultFDCFFlag:integer; FDel:boolean; Procedure CopyPathFileInTemp; Function CreateStringForTemp(i:integer):string; Procedure PasteFileFromTemp; Function GetSizeAllFiles(List:TListBox):Integer; Procedure DeleteEmptyDir ectory(Dir:string); Procedure CheckForOverwrite(Str:string;x:integer); Var Ddir:string; DoingWithDir:boolean; DirSourse:string; Procedure GreateCopyMoveDirList(DirS:string); Procedure CopyMoveDirectory; implementation Uses UMainForm, UOptionsForm, FMXUtils, UAskDeleteForm, UAskDeleteCurrentFile, UDeleteDir; Procedure CopyMoveDirectory; //Копирование перенос директорий begin MainForm.CMDirList.Clear; MainForm.CMFileList.Clear; MainForm.CMDirList.Items.Add(MainForm .Directory.Directory); //Создание временных списков GreateCopyMoveDirList(MainForm.Directory.Directory); end; Procedure GreateCopyMoveDirList(DirS:string); //Рекурсивная процедура создания списков для копирования /переноса /удаления директории Var D:TSearchRec; begin FindFirst(DirS+'\'+'*.*',faAnyFile,D); FindNext(D); repeat if (D.Name<>'.') and (D.Name<>'..') then begin if (D.Attr=faDirectory) Or (D.Attr=18) then begin MainForm.CMDirList.Items.Add(DirS+'\'+D.Name); GreateCopyMoveDirList( DirS+'\'+D.Name); end else begin MainForm.CMFileList.Items.Add(DirS+'\'+D.Name); end; end; Until(FindNext(D) <> 0); FindClose(D); end; Procedure CheckForOverwrite(Str:string;x:integer); // Проверка существования файлов и перезапись его по желанию пользователя при вставке Var i:integer; FilePaste:string; FileinDir:string; MStr:PChar; begin FilePaste:=ExtractFileName(Str); for i:=0 to ColAllFiles-1 do begin Str:=MainForm.FileList.Items[i]; FileInDir:=Str; if FilePaste=FileInDir then begin Str:='OverWrite '+MainForm.TempCopyMove.Items[x]; Mstr:=PChar(Str); // Найден файл , запрос на его перезапись if Application.MessageBox(MStr,'Warning',1)<>1 then begin MainForm.TempCopyMove.Items[x]:=MainForm.TempCopyMove.Items[x]+'*';//.Delet e(x); ColFilesIn_TempCopyMove:=ColFilesIn_TempCopyMove-2; end; end; end; end; Procedure DeleteEmptyDirectory(Dir:String); //Удаление пустой директории Var i:integer; begin $I- i:=MainForm.Directory.SelectedItem; MainForm.Directory.Directory:=(MainForm.Directory.Drive+':\'); RmDir(Dir); if IOResult <> 0 then begin GetFormToCenter(FDeleteDir); FDeleteDir.LDir.Caption:=Dir; FDeleteDir.ShowModal; if Fdel then begin MainForm.Directory.Delete(i); RmDir(Dir); end Else begin MainForm.Directory.SetDirectory(Dir); MainForm.Directory.BuildTree; end; end Else MainForm.Directory.Delete(i); $I+ MainForm.Directory.Update; MainForm.CMDirList.Items.Clear; MainForm.CMFileList.Items.Clear; end; Function Get SizeAllFiles(List:TListBox):Integer; // Определение размера всех файлов для прогресс формы Var i:integer; Size:integer; begin Size:=0; For i:=0 to List.Items.Count-1 do begin Size:=Size+GetFileSize(List.Items[i]); end; GetSizeAllFiles:=Size; end; Procedure PasteFileFromTemp; //Вставка файлов Var StrPaste:string; Str:string; i:integer; begin //Формирование параметров для вставки файлов If MainForm.Directory.Directory[Length(MainForm.Directory.Directory)]<>'\' then begin StrPaste:=Mai nForm.Directory.Directory+'\'; end else begin StrPaste:=MainForm.Directory.Directory; end; //Проверка всего списка вставляемых файлов на перезапись For i:=0 to MainForm.TempCopyMove.Items.Count-1 do CheckForOverwrite(MainForm.TempCopyMove.Items[i],i); For i:=0 to MainForm.TempCopyMove.Items.Count-1 do begin Str:=MainForm.TempCopyMove.Items[i]; //Определение действия над файлами копировать или перемещать If FlagMoveFile then begin if Str[Length (str)]<>'*' then MoveFile(MainForm.TempCopyMove.Items[i],StrPaste); end else begin if Str[Length(str)]<>'*' then CopyFile(MainForm.TempCopyMove.Items[i],StrPaste); end; If Str[Length(str)]='*' then begin Str[Length(str)]:=#0; MainForm.TempCopyMo ve.Items[i]:=Str; end; end; MainForm.FileList.Update; If FlagMoveFile then begin FlagMoveFile:=False; MainForm.TempCopyMove.Clear; end; end; Function CreateStringForTemp(i:integer):string; //Создание строки для временного списка Var Str:string; begin Str:=MainForm.Directory.Directory; If Str[Length(Str)]<>'\' then begin Str:=Str+'\'; end; Str:=Str+MainForm.FileList.Items[i]; CreateStringForTemp:=Str; end; Procedure CopyPathFileInTemp; //Создание временного списка файлов Var i:integer ; begin ColFilesIn_TempCopyMove:=0; MainForm.TempCopyMove.Clear; for i:=0 to ColAllFiles-1 do begin if MainForm.FileList.Selected[i] then begin ColFilesIn_TempCopyMove:=ColFilesIn_TempCopyMove+1; If FlagMoveFile then begin MainForm.TempCopyMove.Items.Add(CreateStringForTemp(i)); MainForm.FileList.Items[i]:=''; end else begin MainForm.TempCopyMove.Items.Add(CreateStringForTemp(i)); end; end; end; end; Procedure SetUpComponents; begin MainForm.StatusBar.Panels[0]. Width:=MainForm.Directory.Width; end; Procedure ReadIniOptions; //Чтение параметров из ини файла var tmpinteger:integer; begin with OptionsForm do begin AskOnExit.Checked:=MCIni.ReadBool('Options','AskOnExit',True); CStatusBar.Checked:=MCIni.ReadBo ol('Options','StatusBar',True); tmpinteger:=MCIni.ReadInteger('Options','FileListColumns',1); Case tmpinteger of 1 : LFileList.Caption:=FL1; 2 : LFileList.Caption:=FL2; 3 : LFileList.Caption:=FL3; end; //Case end; end; Procedure WriteIniOptions; // Запись параметров в ини файл begin with MCIni do begin WriteBool('Options','AskOnExit',OptionsForm.AskOnExit.Checked); WriteBool('Options','StatusBar',OptionsForm.CStatusBar.Checked); Case MainForm.FileList.Columns of 1 : WriteInteger('Options',' FileListColumns',1); 2 : WriteInteger('Options','FileListColumns',2); 3 : WriteInteger('Options','FileListColumns',3); end; //case end; end; Procedure UpdateMC; // Обновление интерфейсных параметров программы begin if OptionsForm.AskOnExit.Checked then AskExit:=True else AskExit:=False; If OptionsForm.CStatusBar.Checked then MainForm.StatusBar.Visible:=True else MainForm.StatusBar.Visible:=False; if OptionsForm.LFilelist.Caption=FL1 then begin MainForm.FileList.Columns:=1; MainForm.FileList.Update; end; if OptionsForm.LFilelist.Caption=FL2 then begin MainForm.FileList.Columns:=2; MainForm.FileList.Update; end; if OptionsForm.LFilelist.Caption=FL3 then begin MainForm.FileList.Columns:=3; MainForm.FileList.Update; end; end; Procedure SetUpMainForm; begin //Подключение файла параметров MCIni:=TIniFile.Create('MC.Ini'); ReadIniMainForm; end; Procedure ReadIniMainForm; begin with MainForm do begin Top:=MCIni.ReadInteger('ASWindow','Top',100); Left:=MCIni.ReadInteger('ASWindow','Left',100); Height:=MCIni.ReadInteger('ASWindow','Height',100); Width:=MCIni.ReadInteger('ASWindow','Width',100); Directory.Width:=McIni.ReadInteger('ASWindow','Splitter',100); end; end; Procedure SaveIniMainForm; begin if MainForm.Top<>-4 then begin MCIni.WriteInteger('ASWindow','Top',MainForm.Top); MCIni.WriteInteger('ASWindow','Left',MainForm.Left); MCIni.WriteInteger('ASWindow','Width',MainForm.Width); MCIni.WriteInteger('ASWindow','Height',MainForm.Heig ht); end; end; Function FloatToInt(x:real):integer; begin FloatToInt:=StrToInt(FloatToStr(Int(X))); end; Procedure GetFormToCenter(Form:TForm); begin Form.Top:=FloatToInt(MainForm.Top+MainForm.Height/2-Form.Height/2); Form.Left:=FloatToInt(MainForm.Left+MainForm.Width/2-Form.Width/2); end; Function FormatSize(S:String):String; // перевод целого числа в читабельный формат (для размеров файлов / директорий ) Var i,j,n:integer; Tmp,Temp:String; begin Tmp:=''; for i :=Length(S) downto 1 do tmp:=tmp+S[i]; n:=0; for i:=1 to Length(tmp) do begin if n=3 then begin n:=0; Temp:=Temp+','; end; Temp:=Temp+Tmp[i]; n:=n+1; end; Tmp:=''; for i:=Length(Temp) downto 1 do Tmp:=Tmp+Temp[i]; FormatSize:=Tmp; end; end. unit UNotTrivial; //Вспамагательный модуль программы interface Uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons; Var IndexDelDir:integer; CurDeleteDir:string; Yes,No,All:boolean; SourseDir:Str ing; DestinationDir:String; IndexDeleteDirectory:integer; Procedure DelOneFile(dFile:string;Flag:boolean); Procedure DelNotEmptyDirectory(Dir:String); Procedure PasteDirectory(SDir,DDir:string); Procedure CreateDirInDestin(S,D:string); Procedure SortCMD irList; implementation Uses UMainForm, UMainForm_, UDeleteDir, DirOutLn, UAskDeleteCurrentFile, FMXUtils,UProgressForm; Procedure DelNotEmptyDirectory(Dir:string); //Удаление не пустой директории Var i:integer; Max:integer; EndFor:integer; begin //Создание временных списков GreateCopyMoveDirList(dir); //Удаление файлов из всех поддиректорий For i:=0 to MainForm.CMFileList.Items.Count-1 do begin DelOneFile(MainForm.CMFileList.Items[i],True); FDeleteDir.Label1.Visible:=False; FDeleteDir.LDir .Caption:='File '+MainForm.CMFileList.Items[i]+' is now deleting'; FdeleteDir.Update; end; //Сортировка временного списка директорий по возврастанию SortCMDirList; //Удаление уже пустых директорий For i:=MainForm.CMDirList.Items.Count-1 downto 0 do begin $I- RmDir(MainForm.CMDirList.Items[i]); FDeleteDir.LDir.Caption:='Directory '+MainForm.CMDirList.Items[i]+' is now deleting'; FDeleteDir.Label1.Visible:=False; FdeleteDir.Update; if IOResult<>0 then begin MainForm.CMDirList.Items.Clear; MainForm.CMFileList.Items.Clear; Exit; end; MainForm.CMDirList.Items.Delete(i); end; end; Function DesideSlash(str:string):integer; // Подсчёт количества "\ " для сортировки Var D,r:integer; begin d:=0; for r:=0 to Length(str) do if str[r]='\' then d:=d+1; DesideSlash:=D; end; Procedure SortCMDirList; //Пузырьковая сортировка списка директорий Var i:integer; Strl,StrH:string; Flag:Boolean; begin Flag:=False; if MainForm.CMDirList.Items.Count=0 then Flag:=true; If MainForm.CMDirList.Items.Count<>1 then repeat For i:=0 to MainForm.CMDirList.Items.Count-2 do begin strl:=MainForm.CMDirList.Items[i]; StrH:=MainForm.CMDirList.Items[i+1]; if DesideSlash(StrL)>DesideSlash(StrH) then begin MainForm.CMDirList.Ite ms[i]:=StrH; MainForm.CMDirList.Items[i+1]:=StrL; end; end; For i:=0 to MainForm.CMDirList.Items.Count-2 do begin if DesideSlash(MainForm.CMDirList.Items[i])<=DesideSlash(MainForm.CMDirList.Items[i+1]) then begin Flag:=True; end else begin Flag :=False; Break; end; end; Until (Flag); end; Procedure CreateOneDirInDes(d,s,str:string); Var i,Point:integer; begin For i:=0 to Length(str) do if (str[i]<>s[i]) or (str[i]='\') then begin if (Str[i]='\') and (Str[i+1]=S[i+1]) then Point:=i else break; end; if D[Length(D)]='\' then Point:=Point+1; For i:=Point to Length(str) do d:=d+str[i]; if not CreateDir(D) then begin end else begin MainForm.Directory.SetDirectory(D); MainForm.Directory.BuildTree; end; end; Procedure Create DirInDestin(S,D:string); //Создание дерева директорий при копировании /переносе Var P,i,j:integer;str,str1:string; EndFor:integer; begin MainForm.StatusBar.Panels[1].Text:='Build destination Tree, Please Wait....'; SortCMDirList; For i:=0 to MainForm.CMDirList.Items.Count-1 do begin str:=MainForm.CMDirList.Items[i]; CreateOneDirInDes(D,S,str); end; end; Function CheskSizeInDestination:boolean; // Проверка доступного места на диске Var i:integer; Size:integer; begin For i:=0 to MainForm.CMFileList.Items.Count-1 do size:=size+GetFileSize(MainForm.CMFileList.Items[i]); if DiskFree(0) < size then CheskSizeInDestination:=False else CheskSizeInDestination:=True; end; Function CreateDestinPathForFile(S,D,f:string):string ; Var Point,i:integer; begin For i:=0 to Length(s) do if S[i]='\' then Point:=i; if D[Length(d)]='\' then Point:=Point+1; For i:=Point to Length(f) do d:=d+f[i]; For i:=Length(d) downTo 0 do if D[i]='\' then begin D[i+1]:=#0; Break; end; CreateDestinPathForFile:=d; end; Procedure PasteFileInDest(S,D:string); //Вставка файлов при копир . /перен . директории Var i:integer; Str:string; F:String; begin MainForm.Directory.Repaint; GetFormToCenter(ProgressForm); ProgressForm.Show; Size AllCopy:=GetSizeAllFiles(MainForm.CMFileList); While (MainForm.CMFileList.Items.Count<>0) do begin Str:=CreateDestinPathForFile(S,D,MainForm.CMFileList.Items[0]); CopyFile(MainForm.CMFileList.Items[0],Str); If not DoingWithDir then DelOneFile(MainForm.CMFileList.Items[0],False); MainForm.CMFileList.Items.Delete(0); end; ProgressForm.Close; MainForm.FileList.Update; end; Procedure PasteDirectory(SDir,DDir:string); //Вставка директории Var i:integer; begin if CheskSizeInDest ination then begin CreateDirInDestin(SDir,DDir); PasteFileInDest(Sdir,DDir); if not DoingWithDir then begin end; end else begin if DoingWithDir then begin Application.MessageBox('Not Free Spase','Error',MB_APPLMODAL+MB_OK); end else begin end; end; end; Procedure DelOneFile(dFile:string;Flag:boolean); //Удаление одного файла Var F:TSearchRec; begin if flag then begin FileSetAttr(dFile,faArchive); DeleteFile(dFile) end else begin FindFirst(dFile,faAnyFile,F); if (F.Attr=32) or (F.Attr=0) then DeleteFile(dFile) else begin AskDeleteCurrentFile.FileName.Caption:=F.Name; AskDeleteCurrentFile.FileName.Caption:=AskDeleteCurrentFile.FileName.Caption+' is Read Only'; AskDeleteCurrentFile.ShowModal; if not No Then begin FileSetAttr(dFile,faArchive); DeleteFile(dFile); end; end; end; FindClose(f); end; end. Форма поиска файлов по маске unit UFindForm; // Форма поиска файлов interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, Tabnotbk, StdCtrls, Buttons, Menus, ExtCtrls; type TFindForm = class(TForm) FileWasFind: TListBox; StatusFind: TStatusBar; Table: TTabbedNotebook; BitBtn1: TB itBtn; CBFindMask: TComboBox; Label1: TLabel; GroupBox1: TGroupBox; RBCurDir: TRadioButton; RBCurDrive: TRadioButton; RBAllDrives: TRadioButton; GroupBox2: TGroupBox; LCurDir: TLabel; ExitSearch: TButton; Label2: TLabel; Label3: TLabel; DateIsAfter: TDateTimePicker; DateIsBefore: TDateTimePicker; Label4: TLabel; Label5: TLabel; SGreater: TEdit; SLess: TEdit; CBAdvSearch: TCheckBox; Menu: TPopupMenu; Run1: TMenuItem; GoTo1: TMenuItem; CBCase: TCheckBox; B2: TBitBtn; B1: TButto n; Timer1: TTimer; procedure FormActivate(Sender: TObject); procedure BitBtn1Click(Sender: TObject); procedure CBFindMaskDropDown(Sender: TObject); procedure RBCurDirClick(Sender: TObject); procedure RBCurDriveClick(Sender: TObject); procedure RBAllDrivesClick(Sender: TObject); procedure ExitSearchClick(Sender: TObject); procedure CBAdvSearchClick(Sender: TObject); procedure MenuPopup(Sender: TObject); procedure Run1Click(Sender: TObject); procedure GoTo1Click(Sender: TObject); procedure B2Click(Sender: TObject); procedure B1Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private public Procedure FindInCurrentDir(CurDir:string); end; Type PRe c = ^TRec; TRec = record Name:TSearchRec; SubDir:string; Next:PRec; end; var FindForm: TFindForm; FileMaskToFind:array[1..10] of string; EndFindFlag:boolean; Procedure ZdvigMask(s:string); Procedure InitFileMask; Procedure WhereFind; Procedure FindFile; Procedure FindInAllDr; function CompareFileWithMask(FileName:string):boolean; implementation uses UMainForm,FmxUtils; $R *.DFM function CompareFileWithMask(FileName:string):boolean; //Сравнение имени и расширения очередного файла с маской Var MaskN,Mask,MaskR,FN,FR:string; EndFor,i,j:integer; tmp,R:boolean; begin FN:=''; Mask:=FindForm.CBFindMask.Text; if not FindForm.CBCase.Checked then begin Mask:=UpperCase(Mask); FileName:=UpperCase(FileName); end; FR:=ExtractFileExt(FileName); For i:=1 to Length(FileName) do if FileName[i]<>'.' then FN:=FN+FileName[i] else break; For i:=1 to Length(Mask) do if Mask[i]<>'.' then MaskN:=MaskN+Mask[i] else break; MaskR:=ExtractFileExt(Mask); //начало мучений с расширением if Length(MaskR)< Length(FR) then EndFor:=Length(MaskR) else EndFor:=Length(FR); if (MaskR[2]='*') and (FR<>'') then begin j:=Length(MaskR); for i:=Length(FR) downTo Length(Fr)-EndFor do begin if (MaskR[j]=FR[i]) and (MaskR[j]<>'*') then begin j:=j-1; R:=True; end Else if (MaskR[j]='*') and (R=True) then begin break; end else begin R:=False; Break; end; end; end; If MaskR[Length(MaskR)]='*' then begin j:=1; for i:=1 to EndFor do begin if (MaskR[j]=FR[i]) and (MaskR[j]<>'*') then begin j:=j+1; R:=True; end else begin if (MaskR[j]='*') and (R=True) then begin break; end else begin R:=False; Break; end; end; end; end; for i:=0 to Length(MaskR) do if MaskR[i]<>'*' then tmp:=True else begin tmp:=False; break; end; if tmp then if Length(MaskR)=Length(FR) then begin for i:=0 to Length(FR) do if MaskR[i]=FR[i] then R:=True else begin R:=False; break; end; end else begin R:=False; end; //вроде конец с му чениями по расширению //начало мучений с именем if R then begin if Length(MaskN)'*') then begin j:=j-1; R:=True; end else begin if (MaskN[j]='*')and(R=True) then begin break; end else begin r:=false; break; end; end; end; end; if MaskN[Length(MaskN)]='*' then begin j:=0; for i:=0 to EndFor do begin if (MaskN[j]=FN[i]) and (MaskN[j]<>'*') then begin j:=j+1; r:=True; end else begin if (MaskN[j]='*')and(R=True) then break else begin R:=False; break; end; end; end; end; for i:=0 to Length(MaskN) do if MaskN[i] <>'*' then tmp:=True else begin tmp:=False; break; end; if tmp then if Length(MaskN)<>Length(FN) then r:=False else begin for i:=0 to Length(MaskN) do if MaskN[i]=FN[i] then r:=True else begin r:=False; break; end; end; end; CompareFileWithMask:=R; end; Procedure FindFile; // Поиск файла Var Dir:string; SubDir:string; Dr:Char; begin //Поиск в текущей директории If FindForm.RBCurDir.Checked then begin Dir:=FindForm.LCurDir.Caption; if Dir[Length(Dir)]<>'\' then Dir:=Dir+'\'; FindForm.FindInCurrentDir(Dir); end; //Поиск на текущем диске If FindForm.RBCurDrive.Checked then begin Dir:=FindForm.LCurDir.Caption; if Dir[Length(Dir)]<>'\' then Dir:=Dir+'\'; FindForm.FindInCurrentDir(Dir); end; //Поиск на все х дисках If FindForm.RBAllDrives.Checked then begin FindInAllDr; end; end; Procedure TFindForm.FindInCurrentDir(CurDir:string); //Рекурсивная Процедура поиска в текущей директории и поддиректориях Var SizeF:integer; i:integer; EndList:boolean; F:TSearchRec; D:string; Key:Char; begin FindForm.StatusFind.Panels[1].Text:=CurDir; FindFirst(CurDir+'*.*',faAnyFile,F); FindNext(F); repeat // вставить А SМовый код для прерывания по клавише ESC If FindForm.CBAdvSearch.Checked and (F.Attr<>faDirec tory) then begin if not(((F.Size < StrToInt(FindForm.SLess.Text)) and (F.Size > StrToInt(FindForm.SGreater.Text)))) then Continue; if not(((FileDateTime(CurDir+F.Name) FindForm.DateIsAfter.D ate))) then Continue; end; if F.Attr=faDirectory then if (F.Name<>'.') and (F.Name<>'..') then begin FindInCurrentDir(CurDir+F.Name+'\'); end; if (F.Name<>'..') and (F.Name<>'.') then if CompareFileWithMask(F.Name) then begin FindForm.FileWasFind .Items.Add(CurDir+F.Name); FindForm.StatusFind.Panels[0].Text:=IntToStr(StrToInt(FindForm.StatusFind.Panels[0].Text)+1); FindForm.FileWasFind.Refresh; end; Until((FindNext(F) <> 0)); and (KeyPressed)); FindClose(F); end; Procedure FindInAllDr; //П оиск на всех дисках Var Dir:string; i:integer; begin for i:=1 to MainForm.DrBox.Items.Count-1 do begin dir:=MainForm.DrBox.Items.Strings[i]; dir:=UpperCase(dir[1]); FindForm.FindInCurrentDir(dir+':\'); end; end; Procedure WhereFind; //Интерфейс ная часть Var i:integer; begin if FindForm.RBCurDir.Checked then begin FindForm.LCurDir.Caption:=MainForm.Directory.Directory; end; if FindForm.RBCurDrive.Checked then begin FindForm.LCurDir.Caption:=UpperCase(MainForm.Directory.Drive)+':\'; end; if FindForm.RBAllDrives.Checked then begin FindForm.LCurDir.Caption:=''; for i:=1 to MainForm.DrBox.Items.Count-1 do begin FindForm.LCurDir.Caption:=FindForm.LCurDir.Caption+UpperCase(MainForm.DrBox.Items.Strings[i][1])+':\ ' end; end; end; Procedure InitFileMask; //Проверка маски поиска для дальнейшего занесения в список масок Var i:integer; tempStr:string; begin tempStr:=FindForm.CBFindMask.Text; FindForm.CBFindMask.Clear; for i:=1 to 10 do begin if FileMaskToFind[i]<>'' then Fin dForm.CBFindMask.Items.Add(FileMaskToFind[i]); end; FindForm.CBFindMask.Text:=tempStr; end; Procedure ZdvigMask(s:string); // Формирование списка масок поиска для хранения Var i:integer; tmp:boolean; begin if FindForm.CBFindMask.Text<>'*.*' then begin for i:=10 downto 0 do if FindForm.CBFindMask.Items[i]<>FindForm.CBFindMask.Text then tmp:=true else begin tmp:=False; break; end; if tmp then for i:=10 downto 2 do begin FileMaskToFind[i]:=FileMaskToFind[i-1]; end; FileMaskToFind[1]:=s ; end; end; procedure TFindForm.FormActivate(Sender: TObject); //Установка начальных значений для виз . компонент формы поиска begin Timer1.Enabled:=True; InitFileMask; DateIsBefore.Date:=Date; DateIsAfter.Date:=Date; CBFindMask.Text:='*.*'; CBCase.Checked:=False; RBCUrDir.Checked:=True; LCurDir.Caption:=MainForm.Directory.Directory; SGreater.Text:=''; SLess.Text:=''; CBAdvSearch.Checked:=False; FileWasFind.Clear; FindForm.StatusFind.Panels[0].Text:='0'; FindForm.ActiveControl:=CBFind Mask; end; procedure TFindForm.BitBtn1Click(Sender: TObject); //Начать поиск файлов begin ZdvigMask(CBFindMask.Text); FindForm.FileWasFind.Clear; FindForm.StatusFind.Panels[0].Text:='0'; FindForm.FileWasFind.Sorted:=False; FindForm.Refresh; FindFile ; FindForm.FileWasFind.Sorted:=True; FindForm.FileWasFind.Refresh; FindForm.StatusFind.Panels[1].Text:=''; end; procedure TFindForm.CBFindMaskDropDown(Sender: TObject); begin InitFileMask; end; procedure TFindForm.RBCurDirClick(Sender: TObject); begin WhereFind; end; procedure TFindForm.RBCurDriveClick(Sender: TObject); begin WhereFind end; procedure TFindForm.RBAllDrivesClick(Sender: TObject); begin WhereFind; end; procedure TFindForm.ExitSearchClick(Sender: TObject); begin FindForm.Close; end; procedure TFindForm.CBAdvSearchClick(Sender: TObject); begin if CBAdvSearch.Checked then begin Table.ActivePage:='Advanced Search'; end; end; procedure TFindForm.MenuPopup(Sender: TObject); var i:integer; begin for i:=0 to FindForm.FileWasFind.Items.Count-1 do If FindForm.FileWasFind.Selected[i] then begin FindForm.Run1.Enabled:=True; FindForm.GoTo1.Enabled:=True; Break; end else begin FindForm.Run1.Enabled:=False; FindForm.GoTo1.Enabled:=False; end; end; procedure TFindForm.Run1Click(Sender: TObject); //Запуск файла из формы поиска Var i:integer; begin For i:=0 to FindForm.FileWasFind.Items.Count-1 do if FindForm.FileWasFind.Selected[i] then begin ExecuteFile(FindForm.FileWasFind.Items[i],'','',SW_SHOW); break; end; FindForm.Close; end; Procedure GoToFile; // Преход в главную форму к месту расположения найденного файла Var i,j:integer; Dir,FileName:string; begin for i:=0 to FindForm.FileWasF ind.Items.Count-1 do begin if FindForm.FileWasFind.Selected[i] then begin FileName:=ExtractFileName(FindForm.FileWasFind.Items[i]); FindForm.Close; Dir:=FindForm.FileWasFind.Items[i]; for j:=Length(Dir) downTo 0 do begin if Dir[j]='\' then begin Dir[j+1]:=#0; break; end; end; MainForm.Directory.SetDrive(Dir[1]); MainForm.Directory.Expand(1); MainForm.Directory.SetDirectory(Dir); MainForm.Directory.BuildTree; MainForm.FileList.Refresh; for j:=0 to MainForm.FileList.Items.Count-1 do begin if MainForm.FileList.Items[j]=FileName then begin MainForm.FileList.Selected[j]:=True; MainForm.FileList.Refresh; break; end; end; break end end; end; procedure TFindForm.GoTo1Click(Sender: TObject); begin GotoFile; end; procedure TFindForm.B2Click(Sender: TObject); begin GotoFile; end; procedure TFindForm.B1Click(Sender: TObject); begin Run1Click(Sender); end; procedure TFindForm.Timer1Timer(Sender: TObject); begin if FileWasFind.SelCount<=0 then begin B1.Enabled:=F alse; B2.Enabled:=False; end else begin B1.Enabled:=True; B2.Enabled:=True; end; end; procedure TFindForm.FormClose(Sender: TObject; var Action: TCloseAction); begin Timer1.Enabled:=False; end; end. Изменённый стандартный модуль unit FmxUtils; //Изменённый стандартный модуль // Внесйнные изменения отмечены " " interface uses SysUtils, Windows, Classes, Consts; type EInvalidDest = class(EStreamError); EFCantMove = class(EStreamError); procedure CopyFile(const FileName, DestName: string); procedure MoveFile(const FileName, DestName: string); function GetFileSize(const FileName: string): LongInt; function FileDateTime(const FileName: string): TDateTime; function HasAttr(const FileName: string; Attr: Word): Boolean; function ExecuteF ile(const FileName, Params, DefaultDir: string; ShowCmd: Integer): THandle; Var AllReadByteFile:Real; SizeAllCopy:Longint; implementation uses Forms, ShellAPI, UProgressForm, UMainForm_, UNotTrivial,UMainForm; const SInvalidD est = 'Destination %s does not exist'; SFCantMove = 'Cannot move file %s'; procedure CopyFile(const FileName, DestName: TFileName); var FileSizeProgress,ReadByteFile:Real; CopyBuffer: Pointer; buffer for copying BytesCopied: Longint; Source, Dest : Integer; handles Destination: TFileName; holder for expanded destination name const ChunkSize: Longint = 8192; copy in 8K chunks begin Destination := ExpandFileName(DestName); expand the destination path if HasAttr(Destination, faDire ctory) then if destination is a directory... Destination := Destination + ExtractFileName(FileName); ...clone file name GetMem(CopyBuffer, ChunkSize); allocate the buffer try Source := FileOpen(FileName, fmShareDenyWrite); open source fil e if Source < 0 then raise EFOpenError.CreateFmt(SFOpenError, [FileName]); try Dest := FileCreate(Destination); create output file; overwrite existing if Dest < 0 then raise EFCreateError.CreateFmt(SFCreateError, [Destination]); try //Ведение с татистики в форме прогресса копирования If MainForm.CMFileList.Items.Count=0 then SizeAllCopy:=GetSizeAllFiles(MainForm.TempCopyMove); ProgressForm.ProgresCopy.Progress:=0; ProgressForm.Total.Caption:=FormatSize(IntToStr(SizeAllCopy)); FileS izeProgress:=GetFileSize(FileName); ProgressForm.LFrom.Caption:=FileName; ProgressForm.LFileSize.Caption:=FormatSize(IntToStr(GetFileSize(FileName))); ProgressForm.LTo.Caption:=Destination; ProgressForm.Update; ReadByteFile:=0; repeat Byte sCopied := FileRead(Source, CopyBuffer^, ChunkSize); read chunk if ChunkSize>GetFileSize(FileName)then ReadByteFile:=ReadByteFile+GetFileSize(FileName) else ReadByteFile:=ReadByteFile+ChunkSize; ProgressForm.LREadyWrite.Caption:=FormatSi ze(FloatToStr(ReadByteFile)); ProgressForm.Update; ProgressForm.ProgresCopy.Progress:=FloatToInt(((100*ReadByteFile)/(FileSizeProgress+1))); End Paste if BytesCopied > 0 then if we read anything... FileWrite(Dest, CopyBuffer^, BytesCopied); ...write chunk ProgressForm.ProgresCopy.Repaint; ProgressForm.AllProgresCopy.Repaint; until BytesCopied < ChunkSize; until we run out of chunks AllReadByteFile:=AllReadByteFile+GetFileSize(FileName); ProgressForm.Ready.Caption:=FormatSize(FloatToStr(AllReadByteFile)); ProgressForm.AllProgresCopy.Progress:=FloatToInt(((100*(AllReadByteFile)/(SizeAllCopy+1)))); ProgressForm.ProgresCopy.Progress:=100; finally FileClose(Dest); close the destinat ion file end; finally FileClose(Source); close the source file end; finally FreeMem(CopyBuffer, ChunkSize); free the buffer end; end; MoveFile procedure Moves the file passed in FileName to the directory specified in DestDir. Tri es to just rename the file. If that fails, try to copy the file and delete the original. Raises an exception if the source file is read-only, and therefore cannot be deleted/moved. procedure MoveFile(const FileName, DestName: string); var Destination: string; begin Destination := ExpandFileName(DestName); expand the destination path if not RenameFile(FileName, Destination) then try just renaming begin CopyFile(FileName, Destination); copy it over to destination... DelOneFil e(FileName,All); end; end; GetFileSize function Returns the size of the named file without opening the file. If the file doesn't exist, returns -1. function GetFileSize(const FileName: string): LongInt; var SearchRec: TSearchRec; begin if Fi ndFirst(ExpandFileName(FileName), faAnyFile, SearchRec) = 0 then Result := SearchRec.Size else Result := -1; end; function FileDateTime(const FileName: string): System.TDateTime; begin Result := FileDateToDateTime(FileAge(FileName)); end; function HasAttr(const FileName: string; Attr: Word): Boolean; begin Result := (FileGetAttr(FileName) and Attr) = Attr; end; function ExecuteFile(const FileName, Params, DefaultDir: string; ShowCmd: Integer): THandle; var zFileName, zParams, zDir: arra y[0..79] of Char; begin Result := ShellExecute(Application.MainForm.Handle, nil, StrPCopy(zFileName, FileName), StrPCopy(zParams, Params), StrPCopy(zDir, DefaultDir), ShowCmd); end; end. Краткое руководство пользователя. Программа предназначена для управления файловой системой операционной системы Windows ’ 95/ ’ 98, в программе предусмотрены следующие возможности : Копирование , переименование , перенос , удаление файлов и директорий ; Определение и установка атрибутов файлов ; Расширенный поиск файлов по ма ске ; Запуск программ со строкой параметров ; Применение маски-фильтра при просмотре списка файлов ; Создание директорий ; Определение размера директории ; Определение суммарного объёма дискового пространства занимаемого группой файлов ; Получение информации о т екущем диске ; Запуск внешних программ редакторов для просмотра и редактирования файлов ; Установка интерфейсных параметров программы. Обзор интерфейса программы МС. Интерфейс программы на четыре функциональные части Главное меню программы ; Панель инстру ментов ; Список файлов ; Список директорий ; Главное меню программы содержит с себе три компоненты управления программой : File View Options Компонента File содержит в себе основные функции управления файлами и директориями (см . рис . 1). Функция запуска пр ограмм Run доступна только тогда , когда выделенный файл является исполняемой программой . При выборе данного пункта . Появляется форма , содержащая строку параметров , а также параметр запуска – вид формы окна запуска (см . рис . 2). Рис 1. Меню File. Рис 2. Форма запуска файлов со строкой параметров. Функции Cut, Copy, Paste, Delete (Вырезать , Копировать , Вставить , Удалить ) – стандартные функции управления файлами /директориями . При невозможности выполнения выше перечисленных действий , данные функции недоступны . Функция Rename (Переименовать ) запрашивает у пользователя новое имя для файла / директории в фо рме показанной на рисунке 3. Рис 3. Переименование файлов / директорий Функция Delete (Удаления ), удаляет выделенные элементы в зависимости от активной рабочей области . Если последнее , перед вызовом этой функции , выделение производилось в области файлов , то будут удалены выделенные файлы , если же активная область директорий то удалена будет директория. Функция Find (Найти ) обеспечивает расширенный поиск файлов по маске в облас ти поиска указанной пользователем . Параметры и маска поиска задается в форме показанной на рисунке 4 Рис 4. Поиск файлов. Параметрами поиска являются задание области поиска , возможны три области : текущая директория , текущий диск и все жесткие диски (включая подключённые сетевые диски ). Также есть возможность расширенного поиска с указанием ограничений в дате создания файла создания и его предполагаемых размерах . Во время поис к а в строке статуса формы отражается количество найденных файлов , директория в которой осуществляется поиск . После того как были найдены файлы , возможен возврат в главную форму программы и переход к месту положения выбранного файла , а также запуск интересу ю щего файла (редактирование во внешнем редакторе , если выбранный файл не является приложением ). Для удобства задания маски поиска предусмотрено хранение 10-и последних масок в открывающемся списке. Функция Exit (Выход ) производит выход из программы. Всем вы ше описанным функциям сопоставлены горячие клавиши. Компонента View содержит в себе функции фильтра , получения информации о диске , получение и установка атрибутов файла , получение размера текущей директории , выделения всех файлов находящихся в текущей дир ектории и инверсное выделение файлов. Функция File Mask (Маска фильтра ) запрашивает у пользователя в форме Get File Mask маску для отображения файлов . Для отмены маски необходим повторный вызов функции и задание маски предлагаемой по умолчанию. Функция Inf o (Информация ) предоставляет пользователю информацию о текущем диске (объём свободного и занятого пространства ), а также информацию о текущей директории. Функция File Attributes (Атрибуты файла ) дает возможность просмотра текущих атрибутов файла и изменени я этих атрибутов . В случае нескольких файлов возможно групповое присвоение новых атрибутов. Функция Size Directory (Размер директории ) выводит в статус строке списка директорий размер текущей директории . Функция Select All в ыделяет все файлы , находящиеся в данной директории. Функция Invert Select и нвертирует выделение файлов . С файлов которые были выделены , выделение снимается , а остальные файлы выделяются. Компонента Options (Параметры ) выводит на экран форму параметров программы см рис 5 , в которой польз ователь Рис 5. Параметры программы может установить параметры интерфейса программы. Параметры – наличие статус строки , количество колонок в списке файлов (от 1 до 3), запраш ивать подтверждение при выходе из программы . Так же существует механизм установки значения параметров по умолчанию (Запрашивать подтверждение при выходе , Наличие статус строки , 1 колонка в списке файлов ). Панель инструментов содержит в себе некоторые из ф ункций расположенных в главном меню , а также кнопка перехода на один уровень вверх в списке директорий и список дисков (включая сетевые диски подключенные операционной системой до запуска программы ). Внешний вид панели инструментов показан на рисунке 6. Рис 6 Панель инструментов. Список Файлов , предназначен для просмотра списка файлов расположенных в текущей директории . При нажатии правой кнопки мыши вызывается контекстное меню , в котором имеются функции копирования , удаления , переименования , вставки . Также у списка файлов существует статус-строка в которой выводится информация о отмеченном файле (имя , размер , дату и время создания ). В случае группы отмеченных файлов статус– стр о ка показывает какой суммарный объём байт занимают отмеченные файлы на диске . Список директорий, предназначен для просмотра директорий находящихся на текущем диске . Список имеет двевовидную структуру корнем которой являеться текущий диск . При нажатии прав ой кнопки мыши появляться контектсное меню в котором перечислены функции работы с директориями. Использование функций : Как упоминалось выше программа имеет набор функций работы с файлами . Некоторые требующие определённой последоваьтельности действий буду т рассмотрены в данном разделе. Копирование / Перенос. Для копирования файлов / директории (в дальнейшем будем говорить только о файлах , так как процессы идентичны ) необходимо выполнить следующую последовательность действий : Выделить файлы которые необходи мо скопировать Существуют несколько способов выделения группы файлов , (те кто хорошо знаком в операционной системой Windows ’ 95 этот раздел , как и все последующие могут пропустить ) выделение мышкой с применением клавиш Ctrl и Shift , клавиша Ctrl предназначе на для выделения в группу файлов отдельно стоящих в списке , а клавиша Shift предназначена для выделения “от начального файла , до конечного”. Выполнить функцию копировать посредством выбора её из любого выше описанного места интерфейса Выбрать место назначе ния копирования и выполнить функцию вставить. Далее на экране будет отражён процесс копирования в форме Progress … Удаление. Удаление файлов происходит при помощи вызова функции удаления из любой части интерфейса . После вызова , (удалить директорию ) в случ ае если директория не пуста , будет запрошено потвержжение на удаление , (файл (ы )) будет запрошено потверждение удаления и приведён список удаляемых файлов , если удаляемый файл имеет атрибуты ReadOnly (только для чтения ) также будет запрошено подтверждение. Переименование. При переименовании на экран выводиться форма , предлагающая ввести новое имя для файла.
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Финансовое право
32Хозяйственное право
33Экологическое право
34Юриспруденция
 
35Иностранные языки
36Информатика, информационные технологии
37Базы данных
38Компьютерные сети
39Программирование
40Искусство и культура
41Краеведение
42Культурология
43Музыка
44История
45Биографии
46Историческая личность
47Литература
 
48Маркетинг и реклама
49Математика
50Медицина и здоровье
51Менеджмент
52Антикризисное управление
53Делопроизводство и документооборот
54Логистика
 
55Педагогика
56Политология
57Правоохранительные органы
58Криминалистика и криминология
59Прочее
60Психология
61Юридическая психология
 
62Радиоэлектроника
63Религия
 
64Сельское хозяйство и землепользование
65Социология
66Страхование
 
67Технологии
68Материаловедение
69Машиностроение
70Металлургия
71Транспорт
72Туризм
 
73Физика
74Физкультура и спорт
75Философия
 
76Химия
 
77Экология, охрана природы
78Экономика и финансы
79Анализ хозяйственной деятельности
80Банковское дело и кредитование
81Биржевое дело
82Бухгалтерский учет и аудит
83История экономических учений
84Международные отношения
85Предпринимательство, бизнес, микроэкономика
86Финансы
87Ценные бумаги и фондовый рынок
88Экономика предприятия
89Экономико-математическое моделирование
90Экономическая теория

 Анекдоты - это почти как рефераты, только короткие и смешные Следующий
"Москва.. Еду, подрезали, посигналили, заорали. Пришлось приоткрыть оконце:) Извинялись долго... Ох, какие недисциплинированные водители бывают" - жалуется Николай Валуев в твиттере.
Anekdot.ru

Узнайте стоимость курсовой, диплома, реферата на заказ.

Обратите внимание, реферат по программированию "Разработка файловой оболочки", также как и все другие рефераты, курсовые, дипломные и другие работы вы можете скачать бесплатно.

Смотрите также:


Банк рефератов - РефератБанк.ру
© РефератБанк, 2002 - 2016
Рейтинг@Mail.ru