Разработка файловой оболочки
Информация - Компьютеры, программирование
Другие материалы по предмету Компьютеры, программирование
p>
MainForm.Directory.Invalidate;
end;
procedure TMainForm.DeleteClick(Sender: TObject);
//Удаление файлов
begin
AskDeleteForm.Show;
end;
procedure TMainForm.FileMenuPopup(Sender: TObject);
//Определение видимых строк в контектсном меню файловой области
//в момент его вызова
begin
if MainForm.FileList.SelCount=0 then
begin
with MainForm.FileMenu do
begin
Delete.Enabled:=False;
Cut.Enabled:=False;
Copy.Enabled:=False;
Rename1.Enabled:=False;
end;
end
else
begin
with MainForm.FileMenu do
begin
Delete.Enabled:=True;
Cut.Enabled:=True;
Copy.Enabled:=True;
Rename1.Enabled:=True;
end;
end;
if MainForm.TempCopyMove.Items.Count = 0 then
Paste.Enabled:=False
else
Paste.Enabled:=True;
end;
procedure TMainForm.FileMask1Click(Sender: TObject);
// Запрос маски файлов для списка файлов (в дальнейшем СФ)
begin
GetFileMask.Show;
end;
procedure TMainForm.FileListDblClick(Sender: TObject);
// Запуск программ/редактирование(просмотр) во внешнем редакторе
// при двойном щелчке мышкой
Var
str:string;
begin
Str:=FileList.FileName;
ExecuteFile(Str,,,SW_SHOW);
end;
procedure TMainForm.SplitterMoved(Sender: TObject);
//Перемещение разделителя СФ и Списка директорий (В Дальнейшем СД)
begin
// Ограничение на положение разделителя
// Ширина СД не должна быть меньше Списка дисков (В дальнейшем СПД)
if Splitter.Left<=DrBox.Width then
begin
Directory.Width:=DrBox.Width+6;
end;
// Сохранение положения разделителя для следующего запуска программы
McIni.WriteInteger(ASWindow,Splitter,MainForm.Directory.Width);
// Установка размеров панелей статус-строки
MainForm.StatusBar.Panels[0].Width:=MainForm.Directory.Width;
end;
procedure TMainForm.Find1Click(Sender: TObject);
// Поиск файлов
begin
FindForm.Show
end;
procedure TMainForm.Info1Click(Sender: TObject);
// Вывод информации о текущем диске и директории
begin
GetFormToCenter(InfoForm);
InfoForm.ShowModal;
end;
procedure TMainForm.CopyDirClick(Sender: TObject);
//Копирование директорий (Выбран пункт меню копировать)
begin
SourseDir:=MainForm.Directory.Directory;
DoingWithDir:=True;
CopyMoveDirectory;
end;
procedure TMainForm.RenameDirClick(Sender: TObject);
//Переименование директории в соответствующей форме
begin
GetFormToCenter(RenameDirForm);
RenameDirForm.ShowModal;
end;
procedure TMainForm.FileAttrClick(Sender: TObject);
//Получение установка атрибутов файла в соотв. форме
begin
GetFormToCenter(AttrFileForm);
AttrFileForm.ShowModal;
end;
procedure TMainForm.ViewClick(Sender: TObject);
// Определение видимых компонент в меню VIEW
// в момент его открытия
begin
if MainForm.FileList.SelCount = 0 then
begin
MainForm.FileAttr.Enabled:=False;
end
else
begin
MainForm.FileAttr.Enabled:=True;
end;
if UpperCase(MainForm.Directory.Directory)=UpperCase(MainForm.DrBox.Drive+:\) then
MainForm.SizeDirectory1.Enabled:=False
else
MainForm.SizeDirectory1.Enabled:=True;
end;
Procedure DDD(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
DDD(DirS+\+D.Name);
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 запусти?/p>