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

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

02.05.2019, 20:23. Показов 2778. Ответов 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
3190 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,023
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
Ответ Создать тему
Новые блоги и статьи
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru