![]() |
|
|
Реферат: Разработка файловой оболочки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...'; 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) <= 3 then 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+':\'; S:=MainForm.FileList.Mask; MainForm.FileList.Mask:='>.>'; FindFirst(MainForm.DrBox.Drive+':\*.*',faDirectory,F); Repeat Until ((FindNext(F)<>0) or ((F.Attr=faDirectory) and ((F.Name<>'.') or (F.Name<>'..')))); if F.Attr<>faDirectory then MainForm.Directory.SetDirectory(MainForm.DrBox.Drive+':\') else MainForm.Directory.SetDirectory(MainForm.DrBox.Drive+':\'+F.Name); MainForm.Directory.BuildTree; MainForm.Directory.SetDirectory(MainForm.DrBox.Drive+':\'); 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.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.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); |
|
|||||||||||||||||||||||||||||
![]() |
|
Рефераты бесплатно, реферат бесплатно, курсовые работы, реферат, доклады, рефераты, рефераты скачать, рефераты на тему, сочинения, курсовые, дипломы, научные работы и многое другое. |
||
При использовании материалов - ссылка на сайт обязательна. |