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

Меню

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

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

скачать рефератыКурсовая работа: Файловый менеджер

 void __fastcall NPropertyClick(TObject *Sender);

 void __fastcall NOpenClick(TObject *Sender);

 void __fastcall NExitClick(TObject *Sender);

 void __fastcall NDeleteClick(TObject *Sender);

 void __fastcall TBDeleteClick(TObject *Sender);

 void __fastcall TBPropertyClick(TObject *Sender);

 void __fastcall TBExitClick(TObject *Sender);

 void __fastcall NViewClick(TObject *Sender);

 void __fastcall NPanelClick(TObject *Sender);

 void __fastcall NStatusBarClick(TObject *Sender);

 void __fastcall TBUpClick(TObject *Sender);

 void __fastcall TreeView1Edited(TObject *Sender, TTreeNode *Node,

 AnsiString &S);

 void __fastcall ListView1Edited(TObject *Sender, TListItem *Item,

 AnsiString &S);

 void __fastcall NRenameClick(TObject *Sender);

 void __fastcall TBRenameClick(TObject *Sender);

 void __fastcall NIconClick(TObject *Sender);

 void __fastcall NSmallIconClick(TObject *Sender);

 void __fastcall NListClick(TObject *Sender);

 void __fastcall NReportClick(TObject *Sender);

 void __fastcall ListView1DragOver(TObject *Sender, TObject *Source,

 int X, int Y, TDragState State, bool &Accept);

 void __fastcall ListView1DragDrop(TObject *Sender, TObject *Source,

 int X, int Y);

 void __fastcall TBUpdateClick(TObject *Sender);

 void __fastcall TreeView1Click(TObject *Sender);

 void __fastcall TBPasteClick(TObject *Sender);

 void __fastcall TBCopyClick(TObject *Sender);

 void __fastcall TBCutClick(TObject *Sender);

 void __fastcall NUpdateClick(TObject *Sender);

 void __fastcall NCutClick(TObject *Sender);

 void __fastcall NPasteClick(TObject *Sender);

 void __fastcall NCopyClick(TObject *Sender);

 void __fastcall NSelectAllClick(TObject *Sender);

 void __fastcall ListView1ColumnClick(TObject *Sender,

 TListColumn *Column);

 void __fastcall NSort0Click(TObject *Sender);

 void __fastcall NCreateFolderClick(TObject *Sender);

 void __fastcall NFileClick(TObject *Sender);

 void __fastcall NEditClick(TObject *Sender);

 void __fastcall ListView1ContextPopup(TObject *Sender,

 TPoint &MousePos, bool &Handled);

 void __fastcall TreeView1ContextPopup(TObject *Sender,

 TPoint &MousePos, bool &Handled);

private:       // User declarations

public:                 // User declarations

 __fastcall TForm1(TComponent* Owner);

 void ShowDrives();

 void ViewChild(TTreeNode *child);

 void DeleteChild(TTreeNode *Node);

 void ViewFailAndFolderInListView(AnsiString dir);

 void ExpandTreeForFile(AnsiString FileName);

 int FileAndFolderOperation(char *frombuf, char *tobuf, unsigned int operation);

 TTreeNode* AddChildInNodeTree(TTreeNode *Node, AnsiString Dir);

 TListItem *AddItemInListView(TSearchRec sr,AnsiString dir);

 void ViewProperty();

 void OpenFileOrFolder(); //Открыть в Listview файл или папку

 void DeleteFileOrFolder();

 void PrepareBufForOperationInListView(char * &frombuf);

 AnsiString RenameFileOrFolder(AnsiString);

 void RecursTree(TTreeNode *node,bool); //Рекурсивное обновление дерева

 void UpdateTreeView(bool); //Функция запуска рекурсивного обновления дерева

 void UpdateListView(bool); //Функция обновления listview

 void UpdateAll(bool);

 void PasteFileFromClipboard(); //Вставить из буфера

 void CopyFileToClipboard(bool); //Копировать файлы в буфер

 void CreateFol();

 void UpdateLabel();

 } ;

//---------------------------------------------------------------------------

extern PACKAGE TForm1 *Form1;

//---------------------------------------------------------------------------

#endif

1.2.  Листинг Unit1.cpp

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include <shellapi.h>

#include "Unit1.h"

#include <winbase.h>

#include <vector.h>

#include "PropertyFile.h"

#include "PropertyDrive.h"

#include <ole2.h>

#define CFSTR_PREFERREDDROPEFFECT TEXT("Preferred DropEffect")

using namespace std;

vector <int> set_drive_num; //Вектор с номерами установленных дисков

TTreeNode *head, *tpItem; //Голова и темповая переменная

 //указатель на верхний отображаемый

 //узел для отсутствия скачков

unsigned int type_file_operation_drag_drop;

 //Тип операции при drag drop

AnsiString CurrentDir=""; //Текущий каталог

TViewStyle StyleListView=vsReport;

Set<char, 'A', 'Z'> DiskIn;

bool DragnDrop=true; //Флаг разрешения перетаскивания

int ColumnToSort=0; //Номер колонки по которой сортируют

int Direct=1; //Направление соритировки

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

//---------------------------------------------------------------------------

void FirstUpOtherDown(char *str) //Опускает все буквы кроме первой

 

void FirstUpOtherDown(AnsiString &str)

 

 str[1]-=32;

void GetDrives() //Определяет установленные диски

 { //и сохраняет их номера в set_drive_num

 unsigned int set_drive=GetLogicalDrives();

 for(int i=0;set_drive!=0;i++)

 {

 if(set_drive%2) set_drive_num.push_back(i);

 set_drive>>=1;

 }

 }

void TForm1::ShowDrives() //Отображает диски в дереве

 {

 char str[10];

 char inf[20];

 for(unsigned int i=0;i<set_drive_num.size();i++)

 {

 TTreeNode *temp; //Загрузка узла

 str[0]=(char)('A'+set_drive_num[i]);

 str[1]='\0';

 strcat(str,":\\");

 if(set_drive_num[i]!=0 && set_drive_num[i]!=1) //Заполнение информационного поля

 {

 if(!GetVolumeInformation(str,inf,20,NULL,NULL,NULL,NULL,NULL)) //Получение метки тома

 strcpy(inf,"");

 }

 else

 {

 strcpy(inf,"");

 }

 FirstUpOtherDown(inf);

 AnsiString *p=new AnsiString(str);

 temp=TreeView1->Items->AddChildObject(head,AnsiString(inf)+" ("+(char)('A'+set_drive_num[i])+":)",p);

 switch(unsigned int p=GetDriveType(str)) //Загрузка image

 {

 case DRIVE_REMOVABLE:

 temp->SelectedIndex=ImageFloppy;

 temp->ImageIndex=ImageFloppy;

 break;

 case DRIVE_FIXED:

 case DRIVE_RAMDISK:

 temp->SelectedIndex=ImageDrive;

 temp->ImageIndex=ImageDrive;

 break;

 case DRIVE_CDROM:

 temp->SelectedIndex=ImageCD;

 temp->ImageIndex=ImageCD;

 break;

 default:

 temp->SelectedIndex=ImageWindows;

 temp->ImageIndex=ImageWindows;

 break;

 }

 }

 }

TTreeNode* TForm1::AddChildInNodeTree(TTreeNode *Node, AnsiString Dir)

 {

 AnsiString temp=Dir;

 AnsiString Name=ExtractFileName(temp.SetLength(temp.Length()-1));

 FirstUpOtherDown(Name);

 AnsiString *p=new AnsiString(Dir); //Добавляем новый потомок к treeview

 TTreeNode *t=TreeView1->Items->AddChildObject(Node,Name,p);

 t->ImageIndex=ImageCloseFolder;

 t->SelectedIndex=ImageOpenFolder;

 return t; //Возвращаем указатель на него

 }

void TForm1::ViewChild(TTreeNode *Node) //Отображение детей узла в treeview

 {

 //Перебор детей открывамого узла

 TTreeNode *child=Node->getFirstChild();

 TSearchRec sr;

 AnsiString dir,name;

 do

 

 do

 while((child=Node->GetNextChild(child))!=NULL);

 }

void TForm1::DeleteChild(TTreeNode *Node) //Удаление потомков потомков узла (их уже не видно)

 {

 TTreeNode *child=Node->getFirstChild();

 TTreeNode *childchild;

 do

 while((childchild=child->getFirstChild())!=NULL)

 {

 delete childchild->Data;

 TreeView1->Items->Delete(childchild);

 }

 while((child=Node->GetNextChild(child))!=NULL);

 }

bool CheckExpandedChild(TTreeNode *Node) //Проверка раскрытия ветви хотя бы одного

 

 do

int TForm1::FileAndFolderOperation(char *frombuf, char *tobuf, unsigned int operation)

 { //Осуществление операций над файлами - копирование, перемещение

 //удаление, переименование

 SHFILEOPSTRUCT OpStruc;

 OpStruc.hwnd= Handle;

 OpStruc.wFunc= operation;

 OpStruc.pFrom= frombuf;

 OpStruc.pTo=tobuf;

 OpStruc.fFlags=0;

 OpStruc.fAnyOperationsAborted= false;

 OpStruc.hNameMappings= NULL;

 OpStruc.lpszProgressTitle= NULL;

 int p=SHFileOperation(&OpStruc);

 return p;

 }

TListItem *TForm1::AddItemInListView(TSearchRec sr,AnsiString dir)

 { //Добавление записи в listview из sr и каталога dir

 TListItem *p;

 AnsiString date;

 int size=sr.Size/1024;

 p=ListView1->Items->Add(); //Добавление нового элемента

 FirstUpOtherDown(sr.Name); //Выравнивание у имени символов

 DateTimeToString(date,"dd/mm/yy h:nn",FileDateToDateTime(sr.Time));

 AnsiString *a;

 if(sr.Attr & faDirectory)

 {

 a=new AnsiString(dir+sr.Name+"\\"); //Сохранение полного имени для доступа

 p->SubItems->Add(""); //Для директорий (папок)

 p->SubItems->Add("Папка");

 p->ImageIndex=ImageCloseFolder;

 }

 else

 

 icon->Handle=sfi.hIcon;

 p->SubItems->Add(date); //4 Добавление даты

 p->Data=a;

 p->Caption=sr.Name; //1 Запись названия

 return p;

 }

void TForm1::ViewFailAndFolderInListView(AnsiString dir)

 { //Отображение в listview папки указанной dir

 for(int i=0;i<ListView1->Items->Count;i++)

 delete ListView1->Items->Item[i]->Data; //Очистка данных о полном пути к файлам

 ImageList2->Clear();

 ImageList4->Clear();

 ListView1->Clear(); //Очистка списка

 ImageList2->AddImages(ImageList1);

 ImageList4->AddImages(ImageList3);

 AnsiString path=dir.SubString(1,3); //Извлечение названия корневого каталога

 char inf[20];

 unsigned int p=GetDriveType(path.c_str());

 if(p==DRIVE_REMOVABLE || p==DRIVE_CDROM)

 {

 if(GetVolumeInformation(path.c_str(),inf,20,NULL,NULL,NULL,NULL,NULL))

 {

 if(!(DiskIn.Contains(path[1]))) DiskIn<<path[1];

 UpdateTreeView(false);

 UpdateLabel();

 }

 else

 {

 UpdateTreeView(false);

 if(DiskIn.Contains(path[1])) DiskIn>>path[1];

 UpdateLabel();

 CurrentDir="";

 return;

 }

 }

 while(ExtractFileDrive(dir).AnsiCompareIC(dir)!=0 && GetFileAttributes(dir.c_str())==-1)

 dir=ExtractFilePath(dir.SetLength(dir.Length()-1));

 TSearchRec sr;

 if(FindFirst(dir+"*",faAnyFile,sr)!=0) //Просмотр папок в детях

 return;

 do

 

 while(FindNext(sr)==0);

 FindClose(sr);

 CurrentDir=dir; //Запоминание текущего каталога

 double c=10.0;

 __int64 FreeSpace,TotalSpace;

 if(Sysutils::GetDiskFreeSpaceEx(ExtractFileDrive(dir).c_str(),NULL,TotalSpace,&FreeSpace))

 StatusBar1->SimpleText=AnsiString("Объектов: ")+ListView1->Items->Count+" (Свободно на диске "+ AnsiString(((FreeSpace*10)/1024/1024/1024)/c)+" ГБ)";

 

 }

void TForm1::ViewProperty() //Отображение свойств файла папки диска

 {

 if(CurrentDir=="") return;

 if(ListView1->ItemFocused==NULL)

 {

 if(TreeView1->Selected!=NULL)

 {

 if(TreeView1->Selected->Level==1)

 FPropertyDrive->Prepare(*((AnsiString *)(TreeView1->Selected->Data)));

 else if(TreeView1->Selected->Level>1)

 FPropertyFile->Prepare(*((AnsiString *)(TreeView1->Selected->Data)));

 }

 }

 else

 {

 if(ListView1->Selected!=NULL)

 FPropertyFile->Prepare(*((AnsiString *)(ListView1->Selected->Data)));

 else

 {

 if(ExtractFileDrive(CurrentDir).AnsiCompareIC(CurrentDir.SubString(1,CurrentDir.Length()-1))==0)

 FPropertyDrive->Prepare(CurrentDir);

 else

 FPropertyFile->Prepare(CurrentDir);

 }

 }

 UpdateAll(true);

 }

