Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
0 / 0 / 4
Регистрация: 21.08.2017
Сообщений: 208

Написание файлового менеджера: добавление заголовочных файлов к проекту, а также прямая и обратная совместимость кода в

02.05.2019, 20:23. Показов 2846. Ответов 26

Студворк — интернет-сервис помощи студентам
Добрый день! Я пишу в шестом билдере файловый менеджер для курсовой работы как оконное приложение и не могу понять, в какой версии Borland C++ Builder или Embracadero разрабатывался этот код. Будет ли программа, написанная в старой версии, работать в новой и наоборот? А также как создавать новые заголовочные или cpp-файлы для текущего проекта?
Я пробовал использовать «Project -> Add To Project» для чернового консольного приложения, но в результате открывается окно проводника, который может только открыть уже существующий файл, а не создать новый. В итоге я создал на диске D папку с будущим проектом и через «File -> New -> Other… -> Cpp File» создал два cpp-файла перед созданием проекта, из-за чего возникли проблемы с компиляцией. По-хорошему, я по ходу работы в проекте кликаю правой клавишей по древовидной структуре, выбираю пункт «Создать -> Файл CPP» после чего среда сама подключает нужные библиотеки и после компиляции нужные заголовочные файлы «встают» сами. Файлы PropertyFile.cpp и PropertyDrive.cpp сами компилироваться не захотели, ссылаясь на ошибку
Error: Field Form1->ImageList2 does not have a corresponding component. Remove the declaration? (Yes/No/Cancel/Help)
и заголовочные файлы не «подтянулись». Придётся делать всё вручную и самому создавать недостающие заголовочные файлы. Какие библиотеки я должен подключить в двух вышеупомянутых файлах CPP и нужны ли первые девять строк в файле Unit1.h? Чтобы скомпилировать файл, не запуская его, я шёл в Project -> Compile Unit. И тут вопрос: после этой команды скомпилируется весь проект или только открытый в данный момент времени файл?

Извините за огромное количество вопросов, просто курс визуального программирования я «проспал» и без помощи со стороны или хотя бы списка литературы с подробными объяснениями я в этом обилии форм, кнопок и свойств «заблужусь».

В какой версии билдера или эмбракадеры лучше писать этот код? Где и какие библиотеки нужно добавить или убрать? Как добавить к проекту header- или cpp-файл непосредственно в ходе работы с ним и как скомпилировать отдельную подпрограмму, не запуская весь проект? Работаю в Borland C++ Builder 6.


Unit1.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
 
enum {ImageWindows, ImageFloppy, ImageDrive, ImageCD, ImageMyComp,ImageCloseFolder, ImageOpenFolder};
void strcat0(char * &dest,char *source); //Ñîåäèíåíèå ñòðîê ñ îñòàâëåíèåì íóëåâîãî ñèìâîëà
void finstr(char *dest);
unsigned int lengthfinstr(char *dest);
 
struct DROPFILES {
 DWORD pFiles; // offset of file list
 POINT pt; // drop point (client coords)
 BOOL fNC; // is it on NonClient area
 // and pt is in screen coords
 BOOL fWide; // WIDE character switch
};
 
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
 TImageList *ImageList2;
 void __fastcall TreeView1Expanding(TObject *Sender,
 TTreeNode *Node, bool &AllowExpansion);
 void __fastcall TreeView1Compare(TObject *Sender, TTreeNode *Node1,
 TTreeNode *Node2, int Data, int &Compare);
 void __fastcall TreeView1Expanded(TObject *Sender,
 TTreeNode *Node);
 void __fastcall TreeView1Collapsing(TObject *Sender,
 TTreeNode *Node, bool &AllowCollapse);
 void __fastcall TreeView1Editing(TObject *Sender, TTreeNode *Node,
 bool &AllowEdit);
 void __fastcall ListView1Compare(TObject *Sender, TListItem *Item1,
 TListItem *Item2, int Data, int &Compare);
 void __fastcall ListView1DblClick(TObject *Sender);
 void __fastcall ListView1MouseDown(TObject *Sender,
 TMouseButton Button, TShiftState Shift, int X, int Y);
 void __fastcall TreeView1DragOver(TObject *Sender, TObject *Source,
 int X, int Y, TDragState State, bool &Accept);
 void __fastcall TreeView1DragDrop(TObject *Sender, TObject *Source,
 int X, int Y);
 void __fastcall TreeView1MouseDown(TObject *Sender,
 TMouseButton Button, TShiftState Shift, int X, int Y);
 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
