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

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

02.05.2019, 20:23. Показов 2706. Ответов 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
02.05.2019, 20:45  [ТС]
Кидаю скрин ошибки и документ с листингом программы, чтобы было понятнее.
Миниатюры
Написание файлового менеджера: добавление заголовочных файлов к проекту, а также прямая и обратная совместимость кода в  
Вложения
Тип файла: docx Листинг программы.docx (41.9 Кб, 9 просмотров)
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
03.05.2019, 09:20
БузинВладимир, по моему вы в легкой панике? Это лишнее.
Не стоит выкладывать сюда непонятно какие тексты. Лучше опубликуйте перечень всех тех файлов, из которых вы намереваетесь собрать проект. После этого можно будет начинать что-то советовать.

Добавлено через 1 час 22 минуты
P.S. как минимум нужны файлы с расширением dfm, а также заголовочные PropertyFile.h и PropertyDrive.h.
0
0 / 0 / 4
Регистрация: 21.08.2017
Сообщений: 208
03.05.2019, 09:57  [ТС]
У меня четыре файла: "Unit1.cpp", "Unit1.h", "PropertyFile.cpp" и "PropertyDrive.cpp". Весь вопрос в том, как слинковать два последних файла, чтобы заголовочные файлы к ним встали автоматом. Работаю с шестым билдером. Первый способ - перед работой с главным проектом создать PropertyFile и PropertyDrive как отдельные юниты, используя File -> New -> Unit, в результате чего заголовочные файлы у них будут "из коробки". Но есть вероятность в том, что они откажутся компилироваться из-за того, что компилятор не знает каких-либо функций или какие-то библиотеки не были подключены. И поэтому прототипы функций не пропишутся в их заголовочных файлах. Тогда какие библиотеки надо будет подключать и где, если это будет оконное приложение? Второй способ - непосредственно в ходе работы с главным проектом добавить к нему НОВЫЕ CPP-файлы. Но есть вопросы: пропишутся ли к ним нужные библиотеки, подтянутся ли к ним заголовочные файлы после компиляции и как слинковать только их, не затрагивая основной проект? Третий способ - делать всё вручную - не пподходит. Файл Unit1.cpp не поместился в теме. Смотрите его в документе с листингом программы.

Добавлено через 3 минуты
И как создать новые cpp-файлы непосредственно в ходе работы с основным проектом? Project -> Add To Project не подходит, потому что так можно открыть уже существующие файлы, а не создать новые.
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
03.05.2019, 11:11
Я только что попробовал собрать проект "на ощупь". Сейчас добью последние ошибки (чтоб хотя бы компилировался) и выложу в архиве. Пока можете попробовать открыть проект в своем Билдере для начала (должно быть с десяток Errors при компиляции). Можете потренироваться привести в порядок формы, потому что я ничего не компоновал, да и не разбирался.
Вложения
Тип файла: zip 60.ZIP (20.2 Кб, 7 просмотров)
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
03.05.2019, 11:17
P.S. ..поспешил. Этот проект у вас вряд ли откроется. Попробуйте из этого архива.
Вложения
Тип файла: zip 60.ZIP (20.1 Кб, 11 просмотров)
0
0 / 0 / 4
Регистрация: 21.08.2017
Сообщений: 208
03.05.2019, 14:27  [ТС]
Получил ошибки типа E2541 о неопределённых символах в PNOpen, PNCut, PNCopy, PNPaste, PNRename, PNDelete в строках

C++
1
2
3
 PNOpen->Visible=false;
 PNView->Visible=false;
 PNSort->Visible=false;
Добавлено через 1 минуту
Так он для пятой версии билдера? Будет ли работать на шестой?

Добавлено через 7 минут
А у Вас он запустился?
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
03.05.2019, 15:21
В ваших файлах не хватает довольно большого куска, где собраны обработчики от ряда кнопок и пунктов меню (типа NIcon, TBRename и т.д.). Или ищите, или будете дописывать вручную.
Цитата Сообщение от БузинВладимир Посмотреть сообщение
Так он для пятой версии билдера? Будет ли работать на шестой?
Обычно преобразовывает без лишних вопросов.
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
03.05.2019, 16:57
П.С. Этот должен скомпилироваться
Вложения
Тип файла: zip 61.ZIP (383.0 Кб, 15 просмотров)
0
0 / 0 / 4
Регистрация: 21.08.2017
Сообщений: 208
04.05.2019, 12:05  [ТС]
Я пытался сделать как в этом видеоуроке
https://www.youtube.com/watch?... 0j&index=3
а потом к этой программе приделать кнопки копирования и переименования и к ним привязать алгоритмы найденные на сторонних сайтах, но у меня вылезли две ошибки. Щас выложу код программы, а потом скриншоты с ошибками.
Unit1.cppp
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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
FileListBox1->Mask='*.'+Edit1->Text;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::CommandFile1Click(TObject *Sender)
{
    Edit1->Text="*.bat";
    FileListBox1->Mask="*.bat";
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::MP31Click(TObject *Sender)
{
    Edit1->Text="*.mp3";
    FileListBox1->Mask="*.mp3";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::AllFile1Click(TObject *Sender)
{
    Edit1->Text="*.*";
    FileListBox1->Mask="*.*";
}
//---------------------------------------------------------------------------
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
#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 *CommandFile1;
        TMenuItem *MP31;
        TMenuItem *AllFile1;
        void __fastcall Edit1Change(TObject *Sender);
        void __fastcall CommandFile1Click(TObject *Sender);
        void __fastcall MP31Click(TObject *Sender);
        void __fastcall AllFile1Click(TObject *Sender);
private:    // User declarations
public:     // User declarations
        __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
0
0 / 0 / 4
Регистрация: 21.08.2017
Сообщений: 208
04.05.2019, 12:08  [ТС]
Вот скриншоты:
Миниатюры
Написание файлового менеджера: добавление заголовочных файлов к проекту, а также прямая и обратная совместимость кода в   Написание файлового менеджера: добавление заголовочных файлов к проекту, а также прямая и обратная совместимость кода в  
0
0 / 0 / 4
Регистрация: 21.08.2017
Сообщений: 208
04.05.2019, 12:31  [ТС]
Если я просто спишу, я не пойму назначение функций и их работу, чтобы составить описание к проекту. Потом при сдаче надо будет доказать, что сам писал. В чём ошибка во втором случае? И на всякий случай, если всё-таки придётся списать комментарии к работе функций там есть?
0
place status here
 Аватар для gunslinger
3186 / 2220 / 640
Регистрация: 20.07.2013
Сообщений: 6,012
04.05.2019, 13:45
Внутри одинарных кавычек может содержаться лишь 1 символ (а не несколько).
Замени одинарные кавычки на двойные (для выделения нескольких символов).

Вторая ошибка - компилятор не понимает, какую функцию сложения (какого типа значение операнда) использовать.
0
0 / 0 / 4
Регистрация: 21.08.2017
Сообщений: 208
04.05.2019, 15:36  [ТС]
Почему тогда в видео использовали оператор сложения, и какое преобразование я должен провести:

C++
1
IntToStr(Edit1->Text)
или

C++
1
DoubleToStr(Edit1->Text)
Добавлено через 23 минуты
А strcat не спасает положение?
C++
1
FileListBox1->Mask=strcat("*.", Edit1->Text);
0
0 / 0 / 4
Регистрация: 21.08.2017
Сообщений: 208
04.05.2019, 20:14  [ТС]
Фокус со strcat не прокатил и вылезли следующие ошибки:
Миниатюры
Написание файлового менеджера: добавление заголовочных файлов к проекту, а также прямая и обратная совместимость кода в  
0
0 / 0 / 4
Регистрация: 21.08.2017
Сообщений: 208
04.05.2019, 20:16  [ТС]
Так уж и быть, тот архив - моя последняя надежда, только в телах функций закомментируйте их работу и роль входных и выходных параметров, чтобы я по комментариям смог составить описание.
0
0 / 0 / 4
Регистрация: 21.08.2017
Сообщений: 208
04.05.2019, 21:25  [ТС]
Я пытался сделать так:
C++
1
2
char a[3] = "*.";
FileListBox1->Mask=strcat(a, Edit1->Text.c_str());
Проект даже запустился, но выдал ошибку:
Миниатюры
Написание файлового менеджера: добавление заголовочных файлов к проекту, а также прямая и обратная совместимость кода в  
0
0 / 0 / 4
Регистрация: 21.08.2017
Сообщений: 208
05.05.2019, 07:01  [ТС]
Попробовал оператор сложения из библиотеки string. Проект опять же запустился, файлы из всех папок отображаются корректно, но строка поиска не работает. Пытаюсь ввести часть имени файла и получаю пустой экран.
0
0 / 0 / 4
Регистрация: 21.08.2017
Сообщений: 208
05.05.2019, 07:11  [ТС]
Вот мой проект. Не подскажите, что делать со строкой поиска?
Вложения
Тип файла: zip file-manager.zip (526.4 Кб, 13 просмотров)
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
05.05.2019, 14:08
Если имеется в виду обработчик Edit1Change, то оставьте там одну эту строку__
C++
1
   FileListBox1->Mask = Edit1->Text.Trim() + "*.*";
и поиск будет работать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.05.2019, 14:08
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru