RSS    

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

 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

 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+':\');

 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+'\';

 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+'\';

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

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


Новости


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

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

Пока нет

Новости в Twitter и Facebook

                   

Новости

© 2010.