PropertyFile.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
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 //Åñëè ñâîéñòâà ôàéëà
 {
 SHFILEINFO sfi; //Ñòðóêòóðà ñîäåðæàùàÿ èíôó î ôàéëå
 ZeroMemory(&sfi,sizeof(sfi)); //Î÷èñòêà
 SHGetFileInfo(Name.c_str(),FILE_ATTRIBUTE_NORMAL,&sfi,sizeof(sfi),
 SHGFI_USEFILEATTRIBUTES|SHGFI_TYPENAME|SHGFI_ICON | SHGFI_LARGEICON    ); //Ïîëó÷åíèå äàííûõ
 TIcon *icon=new TIcon(); //Ñîçäàíèå äèíàìè÷åñêîé èêîíêè
 icon->Handle=sfi.hIcon; //Çàãðóçêà â íåå äåñêðèïòîðà íóæíîé èêîíêè
 IIconFile->Picture->Icon->Assign(icon); //Çàíåñåíèå äåñêðèïòîðà â imagelist
 delete icon;
 ENameFile->Text=ExtractFileName(Name);
 LTypeFile->Caption=(AnsiString)(sfi.szTypeName);//Çàíåñåíèå èìåíè òèïà
 LFolder->Caption=ExtractFilePath(Name); //Çàíåñåíèå êàòàëîãà
 
 
 //----------------------------------------------
 //Ïîëó÷åíèå àòðèáóòîâ - äàò ðàçìåðà àòðèáóòîâ
 
 unsigned long int size=attr.nFileSizeHigh<<16 | attr.nFileSizeLow;
 //Âûâîä ðàçìåðîâ
 LSize->Caption=AnsiString(size/1024)+" KB ("+AnsiString(size)+ " áàéò)"; //ðàçìåðà
 if((size/byte_in_cluster*byte_in_cluster)!=size) //Ïðîâåðêà âëåçàíèÿ ôàéëà
 size=(size/byte_in_cluster+1)*byte_in_cluster; //â êëàñòåðû è íàëè÷èÿ ñâîáîäíîãî ìåñòà â íèõ
 LOnDisk->Caption=AnsiString(size/1024)+" KB ("+AnsiString(size)+ " áàéò)";
 LName->Caption="Îòêðûò :";
 //----------------------------------------------------
 //Îïðåäåëåíèå äàò
 //Äàòû äîñòóïà
 FileTimeToLocalFileTime(&(attr.ftLastAccessTime), &ft);
 FileTimeToSystemTime( &ft, &st);
 dt=SystemTimeToDateTime(st);
 DateTimeToString(date,"d mmm yyyy ã.",dt);
 LOpen->Caption=date; //Çàïèñü äàòû äîñòóïà
 //----------------------------------------
 }
 //Äàòû ñîçäàíèÿ
 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); //Âûçîâ ôóíêöèè ñîõðàíåíèÿ èçìåíåíèé
}
//---------------------------------------------------------------------------
PropertyDrive.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
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;
}
//---------------------------------------------------------------------------
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.05.2019, 20:23
Ответы с готовыми решениями:

Добавление заголовочных файлов к проекту
Приветствую уважаемые посетители cyberforum! Не знаю, почему не может открыть файл amx, хотя файл лежит в папке...

Написание консольного файлового менеджера
Добрый день, в университете задали проект по созданию консольного Файлового менеджера на C++ в котором можно: 1)Перемещать между...