void TForm1::PrepareBufForOperationInListView(char * &frombuf) //Подготовка буфера данных

 { //над которыми производится опер

 frombuf=new char[ListView1->SelCount*MAX_PATH+1];

 if(ListView1->SelCount==1) //Если выделен один элемент то все просто

 { //заполняем frombuf именем

 AnsiString sourcestr=*((AnsiString *)(ListView1->Selected->Data));

 if((FileGetAttr(sourcestr) & faDirectory)!=0)

 sourcestr.SetLength(sourcestr.Length()-1);

 strcpy(frombuf,sourcestr.c_str());

 finstr(frombuf);

 }

 else

 {

 char *temp=frombuf;

 bool flag=false; //Если несколько последовательно заполняем именами

 for(int i=0;i<ListView1->Items->Count;i++)

 if(ListView1->Items->Item[i]->Selected)

 {

 AnsiString sourcestr=*((AnsiString *)(ListView1->Items->Item[i]->Data));

 if((FileGetAttr(sourcestr) & faDirectory)!=0)

 sourcestr.SetLength(sourcestr.Length()-1);

 if(flag)

 strcat0(temp,sourcestr.c_str());

 else

 {

 strcpy(temp,sourcestr.c_str());

 flag=true;

 }

 }

 finstr(temp);

 }

 }

AnsiString TForm1::RenameFileOrFolder(AnsiString NewName)

 {

 char frombuf[MAX_PATH+1]={'\0'},tobuf[MAX_PATH+1]={'\0'};

 if(ListView1->ItemFocused==NULL)

 {

 if(TreeView1->Selected!=NULL)

 if(TreeView1->Selected->Level>1)

 {

 AnsiString temp;

 AnsiString *sourcestr=((AnsiString *)(TreeView1->Selected->Data));

 temp=*sourcestr; //Сохранение в темповой переменной старого пути

 sourcestr->SetLength(sourcestr->Length()-1);

 strcpy(frombuf,sourcestr->c_str()); //Построение нового пути

 *sourcestr=ExtractFilePath(*sourcestr)+NewName;

 strcpy(tobuf,sourcestr->c_str());

 if(FileAndFolderOperation(frombuf,tobuf,FO_RENAME)!=0) //Если операция не удалась

 {

 *sourcestr=temp; //Возвращаем назад

 NewName=ExtractFileName(temp.SubString(1,temp.Length()));

 }

 else

 *sourcestr=*sourcestr+"\\"; //Если нормально меняем путь

 return NewName;

 }

 }

 else

 if((ListView1->Selected)!=NULL)

 {

 bool dir=false;

 AnsiString *sourcestr=((AnsiString *)(ListView1->Selected->Data));

 AnsiString temp=*sourcestr;

 if((FileGetAttr(*sourcestr) & faDirectory)!=0)

 {

 sourcestr->SetLength(sourcestr->Length()-1);

 dir=true;

 }

 strcpy(frombuf,sourcestr->c_str());

 *sourcestr=ExtractFilePath(*sourcestr)+NewName;

 strcpy(tobuf,sourcestr->c_str());

 if(FileAndFolderOperation(frombuf,tobuf,FO_RENAME)!=0)

 {

 *sourcestr=temp;

 if(dir)

 temp.SetLength(temp.Length()-1);

 NewName=ExtractFileName(temp);

 }

 else

 if(dir)

 *sourcestr=*sourcestr+"\\";

 return NewName;

 }

 }

void TForm1::DeleteFileOrFolder()

 {

 if(ListView1->ItemFocused==NULL)

 {

 if(TreeView1->Selected!=NULL)

 if(TreeView1->Selected->Level>1)

 {

 char frombuf[MAX_PATH]={'\0'};

 AnsiString sourcestr=*((AnsiString *)(TreeView1->Selected->Data));

 sourcestr.SetLength(sourcestr.Length()-1);

 strcpy(frombuf,sourcestr.c_str());

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


Новости

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

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

Пока нет

Новости в Twitter и Facebook

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

Новости

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

© 2010.