на тему рефераты
 
Главная | Карта сайта
на тему рефераты
РАЗДЕЛЫ

на тему рефераты
ПАРТНЕРЫ

на тему рефераты
АЛФАВИТ
... А Б В Г Д Е Ж З И К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Э Ю Я

на тему рефераты
ПОИСК
Введите фамилию автора:


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


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

 FileAndFolderOperation(frombuf,NULL,FO_DELETE);

 }

 }

 else

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

 {

 char *frombuf;

 PrepareBufForOperationInListView(frombuf);

 FileAndFolderOperation(frombuf,NULL,FO_DELETE);

 }

 UpdateAll(false);

 }

void TForm1::ExpandTreeForFile(AnsiString FileName)

 { //Расширение ветвей tree до файла

 AnsiString Find="";

 TTreeNode *p=TreeView1->Items->Item[0], *child;

 child=p->getFirstChild();

 bool flag=false;

 do

 {

 flag=false;

 int pos=FileName.Pos("\\"); //Вычленение из имени файла папки

 Find=Find+FileName.SubString(1,pos); //прибавление к find

 FileName.Delete(1,pos);

 if(FileName.Pos("\\")==0)

 flag=true; //Критерий окончания

 child=p->getFirstChild();

 while(1)

 {

 if(child==NULL)

 {

 child=AddChildInNodeTree(p,Find); //Если узла вообще нет то создаем его

 if(!p->Expanded) //и расширяем его отца

 p->Expand(false);

 }

 if((*(AnsiString *)(child->Data)).AnsiCompareIC(Find)==0)

 {

 if (flag) //По окончании передаем выделение на этот узел

 TreeView1->Selected=child;

 else if(!child->Expanded) //если это толлько промежуточная папка

 child->Expand(false); //расширяем ветвь

 p=child;

 break;

 }

 child=p->GetNextChild(child);

 }

 }

 while(!flag);

 }

void TForm1::OpenFileOrFolder()

 { //Происходит открытие файла или папки выделенных в listview

 if(ListView1->Selected==NULL) return; //проверка наличия выделенного

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

 if((FileGetAttr(ww) & faDirectory)!=0) //В случае папки

 {

 ViewFailAndFolderInListView(ww); //Вызываем отображение папок и файлов

 ExpandTreeForFile(ww); //Расширяем treeview до этого файла

 }

 else

 {

 ShellExecute(NULL,"open",ww.c_str(),NULL,NULL,SW_RESTORE); //В случае файла

 if(GetLastError()) //Выполняем его и проверяем ошибки

 lpMsgBuf );

 }

 }

void RecursDelData(TTreeNode *node) //Рекурсивная функция обходит

 { // дочерние узлы и удаляет данные по указателю data

 delete node->Data;

 TTreeNode *child;

 for(child=node->getFirstChild();child!=NULL;child=node->GetNextChild(child))

 RecursDelData(child);

 }

void TForm1::RecursTree(TTreeNode *node,bool UpdateAllways)

 {

 AnsiString dir=*((AnsiString *)(node->Data));

 TSearchRec sr;

 TTreeNode *child;

 int num=0;

 if(((GetDriveType(dir.c_str())==DRIVE_REMOVABLE) || (GetDriveType(dir.c_str())==DRIVE_CDROM)) && !DiskIn.Contains(ExtractFileDrive(dir)[1]))

 return; //Условие: просматривать дискету и диск если отмечено что они есть

 if(!UpdateAllways)

 {

 if(FindFirst(dir+"*",faAnyFile,sr)==0)

 do //и продолжить если найден файл

 if((sr.Attr & faDirectory) && sr.Name!="." && sr.Name!="..")

 num++; //Пересчитываем все папки в данной

 while(FindNext(sr)==0);

 FindClose(sr);

 }

 int count=node->Count;

 if(UpdateAllways || num!=count) //Сравниваем с количеством узлов потомков

 {

 if(UpdateAllways || num<count) //Если узлов потомков больше ищем отсутствующую папку

 for(child=node->getFirstChild();child!=NULL;)

 {

 AnsiString t=*(AnsiString *)(child->Data);

 if(GetFileAttributes(t.c_str())==-1)

 {

 TTreeNode *temp=node->GetNextChild(child);

 if(child->Selected) node->Selected=true;

 RecursDelData(child); //Удаляем данные несуществующей папки и ее потомков

 TreeView1->Items->Delete(child); //удаляем узел

 child=temp;

 }

 else

 child=node->GetNextChild(child);

 }

 if(UpdateAllways || num>count) //Если какой-то папки не хватает

 {

 if(FindFirst(dir+"*",faAnyFile,sr)==0) //Перебираем папки

 do

 if((sr.Attr & faDirectory) && sr.Name!="." && sr.Name!="..")

 { //Ищем для них узлы

 for(child=node->getFirstChild();child!=NULL;child=node->GetNextChild(child))

 if((*(AnsiString *)(child->Data)).AnsiCompareIC((dir+sr.Name+"\\"))==0)

 break;

 if(child==NULL) //если соответствующего узла нет добавляем

 AddChildInNodeTree(node,dir+sr.Name+"\\");

 }

 while(FindNext(sr)==0);

 FindClose(sr);

 }

 }

 if(node->Expanded || CheckExpandedChild(node))

 {

 for(child=node->getFirstChild();child!=NULL;child=node->GetNextChild(child))

 RecursTree(child,UpdateAllways);

 }

 }

void TForm1::UpdateTreeView(bool UpdateAllways) //Обновление treeview

 {

 TTreeNode *top=TreeView1->Items->Item[0];

 TTreeNode *child;

 if(top->Expanded)

 for(child=top->getFirstChild();child!=NULL;child=top->GetNextChild(child))

 RecursTree(child, UpdateAllways);

 TreeView1->AlphaSort();

 }

void TForm1::UpdateListView(bool UpdateAllways) //Обновление списка listview

 {

 if(CurrentDir=="") return; //Если ни один каталог не отображается

 if(GetFileAttributes(CurrentDir.c_str())==-1)

 { //Если текущего каталога уже не существует

 ViewFailAndFolderInListView(CurrentDir); //отображаем его ридительский каталог

 return;

 }

 TSearchRec sr;

 TListItem *item;

 int num=0; //подсчет количества файлов в папке

 if(!UpdateAllways)

 {

 if(FindFirst(CurrentDir+"*",faAnyFile,sr)==0)

 do //и продолжить если найден файл

 if(sr.Name!="." && sr.Name!="..")

 num++; //Пересчитываем все папки в данной

 while(FindNext(sr)==0);

 FindClose(sr);

 }

 int count=ListView1->Items->Count;

 if(UpdateAllways || num!=count) //Сравниваем с количеством узлов потомков

 {

 if(UpdateAllways || num<count) //Если записей больше чем файлов

 for(int i=0;i<ListView1->Items->Count;i++) //ищем уже отсутствующие в действительности

 {

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

 if(GetFileAttributes(t.c_str())==-1)

 {

 delete ListView1->Items->Item[i]->Data; //Удаляем вспомогательные данные для него

 ListView1->Items->Delete(i); //удаляем узел

 i--;

 }

 }

 if(UpdateAllways || num>count) //Если файлов не хватает

 {

 if(FindFirst(CurrentDir+"*",faAnyFile,sr)==0) //Перебираем файлы

 do

 if(sr.Name!="." && sr.Name!="..")

 { //Ищем для них записи

 int i;

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

 if((*(AnsiString *)(ListView1->Items->Item[i]->Data)).AnsiCompareIC(CurrentDir+sr.Name+((sr.Attr & faDirectory)?"\\":""))==0)

 break;

 if(i==ListView1->Items->Count) //если соответствующего узла нет добавляем

 AddItemInListView(sr,CurrentDir);

 }

 while(FindNext(sr)==0);

 FindClose(sr);

 }

 }

 }

void TForm1::UpdateLabel() //Обновление меток диска

 {

 TTreeNode *child, *node=TreeView1->Items->Item[0];

 for(child=node->getFirstChild();child!=NULL;child=node->GetNextChild(child))

 {

 AnsiString path=*((AnsiString *)child->Data);

 AnsiString text=child->Text;

 char inf[20];

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

 if(((p==DRIVE_REMOVABLE || p==DRIVE_CDROM) && (DiskIn.Contains(path[1]))) ||

 (p!=DRIVE_REMOVABLE && p!=DRIVE_CDROM))

 {

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

 {

 text.Delete(1,text.Pos("(")-1);

 FirstUpOtherDown(inf);

 child->Text=AnsiString(inf)+" "+text;

 }

 else

 {

 text.Delete(1,text.Pos("(")-1);

 child->Text=" "+text;

 ViewFailAndFolderInListView(path);

 }

 }

 else

 {

 text.Delete(1,text.Pos("(")-1);

 child->Text=" "+text;

 }

 }

 }

void TForm1::UpdateAll(bool UpdateAllways) //Обновление всего

 {

 UpdateTreeView(UpdateAllways); //Обновление дерева папок

 UpdateListView(UpdateAllways); //Обновление списка файлов

 UpdateLabel();

 double c=10.0;

 if(CurrentDir!="")

 {

 __int64 FreeSpace,TotalSpace;

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

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

 }

 }

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

 {

 if(CurrentDir=="") return;

 char *frombuf, *temp;

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

 int nCount,i; //Число копируемых объектов

 Pointer Data;

 char * lpDroppedFile;

 OpenClipboard(NULL); //Открывает clipboard для текущего процесса

 if (IsClipboardFormatAvailable(CF_HDROP))

 {

 Data=GetClipboardData(CF_HDROP); //Получение указателя на данные

 if(Data==0) { CloseClipboard(); return; } //Нечего забирать

 nCount= DragQueryFile(Data, 0xFFFFFFFF, NULL, 0); //Получение количества

 temp=frombuf=new char[MAX_PATH*nCount];

 if (nCount > 0)

 {

 lpDroppedFile=(char *)AllocMem(MAX_PATH + 1); //Выделение памяти под массив

 for (i= 0;i<nCount;i++) //с названиями копирумых объектов

 {

 DragQueryFile(Data, i, lpDroppedFile, MAX_PATH); //Собственно получение имен этих объектов

 if(i!=0)

 strcat0(temp,lpDroppedFile); //Добавление к frombuf

 else

 strcpy(temp,lpDroppedFile);

 }

 finstr(temp);

 free(lpDroppedFile); //Освобождение

 strcpy(tobuf,CurrentDir.c_str());

 }

 long lngEffect;

 long lngFormat = RegisterClipboardFormat(CFSTR_PREFERREDDROPEFFECT);

 HANDLE hGlobal = GetClipboardData(lngFormat);

 if(hGlobal)

 MoveMemory(&lngEffect,hGlobal, 4);

 if((lngEffect & DROPEFFECT_COPY) == DROPEFFECT_COPY)

 FileAndFolderOperation(frombuf,tobuf , FO_COPY);

 if((lngEffect & DROPEFFECT_MOVE) == DROPEFFECT_MOVE)

 FileAndFolderOperation(frombuf,tobuf , FO_MOVE);

 UpdateAll(false);

 }

 CloseClipboard();

 }

void TForm1::CopyFileToClipboard(bool Copy)

 {

 if(CurrentDir=="") return;

 char *frombuf;

 unsigned int uDropEffect, uBufLen;

 DROPFILES dropFiles;

 unsigned int uGblLen,uDropFilesLen;

 HGLOBAL hGblFiles,hGblEffect;

 char *szData,*szFileList;

 DWORD *dwDropEffect;

 uDropEffect=RegisterClipboardFormat("Preferred DropEffect"); //Регистрация формата

 //для указания типа копирования

 hGblEffect=GlobalAlloc(GMEM_ZEROINIT|GMEM_MOVEABLE|GMEM_DDESHARE,sizeof(DWORD));

 dwDropEffect=(DWORD*)GlobalLock(hGblEffect); //Выделение памяти под хранение

 if(Copy) //инфы о виде перемещения

 *dwDropEffect=DROPEFFECT_COPY; //Запись этой инфы

 else

 *dwDropEffect=DROPEFFECT_MOVE;

 GlobalUnlock(hGblEffect); //Разлочивание памяти

 uDropFilesLen=sizeof(DROPFILES); //Заполнение структуры содержащей инфу

 dropFiles.pFiles =uDropFilesLen; //о строке с именами перемещаемых файлов

 dropFiles.pt.x=0;

 dropFiles.pt.y=0;

 dropFiles.fNC =FALSE;

 dropFiles.fWide =FALSE;//TRUE;

 if(ListView1->ItemFocused==NULL)

 {

 if(TreeView1->Selected!=NULL) //Если в фокусе находится treeview

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

 {

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

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

 frombuf=new char[MAX_PATH+1];

 strcpy(frombuf,sourcestr.c_str());

 finstr(frombuf);

 }

 else

 return; //Выход в том случае если в фокусе Диск или Мой компьютер

 }

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

 PrepareBufForOperationInListView(frombuf);

 uBufLen=lengthfinstr(frombuf);

 uGblLen=uDropFilesLen+uBufLen+2;

 hGblFiles= GlobalAlloc(GMEM_ZEROINIT|GMEM_MOVEABLE|GMEM_DDESHARE, uGblLen);

 szData=(char*)GlobalLock(hGblFiles);

 memcpy(szData,&dropFiles,uDropFilesLen);

 szFileList=szData+uDropFilesLen;

 memcpy(szFileList,frombuf,uBufLen);

 /*MultiByteToWideChar(CP_ACP,MB_COMPOSITE,

                            frombuf,uBufLen,(WCHAR *)szFileList,uBufLen*2+8);*/

 GlobalUnlock(hGblFiles);

 if( OpenClipboard(NULL) )

 {

 EmptyClipboard();

 SetClipboardData( CF_HDROP, hGblFiles );

 SetClipboardData(uDropEffect,hGblEffect);

 CloseClipboard();

 }

 }

void TForm1::CreateFol() //Создает папку в текущем каталоге

 {

 if(CurrentDir=="") return;

 AnsiString c="Новая папка",dir; //Производит поиск отсутствующей папки

 for(int i=1;(GetFileAttributes((dir=CurrentDir+c+i).c_str()))!=-1;i++);

 if(ListView1->Selected!=NULL) //Если есть выделенные узлы

 for(int i=0;i<ListView1->Items->Count;i++) //отменяем выделение

 ListView1->Items->Item[i]->Selected=false;

 if(CreateDir(dir)) //Создает ее

 {

 TSearchRec sr;

 FindFirst(dir,faDirectory,sr);

 TListItem *p=AddItemInListView(sr,ExtractFilePath(dir));

 ListView1->ItemFocused=p;

 p->Selected=true;

 p->EditCaption();

 }

 UpdateAll(false);

 }

//*************************************************************************

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

//***********************************************************************

__fastcall TForm1::TForm1(TComponent* Owner) //Конструктор формы

 : TForm(Owner)

{

 ShortDateFormat="dd/mm/yy";

 DateSeparator = '/';

 TimeSeparator=':';

 ShortTimeFormat="h:nn";

 AnsiString *a=new AnsiString("");

 TreeView1->Items->Item[0]->Data=a;

 head=TreeView1->Items->Item[0]; //Сохранение корня

 GetDrives(); //Загрузка дисков

 ShowDrives(); //Отображение в treview

 TreeView1->AlphaSort();

}

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

void __fastcall TForm1::TreeView1Expanding(TObject *Sender,

 TTreeNode *Node, bool &AllowExpansion)//Событие - открытие узла

{

 DragnDrop=false; //Запрещение перемещения

 TreeView1->Items->BeginUpdate();

 tpItem=TreeView1->TopItem; //Сохранение верхнего узла

 if(!CheckExpandedChild(Node)) //Если ни один из потомков не расширен

 ViewChild(Node);

 TreeView1->AlphaSort(); //Сортировка

}

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

void __fastcall TForm1::TreeView1Compare(TObject *Sender, TTreeNode *Node1,

 TTreeNode *Node2, int Data, int &Compare) //Функция сравнения

{

 if(Node1->Level==1) //Для упорядочивания treeview

 Compare=Node1->Text[Node1->Text.Length()-2]>Node1->Text[Node1->Text.Length()-2]?1:-1;

 else

 Compare=Node1->Text.AnsiCompare(Node2->Text);

}

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

void __fastcall TForm1::TreeView1Expanded(TObject *Sender, TTreeNode *Node)

{ //Сообщение об окончании

 TTreeNode * temp=TreeView1->TopItem; //Раскрытия списка

 TreeView1->TopItem=tpItem; //Проверка выхода конца открытой ветви за экран

 if((TreeView1->GetNodeAt(TreeView1->Width/2,TreeView1->ClientHeight-1))!=NULL)

 { //Если это так то сдвигаем всю ветвь вверх автоматом

 int p=(TreeView1->GetNodeAt(TreeView1->Width/2,TreeView1->ClientHeight-1))->AbsoluteIndex;

 if(p<=Node->GetLastChild()->AbsoluteIndex) TreeView1->TopItem=temp;

 } //если нет то ставим первым сохранненый ранее первый элемент

 TreeView1->Items->EndUpdate();

 DragnDrop=true; //Разрешение перемещения

}

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

void __fastcall TForm1::TreeView1Collapsing(TObject *Sender,

 TTreeNode *Node, bool &AllowCollapse) //Событие - перед свертыванием

{

 DragnDrop=false;

 TreeView1->Items->BeginUpdate();

 if(!CheckExpandedChild(Node)) //Если ветвь ни одного из потомков не расширена

 DeleteChild(Node); //Удаление детей детей

 TreeView1->Items->EndUpdate();

 DragnDrop=true;

}

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

void __fastcall TForm1::TreeView1Editing(TObject *Sender, TTreeNode *Node,

 bool &AllowEdit)

{

 if(Node->Level<2) AllowEdit=false; //Запрет на редактирование Мой комп и названий дисков

}

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

void __fastcall TForm1::ListView1Compare(TObject *Sender, TListItem *Item1,

 TListItem *Item2, int Data, int &Compare)

{

 bool temp1=false, temp2=false;

 if(((FileGetAttr(*((AnsiString *)Item1->Data))) & faDirectory)!=0)

 temp1=true;

 if(((FileGetAttr(*((AnsiString *)Item2->Data))) & faDirectory)!=0)

 temp2=true;

 AnsiString s1,s2;

 switch(ColumnToSort)

 {

 case 0:

 if(temp1==temp2)

 Compare=(Item1->Caption).AnsiCompare(Item2->Caption);

 else

 Compare=temp2?1:-1;

 break;

 case 2:

 if(temp1==temp2)

 Compare=(Item1->SubItems->Strings[1]).AnsiCompare(Item2->SubItems->Strings[1]);

 else

 Compare=temp2?1:-1;

 break;

 case 1:

 if(temp1) s1="0 ";

 else s1= Item1->SubItems->Strings[0];

 if(temp2) s2="0 ";

 else s2= Item2->SubItems->Strings[0];

 s1=s1.SubString(1,s1.Pos(" ")-1);

 s2=s2.SubString(1,s2.Pos(" ")-1);

 Compare=StrToInt(s1)>StrToInt(s2)?1:-1;

 break;

 case 3:

 TDateTime dt1=StrToDateTime(Item1->SubItems->Strings[2]);

 TDateTime dt2=StrToDateTime(Item2->SubItems->Strings[2]);

 if(temp1==temp2)

 Compare=dt1>dt2?1:-1;

 else

 Compare=temp2?1:-1;

 break;

 }

 Compare*=Direct;

 }

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

void __fastcall TForm1::ListView1DblClick(TObject *Sender)

{ //Двойной клик на ListView

 OpenFileOrFolder();

}

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


void __fastcall TForm1::ListView1MouseDown(TObject *Sender,

 TMouseButton Button, TShiftState Shift, int X, int Y)

{

 if(DragnDrop && Button == mbLeft) //Событие по нажатию мыши и начало перемещения

 {

 if(Shift.Contains(ssCtrl))

 type_file_operation_drag_drop=FO_COPY;

 else

 type_file_operation_drag_drop=FO_MOVE;

 ListView1->BeginDrag(false,5);

 }

}

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

void __fastcall TForm1::TreeView1DragOver(TObject *Sender, TObject *Source,

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

//Даем возможность положить объект если есть куда класть и объект из list и tree

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

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

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

 Accept=true;

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

void strcat0(char * &dest,char *source)

 { //Объединение двуч строк с оставлением между ними

 for(;(*dest)!='\0';dest++); //нулевого символа

 for(dest++;(*source!='\0');dest++,source++)

 *dest=*source;

 *dest='\0';

 

 }

void finstr(char *dest)

 {

 for(;(*dest)!='\0';dest++);

 dest++;

 *dest='\0';

 }

unsigned int lengthfinstr(char *dest)

 {

 unsigned int l=0;

 do

 {

 for(;(*dest)!='\0';dest++,l++);

 dest++;

 l++;

 }

 while((*dest)!='\0');

 return l+1;

 }

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

 int X, int Y)

{

 int operation=type_file_operation_drag_drop;

 if(ListView1->GetItemAt(X,Y)==NULL)

 { //Если перенос делается на пустое место

 ListView1->Selected->Position=Point(X,Y); //просто меняем место значка и выходим

 return;

 }

 if(Source->ClassNameIs("TListView")) //Если объект перетащен из listview

 { //извлекаем нужные папки и делаем операцию

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

TListView *sender=(TListView *)Sender;

 PrepareBufForOperationInListView(frombuf);

 AnsiString senderstr=*((AnsiString *)(sender->GetItemAt(X,Y)->Data));//+ExtractFileName(*((AnsiString *)(source->Selected->Data)));

 strcpy(tobuf,senderstr.c_str()); //Вызываем функции и указываем операцию

 FileAndFolderOperation(frombuf,tobuf,operation);

 }

 if(Source->ClassNameIs("TTreeView"))

 {

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

 TTreeView *source=(TTreeView *)Source;

 TListView *sender=(TListView *)Sender;

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

 AnsiString senderstr=*((AnsiString *)(sender->GetItemAt(X,Y)->Data));//+ExtractFileName(*((AnsiString *)(source->Selected->Data)));

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

 strcpy(frombuf,sourcestr.c_str());

 strcpy(tobuf,senderstr.c_str());

 FileAndFolderOperation(frombuf,tobuf,operation);

 }

 UpdateAll(false); //Обновление

}

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

void __fastcall TForm1::TreeView1DragDrop(TObject *Sender, TObject *Source,

 int X, int Y) //Окончание перетаскивания

{

 int operation=type_file_operation_drag_drop;

 if(Source->ClassNameIs("TListView")) //Если объект перетащен из listview

 { //извлекаем нужные папки и делаем операцию

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

 TTreeView *sender=(TTreeView *)Sender;

 PrepareBufForOperationInListView(frombuf);

 AnsiString senderstr=*((AnsiString *)(sender->GetNodeAt(X,Y)->Data));//+ExtractFileName(*((AnsiString *)(source->Selected->Data)));

 strcpy(tobuf,senderstr.c_str()); //Вызываем функции и указываем операцию

 FileAndFolderOperation(frombuf,tobuf,operation);

 }

 if(Source->ClassNameIs("TTreeView"))

 {

 TTreeView *source=(TTreeView *)Source;

 TTreeView *sender=(TTreeView *)Sender;

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

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

 AnsiString senderstr=*((AnsiString *)(sender->GetNodeAt(X,Y)->Data));//+ExtractFileName(*((AnsiString *)(source->Selected->Data)));

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

 strcpy(frombuf,sourcestr.c_str());

 strcpy(tobuf,senderstr.c_str());

 FileAndFolderOperation(frombuf,tobuf,operation);

 }

 UpdateAll(false); //Обновление

 }

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

void __fastcall TForm1::TreeView1MouseDown(TObject *Sender,

 TMouseButton Button, TShiftState Shift, int X, int Y)

{

 if(DragnDrop && Button == mbLeft) //начало перетаскивания по нажатию на treeview

 {

 if(Shift.Contains(ssCtrl))

 type_file_operation_drag_drop=FO_COPY;

 else

 type_file_operation_drag_drop=FO_MOVE;

 TreeView1->BeginDrag(false,5);

 }

 

}

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

 AnsiString &S)

{

 S=RenameFileOrFolder(S);

 UpdateTreeView(false);

}

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


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

 AnsiString &S)

{

 S=RenameFileOrFolder(S);

 UpdateTreeView(false);

}

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

void __fastcall TForm1::NRenameClick(TObject *Sender)

{

 if(ListView1->ItemFocused==NULL)

 {

 if(TreeView1->Selected!=NULL)

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

 TreeView1->Selected->EditText();

 }

 else

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

 ListView1->Selected->EditCaption();

}

void __fastcall TForm1::TreeView1ContextPopup(TObject *Sender,

 TPoint &MousePos, bool &Handled)

{

 TTreeNode *node;

 if((node=TreeView1->GetNodeAt(MousePos.x,MousePos.y))!=NULL)

 {

 ListView1->ItemFocused=NULL;

 TreeView1->Selected=node;

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

 ViewFailAndFolderInListView(*((AnsiString *)(TreeView1->Selected->Data)));

 node->Focused=true;

 }

 else

 TreeView1->Selected=NULL;

 if(TreeView1->Selected!=NULL && TreeView1->Selected->Level>0)

 Handled=false;

 else

 Handled=true;

 PNOpen->Visible=false;

 PNView->Visible=false;

 PNSort->Visible=false;

 PNUpdate->Visible=false;

 PNProperty->Visible=true;

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

 {

 PNCut->Visible=true;

 PNCopy->Visible=true;

 PNDelete->Visible=true;

 PNRename->Visible=true;

 }

 else

 {

 PNCut->Visible=false;

 PNCopy->Visible=false;

 PNDelete->Visible=false;

 PNRename->Visible=false;

 }

 OpenClipboard(NULL); //Проверка возможности вставки

 if(IsClipboardFormatAvailable(CF_HDROP))

 PNPaste->Enabled=true;

 else

 PNPaste->Enabled=false;

 CloseClipboard();

}

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

1.3.  Листинг PropertyFile.cpp

TFPropertyFile *FPropertyFile;

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

__fastcall TFPropertyFile::TFPropertyFile(TComponent* Owner)

 : TForm(Owner)

{

}

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

void TFPropertyFile::Set_Change(AnsiString Name,WIN32_FILE_ATTRIBUTE_DATA &attr)

 {

 if (ENameFile->Modified) //Сохранение изменений

 { //Если изменнео имя файла папки

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

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

 char frombuf[1000]={'\0'}, tobuf[1000]={'\0'};

 strcpy(frombuf,Name.c_str());

 strcpy(tobuf,(ExtractFilePath(Name)+ENameFile->Text).c_str());

 Form1->FileAndFolderOperation(frombuf,tobuf,FO_RENAME); //Переименовываем

 }

 //Сохранение атрибутов

 if(CBArchiv->Checked) attr.dwFileAttributes |= FILE_ATTRIBUTE_ARCHIVE;

 else attr.dwFileAttributes &= ~FILE_ATTRIBUTE_ARCHIVE;

 if(CBReadOnly->Checked) attr.dwFileAttributes |= FILE_ATTRIBUTE_READONLY;

 else attr.dwFileAttributes &= ~FILE_ATTRIBUTE_READONLY;

 if(CBHide->Checked) attr.dwFileAttributes |= FILE_ATTRIBUTE_HIDDEN;

 else attr.dwFileAttributes &= ~FILE_ATTRIBUTE_HIDDEN;

 if(CBSystem->Checked) attr.dwFileAttributes |= FILE_ATTRIBUTE_SYSTEM;

 else attr.dwFileAttributes &= ~FILE_ATTRIBUTE_SYSTEM;

 SetFileAttributes(Name.c_str(),attr.dwFileAttributes); //Установка

 ENameFile->Modified=false;

 }

void TFPropertyFile::Get_Size_Folder(AnsiString dir)

 {

 TSearchRec sr;

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

 return;

 do

 {

 int Attr=FileGetAttr(dir+sr.Name);

 if(Attr==-1 || sr.Name=="." || sr.Name=="..")

 continue; //Проверка на отсутствующие в действиетельности папки

 if(sr.Attr & faDirectory)

 {

 num_folder++;

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

 }

 else

 {

 num_files++;

 size+=sr.Size;

 unsigned long temp;

 temp=sr.Size;

 if((temp/byte_in_cluster*byte_in_cluster)!=temp) //Проверка влезания файла

 temp=(temp/byte_in_cluster+1)*byte_in_cluster;

 size_on_disk+=temp;

 }

 }

 while(FindNext(sr)==0);

 FindClose(sr);

 }

void TFPropertyFile::Prepare(AnsiString Name)

 {

 //Подготовка данных и показ свойств файла

 unsigned long int byte_in_sector,sector_in_cluster;

 GetDiskFreeSpace((ExtractFileDrive(Name)+"\\").c_str(),&sector_in_cluster,

 &byte_in_sector,NULL,NULL);

 byte_in_cluster=sector_in_cluster*byte_in_sector;

 Name_File=Name;

 GetFileAttributesEx(Name.c_str(),GetFileExInfoStandard,&attr);

 FILETIME ft;

 SYSTEMTIME st;

 AnsiString date;

 TDateTime dt;

 if((FileGetAttr(Name) & faDirectory)!=0) //Если свойства папки

 {

 Graphics::TBitmap *i=new Graphics::TBitmap; //Загрузка иконки папки

 Form1->ImageList3->GetBitmap(ImageCloseFolder,i);

 IIconFile->Picture->Bitmap->Assign(i);

 delete i;

 ENameFile->Text=ExtractFileName(Name.SubString(1,Name.Length()-1));

 LTypeFile->Caption="Папка"; //Загрузка названия

 LFolder->Caption=ExtractFilePath(Name.SubString(1,Name.Length()-1));

 num_files=num_folder=size=size_on_disk=0; //Запуск рекурсивной функции считающей

 Get_Size_Folder(Name); //размер папки кол-во файлов и папок в ней

 LSize->Caption=AnsiString(FormatFloat("#,##0", size/1024))+" KB ("+AnsiString(FormatFloat("#,##0", size))+ " байт)";

 LOnDisk->Caption=AnsiString(FormatFloat("#,##0", size_on_disk/1024))+" KB ("+AnsiString(FormatFloat("#,##0", size_on_disk))+ " байт)";

 LName->Caption="Содержит :";

 LOpen->Caption=AnsiString("Файлов: ")+num_files+" ; Папок: "+num_folder;

 }

 else //Если свойства файла

 //Проверка влезания файла

 //Даты создания

 FileTimeToLocalFileTime(&(attr.ftCreationTime), &ft);

 FileTimeToSystemTime( &ft, &st);

 dt=SystemTimeToDateTime(st);

 DateTimeToString(date,"d mmm yyyy г., hh:nn:ss",dt);

 LCreate->Caption=date; //Запись даты создания

 ///Даты изменения

 FileTimeToLocalFileTime(&(attr.ftLastWriteTime), &ft);

 FileTimeToSystemTime( &ft, &st);

 dt=SystemTimeToDateTime(st);

 DateTimeToString(date,"d mmm yyyy г., hh:nn:ss",dt);

 LWrite->Caption=date; //Запись даты изменения


 CBArchiv->Checked=attr.dwFileAttributes & FILE_ATTRIBUTE_ARCHIVE;

 CBReadOnly->Checked=attr.dwFileAttributes & FILE_ATTRIBUTE_READONLY;

 CBHide->Checked=attr.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN;

 CBSystem->Checked=attr.dwFileAttributes & FILE_ATTRIBUTE_SYSTEM;

 ENameFile->Modified=false;

 if(FPropertyFile->ShowModal()==mrOk) //Показ формы

 Set_Change(Name,attr);

 }

void __fastcall TFPropertyFile::BtApplyClick(TObject *Sender)

{ //Щелчок на применить

 Set_Change(Name_File,attr); //Вызов функции сохранения изменений

}

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

1.4.  Листинг PropertyDrive.cpp

TFPropertyDrive *FPropertyDrive;

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

__fastcall TFPropertyDrive::TFPropertyDrive(TComponent* Owner)

 : TForm(Owner)

{

}

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

void TFPropertyDrive::Prepare(AnsiString Name)

 {

 Name_Drive=Name;

 Graphics::TBitmap *i=new Graphics::TBitmap; //Загрузка иконки папки

 Caption="Свойства: Диск "+Name.SubString(1,2);

 switch(GetDriveType(Name.c_str())) //Загрузка image

 {

 case DRIVE_REMOVABLE:

 LType->Caption="Дисковод";

 Form1->ImageList3->GetBitmap(ImageFloppy,i);

 break;

 case DRIVE_FIXED:

 case DRIVE_RAMDISK:

 LType->Caption="Жесткий диск";

 Form1->ImageList3->GetBitmap(ImageDrive,i);

 break;

 case DRIVE_CDROM:

 LType->Caption="CD-дисковод";

 Form1->ImageList3->GetBitmap(ImageCD,i);

 break;

 default:

 LType->Caption="Неизвестный дисковод";

 Form1->ImageList3->GetBitmap(ImageWindows,i);

 break;

 }

 IIconDisk->Picture->Bitmap->Assign(i);

 delete i;

 char volume[20],filesystem[20];

 if(GetVolumeInformation(Name.c_str(),volume,20,NULL,NULL,NULL,filesystem,20))

 {

 ELabelDisk->Text=volume;

 LFileSystem->Caption=filesystem;

 }

 else

 {

 ELabelDisk->Text="";

 LFileSystem->Caption="";

 }

 __int64 FreeSpace,TotalSpace,TakenSpace;

 Chart1->Series[0]->Clear();

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

 {

 double c=10.0;

 TakenSpace=TotalSpace-FreeSpace;

 LTaken1->Caption=AnsiString(FormatFloat("#,##0", TakenSpace))+" байт";

 LTaken2->Caption=AnsiString(((TakenSpace*10)/1024/1024/1024)/c)+" ГБ";

 LFree1->Caption=AnsiString(FormatFloat("#,##0", FreeSpace))+" байт";

 LFree2->Caption=AnsiString(((FreeSpace*10)/1024/1024/1024)/c)+" ГБ";

 LCapacity1->Caption=AnsiString(FormatFloat("#,##0", TotalSpace))+" байт";

 LCapacity2->Caption=AnsiString(((TotalSpace*10)/1024/1024/1024)/c)+" ГБ";

 Image1->Canvas->Brush->Color=clRed;

 Image1->Canvas->FillRect(Rect(0,0,Image1->Width,Image1->Height));

 Chart1->Series[0]->Add(TakenSpace,"1",clRed);

 Image2->Canvas->Brush->Color=clGreen;

 Image2->Canvas->FillRect(Rect(0,0,Image2->Width,Image2->Height));

 Chart1->Series[0]->Add(FreeSpace,"2",clGreen);

 Chart1->View3DOptions->Elevation=290;

 }

 else

 {

 LTaken1->Caption="0 байт";

 LTaken2->Caption="0 байт";

 LFree1->Caption="0 байт";

 LFree2->Caption="0 байт";

 LCapacity1->Caption="0 байт";

 LCapacity2->Caption="0 байт";

 Image1->Canvas->Brush->Color=clRed;

 Image1->Canvas->FillRect(Rect(0,0,Image1->Width,Image1->Height));

 Chart1->Series[0]->Add(100,"1",clRed);

 Image2->Canvas->Brush->Color=clGreen;

 Image2->Canvas->FillRect(Rect(0,0,Image2->Width,Image2->Height));

 Chart1->View3DOptions->Elevation=290;

 }

 ELabelDisk->Modified=false;

 if(FPropertyDrive->ShowModal()==mrOk)

 {

 if(ELabelDisk->Modified)

 SetVolumeLabel(Name.c_str(),ELabelDisk->Text.c_str());

 }

 }


void __fastcall TFPropertyDrive::BtApplyClick(TObject *Sender)

{

 if(ELabelDisk->Modified)

 SetVolumeLabel(Name_Drive.c_str(),ELabelDisk->Text.c_str());

 ELabelDisk->Modified=false;

}

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


Список использованной литературы

1.  А.Я. Архангельский. Программирование в C++ Builder 6. – М.: ЗАО «Издательство БИНОМ», 2003 г. – 1152 с.

2.  А.Я. Архангельский. Справочное пособие. Книга 2. Классы и компоненты. – М.: Бином-Пресс, 2002 г. –528 с.

3.  http://rsdn.ru/

4.  http://www.sources.ru/

5.  http://msdn.microsoft.com/


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


на тему рефераты
НОВОСТИ на тему рефераты
на тему рефераты
ВХОД на тему рефераты
Логин:
Пароль:
регистрация
забыли пароль?

на тему рефераты    
на тему рефераты
ТЕГИ на тему рефераты

Рефераты бесплатно, реферат бесплатно, курсовые работы, реферат, доклады, рефераты, рефераты скачать, рефераты на тему, сочинения, курсовые, дипломы, научные работы и многое другое.


Copyright © 2012 г.
При использовании материалов - ссылка на сайт обязательна.