Про добавление заголовочных файлов в заголовочных файлах
В который раз эта вещь засовывает мозги в блендер! Я про то, что не могу однозначно запомнить (основываясь на моих знаниях о директиве...

26
0 / 0 / 4
Регистрация: 21.08.2017
Сообщений: 208
05.05.2019, 14:45  [ТС]
Студворк — интернет-сервис помощи студентам
nick42, а откуда Вы взяли оператор сложения, из какой библиотеки? Он случайно не из класса string?
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
05.05.2019, 15:39
БузинВладимир, вы сейчас говорите не на моём лексиконе. Я не изучал программирование и не штудировал спец.литературу по этому предмету. Поэтому я избегаю давать советы там, где студенты ожидают теоретически грамотной рекомендации. Мой совет помог исправлению ошибки? ОК; а объяснять своему преподавателю почему так, а не иначе..., ну - это ваша головная боль.
Не нужно было спать на лекциях
0
Модератор
 Аватар для D1973
9944 / 6479 / 2460
Регистрация: 21.01.2014
Сообщений: 27,462
Записей в блоге: 3
06.05.2019, 16:13
Цитата Сообщение от БузинВладимир Посмотреть сообщение
а откуда Вы взяли оператор сложения
Обычная конкатенация паскалевских строк... БузинВладимир, это C++ Builder, а не чистый С++ - не забывайте про это... Тут зачастую гораздо удобнее и эффективнее оперировать родными для Билдера, а не для С++, классами...
0
0 / 0 / 4
Регистрация: 21.08.2017
Сообщений: 208
07.05.2019, 09:32  [ТС]
Я модернизировал программу: в контекстном меню создал две кнопки: Cut и Paste, а также две глобальные переменные: filepath и filename. При нажатии на первую кнопку в этих глобальных переменных запоминаются текущий путь и имя файла, а на вторую - в зависимости от выполнения команды перемещения выводится сообщение об успешности или ошибке операции. Какие ещё случаи я не предусмотрел в алгоритме перемещения? Чем MoveFile отличается от MoveFileEx или MoveFileW? И как при нажатии на кнопку вывести диалоговое окно с полем для переименования файлов и кнопками OK и Cancel, если я буду создавать кнопку Rename?

Unit1.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <vcl.h>
#include <string>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
System::AnsiString filepath;
System::AnsiString filename;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
FileListBox1->Mask = Edit1->Text.Trim() + "*.*";
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Docs1Click(TObject *Sender)
{
Edit1->Text="*.docx";
FileListBox1->Mask="*.docx";
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::JPEGImages1Click(TObject *Sender)
{
Edit1->Text="*.jpg";
FileListBox1->Mask="*.jpg";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::AllFile1Click(TObject *Sender)
{
Edit1->Text="*.*";
FileListBox1->Mask="*.*";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Cut1Click(TObject *Sender)
{
filepath = FileListBox1->FileName; //Ïðè íàæàòèè íà êíîïêó "Cut" çàïîìèíàåòñÿ òåêóùèé ïóòü ê
filename = ExtractFileName(FileListBox1->FileName); //ôàéëó è åãî òåêóùåå èìÿ
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Paste1Click(TObject *Sender)
{ //ïðîâåðÿåì, áûë ëè ïåðåìåù¸í ôàéë, è, â çàâèñèìîñòè îò ðåçóëüòàòà, âûâîäèì ñîîáùåíèå îá
if(MoveFile(filepath.c_str(),(DirectoryListBox1->Directory+"/"+filename).c_str())) {
ShowMessage("File moved successfully!"); //óñïåøíîñòè èëè îøèáêå ïåðåìåùåíèÿ
} else {
ShowMessage("Error! File didn't move!");
}
}
Unit1.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <FileCtrl.hpp>
#include <Menus.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
        TDriveComboBox *DriveComboBox1;
        TDirectoryListBox *DirectoryListBox1;
        TFileListBox *FileListBox1;
        TEdit *Edit1;
        TPopupMenu *PopupMenu1;
        TMenuItem *Docs1;
        TMenuItem *JPEGImages1;
        TMenuItem *AllFile1;
        TMenuItem *Cut1;
        TMenuItem *Paste1;
        void __fastcall Edit1Change(TObject *Sender);
        void __fastcall Docs1Click(TObject *Sender);
        void __fastcall JPEGImages1Click(TObject *Sender);
        void __fastcall AllFile1Click(TObject *Sender);
        void __fastcall Cut1Click(TObject *Sender);
        void __fastcall Paste1Click(TObject *Sender);
private:    // User declarations
public:     // User declarations
        __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
Миниатюры
Написание файлового менеджера: добавление заголовочных файлов к проекту, а также прямая и обратная совместимость кода в  
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
07.05.2019, 13:00
Цитата Сообщение от БузинВладимир Посмотреть сообщение
как при нажатии на кнопку вывести диалоговое окно
Мой вариант__
C++
1
2
3
4
5
6
7
void __fastcall TForm1::Rename1Click(TObject *Sender)
{
    filename = ExtractFileName(FileListBox1->FileName);
    if( !InputQuery("Переименование","Файл:",filename)) return;
    RenameFile(FileListBox1->FileName,filename); 
    FileListBox1->Update(); 
}
Добавлено через 1 час 2 минуты
И добавить в конец: FileListBox1->FileName = filename; чтоб фокус не сползал.
0
0 / 0 / 4
Регистрация: 21.08.2017
Сообщений: 208
08.05.2019, 11:50  [ТС]
Что значит "один файл не должен быть перемещён дважды? Я в условии проверял, выполнилась ли операция перемещения и в зависимости от его выполнения выводил сообщение об успешности или ошибке. Как изменить условие проверки?

Добавлено через 3 часа 36 минут
Я решил сделать кнопки Cut и Paste неактивными по умолчанию так, чтобы кнопка Cut стала активной только когда в FileListBox будет выделен какой-нибудь элемент списка, а кнопка Paste - тогда, когда будет нажата кнопка Cut и записаны путь к файлу и его имя. Я использовал событие OnChange для FileListBox и OnClick для Cut, но первое событие не сработало, кнопка Cut всё равно активна. Как сделать так, чтобы кнопка Cut была активна или неактивна в зависимости от того, был ли выбран файл в FileListBox или нет?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
void __fastcall TForm1::Cut1Click(TObject *Sender)
{
filepath = FileListBox1->FileName; //При нажатии на кнопку "Cut" запоминается текущий путь к
filename = ExtractFileName(FileListBox1->FileName); //файлу и его текущее имя
Paste1->Enabled = true; //Делаем кнопку Paste активной, так как по умолчанию она неактивна
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Paste1Click(TObject *Sender)
{ //Проверяем, был ли перемещён файл, и, в зависимости от результата, выводим сообщение об
if(MoveFile(filepath.c_str(),(DirectoryListBox1->Directory+"/"+filename).c_str())) {
ShowMessage("File moved from\n"+filepath+"to\n"+DirectoryListBox1->Directory+"/"+filename); //успешности или ошибке перемещения
Paste1->Enabled = false;
FileListBox1->Update();
} else {
ShowMessage("Error! File didn't move!");
Paste1->Enabled = false;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FileListBox1Change(TObject *Sender)
{ //Если какой-нибудь элемент из списка файлов был выделен, делаем кнопку Cut активной,
if(ExtractFileName(FileListBox1->FileName) != NULL) { //так как по умолчанию она неактивна
Cut1->Enabled = true;
} else {
Cut1->Enabled = false;
}
}
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
08.05.2019, 14:03
Цитата Сообщение от БузинВладимир Посмотреть сообщение
Как сделать так, чтобы кнопка Cut была активна или неактивна в зависимости
C++
1
Cut1->Enabled = FileListBox1->ItemIndex >=0;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.05.2019, 14:03

Обратная совместимость двоичных файлов с VB6
Добрый день! Портирую большой проект из VB6 в VB.net (VS 2008). Необходимо достигнуть обратной совместимости при чтении двоичных файлов...

Реализация файлового менеджера
Нужно сделать программу что-то вроде &quot;Файлового менеджера&quot;(Упрощённый, то есть отображение структуры файлов, функции такие как: копировать,...

Исходник файлового менеджера
Есть ли у кого нибудь исходник файлового менеджера(проводника) на C# в visual studio 2012 -2017

Совте о создании файлового менеджера
Мне нужно написать файловый менеджер с удобным интерфейсом.Какие библиотеки и функции мне нужно использовать в своей программе.Направьте...

Смена файлового менеджера по умолчанию
Как сменить файловый менеджер по умолчанию на Linux mint 17 MATE? Надо чтобы все папки, включая computer:///, trash:///, домашнюю и т.д.,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Новые блоги и статьи
Оказывается, Unreal Engine позволяет качество на порядки выше, чем было в Lineedge
Etyuhibosecyu 05.07.2026
Жаль, конечно, что я не узнал об этом, пока Lineedge существовала, а то бы Noname2331 написал, что волки превращаются в пиксельную кашу, а я бы его попросил скачать какую-нибудь бриллиантовую или Pro. . .
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась. Первый вариант. . .
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2. Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru