ПЕРЕЛІК ДИСЦИПЛІН:
  • Адміністративне право
  • Арбітражний процес
  • Архітектура
  • Астрологія
  • Астрономія
  • Банківська справа
  • Безпека життєдіяльності
  • Біографії
  • Біологія
  • Біологія і хімія
  • Ботаніка та сільське гос-во
  • Бухгалтерський облік і аудит
  • Валютні відносини
  • Ветеринарія
  • Військова кафедра
  • Географія
  • Геодезія
  • Геологія
  • Етика
  • Держава і право
  • Цивільне право і процес
  • Діловодство
  • Гроші та кредит
  • Природничі науки
  • Журналістика
  • Екологія
  • Видавнича справа та поліграфія
  • Інвестиції
  • Іноземна мова
  • Інформатика
  • Інформатика, програмування
  • Юрист по наследству
  • Історичні особистості
  • Історія
  • Історія техніки
  • Кибернетика
  • Комунікації і зв'язок
  • Комп'ютерні науки
  • Косметологія
  • Короткий зміст творів
  • Криміналістика
  • Кримінологія
  • Криптология
  • Кулінарія
  • Культура і мистецтво
  • Культурологія
  • Російська література
  • Література і російська мова
  • Логіка
  • Логістика
  • Маркетинг
  • Математика
  • Медицина, здоров'я
  • Медичні науки
  • Міжнародне публічне право
  • Міжнародне приватне право
  • Міжнародні відносини
  • Менеджмент
  • Металургія
  • Москвоведение
  • Мовознавство
  • Музика
  • Муніципальне право
  • Податки, оподаткування
  •  
    Бесплатные рефераты
     

     

     

     

     

     

         
     
    Розробка файлової оболонки
         

     

    Інформатика, програмування
    Розробка файлової оболонки
    Постановка завдання.
    Завдання полягає в розробці файлової оболонки для операційної системи
    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.FindInCurrentDir (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. AttrfaDirectory) then
    begin
    //Перевірка на розмір знайденого файлу
    //Розмір і час створення знайдений файл повинні перебувати в межах заданих
    //Користувачем
    if not (((F. Size
    (F. Size> StrToInt (FindForm.SGreater.Text)))) then Continue;
    if not (((FileDateTime (CurDir + F. Name)
    (FileDateTime (CurDir + F. Name)> FindForm.DateIsAfter.Date))) then Continue;
    end;
    //Перевірити чи не є знайдений файл директорією
    if F. Attr = faDirectory then
    if (F. Name '.') and (F. Name'..') then
    begin
    //Якщо знайдений файл - директорія, рекурсивний виклик пошуку в цiй
    директорії
    FindInCurrentDir (CurDir + F. Name +'');< br /> 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
    //Компоненти Plug-in (стандартні)
    uses
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
    Menus, ExtCtrls, ComCtrls, StdCtrls, FileCtrl, 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: TSpeedButton;
    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);
    procedure 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: TObject);
    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 (Sender: 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);
    procedure SCopyClick (Sender: TObject);
    procedure FileListClick (Sender: TObject);
    procedure CutDirClick (Sender: TObject);
    procedure Cut1Click (Sender: TObject);
    procedure Copy1Click (Sender: TObject);
    procedure Paste1Click (Sender: TObject);
    procedure Delete1Click (Sender: TObject);
    procedure RenameClick (Sender: TObject);
    procedure FormResize (Sender: TObject);
    procedure InvertSelectClick (Sender: TObject);
    procedure FileListKeyUp (Sender: TObject; var Key: Word;
    Shift: TShiftState);
    procedure SelectallClick (Sender: TObject);
    private
    public
    end;
    var
    MainForm: TMainForm;
    Size: integer;
    implementation
    //Компоненти Plug-in (не стандартні)
    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.FormCreate (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 ]+':');< br /> MainForm.Directory.BuildTree;
    end;
    procedure TMainForm.DrivesMouseUp (Sender: TObject; Button: TMouseButton;
    Shift: TShiftState; X, Y: Integer);
    begin
    //перемальовування списку директорій при необхідності
    Directory.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 '.') 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) + 'dir. &
    '+ IntToStr (MainForm.FileList.Items.Count) +
    'Files';
    MainForm.StatusBar.Panels [1]. Text :='';< br /> //Визначення активних кнопок панелі управління
    If UpperCase (MainForm.Directory.Directory) = UpperCase (MainForm.DrBox.Drive +':')
    then
    begin
    Up.Enabled: = False;
    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
    ProgressForm.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
    with 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 TMainForm.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
    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
    FindForm.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 TMainForm.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 UpperCase (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 ...';< br /> 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 (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 ReselectAllFile;
    //Інвертування виділення файлів
    Var i: integer;
    begin
    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 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 (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 (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.PasteDirClick (Sender: TObject);
    //Вставка директорії
    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)
    begin
    CopyDir.Enabled: = False;
    CutDir.Enabled: = False;
    DeleteDir.Enabled: = False;
    RenameDir.Enabled: = False;
    end
    else
    begin
    CutDir.Enabled: = 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: TObject);
    //Запуск програми з рядком параметрів
    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 +':';< br /> S: = MainForm.FileList.Mask;
    MainForm.FileList.Mask :='>.>';< br /> FindFirst (MainForm.DrBox.Drive +':*.*', faDirectory, F);
    Repeat
    Until ((FindNext (F) 0) or ((F. Attr = faDirectory) and ((F. Name '.') Or
    (F. Name'..'))));< br /> if F. AttrfaDirectory then
    MainForm.Directory.SetDirectory (MainForm.DrBox.Drive +':')< br /> else
    MainForm.Directory.SetDirectory (MainForm.DrBox.Drive +':'+ F. Name);
    MainForm.Directory.BuildTree;
    MainForm.Directory.SetDirectory (MainForm.DrBox.Drive +':');< br /> 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.Count0 then
    begin
    ProgressForm.Show;
    PasteFileFromTemp;
    ProgressForm.Close;
    end;
    If MainForm.CMDIrList.Items.Count0 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 TMainForm.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 (MainForm.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.Count0 then
    begin
    ProgressForm.Show;
    PasteFileFromTemp;
    ProgressForm.Close;
    end;
    If MainForm.CMDIrList.Items.Count0 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.Delete1Click (Sender: TObject);
    //Видалення залежно від контексту
    begin
    if (MainForm.FileList.Focused) and (MainForm.FileList.SelCount> 0) then
    begin
    AskDeleteForm.Show;
    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.RenameClick (Sender: TObject);
    //Перейменування в залежності від контексту
    begin
    If MainForm.Directory.Focused then
    begin
    GetFormToCenter (RenameDirForm);
    RenameDirForm.ShowModal;
    end;
    if MainForm.FileList.Focused then
    begin
    RenameFileForm.ShowModal;
    end;
    end;
    procedure TMainForm.FormResize (Sender: TObject);
    //Накладення обмежень на мінімальні розміри головної форми
    begin
    if MainForm.Width
    MainForm.Width: = 391;
    if MainForm.Height
    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.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;
    procedure TMainForm.SelectallClick (Sender: TObject);
    begin
    SelectAllF ('*');< br /> 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 DeleteEmptyDirectory (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 ]+'*';//. Delete (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 +':');< br /> 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 GetSizeAllFiles (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: = MainForm.Directory.Directory +'';< br /> 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.TempCopyMove.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 +'';< br /> 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 ]:='';< br /> 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.ReadBool ( '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.Height);
    end;
    end;
    Function FloatToInt (x: real): integer;
    begin
    FloatToInt: = StrToInt (FloatToStr (Int (X )));< br /> 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 :='';< br /> 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 +',';< br /> end;
    Temp: = Temp + Tmp [i];
    n: = n +1;
    end;
    Tmp :='';< br /> 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: String;
    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 SortCMDirList;
    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 IOResult0 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.Count1 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.Items [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])
    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 CreateDirInDestin (S, D: string);
    //Створення дерева директорій під час копіювання/перенесення
    Var
    P, i, j: integer; str, str1: string;
    EndFor: integer;
    begin
    MainForm.StatusBar.Panels [1]. Text: = 'Build destination Tree, Please Wait ....';< br /> 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)
    Ches
         
     
         
    Реферат Банк
     
    Рефераты
     
    Бесплатные рефераты
     

     

     

     

     

     

     

     
     
     
      Все права защищены. Reff.net.ua - українські реферати ! DMCA.com Protection Status