Разработка файловой оболочки
Информация - Компьютеры, программирование
Другие материалы по предмету Компьютеры, программирование
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;