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

Информация - Компьютеры, программирование

Другие материалы по предмету Компьютеры, программирование

File:=True;

FlagMoveFile:=False;

CopyPathFileInTemp;

end;

end;

 

procedure TMainForm.Paste1Click(Sender: TObject);

// Вставка в зависимости от контекста

begin

0then"> if MainForm.TempCopyMove.Items.Count<>0 then

begin

ProgressForm.Show;

PasteFileFromTemp;

ProgressForm.Close;

end;

0then"> 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.Delete1Click(Sender: TObject);

//Удаление в зависимости от контекста

begin

0)then"> 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<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.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(*);

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

.)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);

// Найден файл , запрос на его перезапись

1then"> 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+:\);

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;