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

Меню

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

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

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

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

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

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

 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;

// перевод целого числа в читабельный формат (для размеров файлов / директорий)

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


Новости

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

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

Пока нет

Новости в Twitter и Facebook

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

Новости

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

© 2010.