⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cdadd.cpp

📁 管理光盘的程序
💻 CPP
字号:
//---------------------------------------------------------------------------
// 学韬电子光盘册   版本: 1.0.2
// 作者:颜承     时间:2000.1.17
// 主要构件: TListView ,TTreeView ,TClientDataSet ,TList等
// API函数: GetVolumeInformation,ShellExecute  GetDriveType GetLogicDriveStrings
// 自定义类: TSerchDisk 递归方法搜索整个磁盘目录文件结构
// 此为添加光盘的实现文件
//---------------------------------------------------------------------------
// 版权所有(C)2000 颜 承
// 这一程序是自由软件,
// 你可以遵照自由软件基金会出版的GNU通用公共许可证条款来修改和重新发布这一程序。
// 发布这一程序的目的是希望它有用,但没有任何担保。甚至没有适合特定目的的隐含的担保。
// 更详细的情况请参阅GNU通用公共许可证。
// 你应该已经和程序一起收到一份GNU通用公共许可证的副本。
// 我的联系方式:桂林集琦药业股份有限公司技术部(541004)
// E-Mail: ycshowtop@sohu.com
//-------------------------------------------------------------------------------
#include <vcl.h>
#include <vcl/registry.hpp>
#pragma hdrstop

#include "CDAdd.h"
#include "main.h"
#include "SerchDisk.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm3 *Form3;
AnsiString TheCDSeriNo;
AnsiString strDir;
//---------------------------------------------------------------------------
__fastcall TForm3::TForm3(TComponent* Owner)
        : TForm(Owner)
{
TheCDSeriNo="";
Edit2->Text="";     //光盘编号
}
//---------------------------------------------------------------------------
void __fastcall TForm3::DriveComboBox1Change(TObject *Sender)
{
 strDir= AnsiString(DriveComboBox1->Drive) + AnsiString(":\\");

 unsigned long RetVal,a,b;
 char VolName[256],str1[256];

 int i;
 for(i=0;i<256;i++) { str1[i]='\0'; VolName[i]='\0';}

 //Windows API 函数 取光盘卷标序列号,如无光盘则返回0
 GetVolumeInformation(strDir.c_str(), VolName,256,&RetVal,&a,&b,str1,256);

 if(RetVal==0) {
    Application->MessageBox("请先放入光盘,稍后再试!","提示",MB_OK);
    return;
 }
 else {
    Edit1->Text=AnsiString(VolName); //光盘名称默认为卷标名
    TheCDSeriNo=AnsiString(RetVal);  //得到的序列号
 }
}
//---------------------------------------------------------------------------
//必须给出光盘编号,
void __fastcall TForm3::Edit2Change(TObject *Sender)
{
 if(Edit2->Text=="") btOK->Enabled=false;
 else btOK->Enabled=true;
}
//---------------------------------------------------------------------------
//确定
void __fastcall TForm3::btOKClick(TObject *Sender)
{
 TLocateOptions op;
 op.Clear();
 op<<loCaseInsensitive;

 //确保序列号不重复
 Form1->ClientDataSet1->First();
 if( Form1->ClientDataSet1->Locate("CDSeriNo",TheCDSeriNo,op) ) {
     Application->MessageBox("库中已有此光盘的记录!","提示",MB_OK);
     TheCDSeriNo="";
     return;
 }
 //确保编号不重复
 Form1->ClientDataSet1->First();
 if( Form1->ClientDataSet1->Locate("CDNumber",Edit2->Text,op) ) {
     Application->MessageBox("库中已有此编号的光盘!","提示",MB_OK);
     Edit2->SetFocus();
     return;
 }

 //添加记录
 Form1->ClientDataSet1->Append();
 Form1->ClientDataSet1->FieldByName("CDName")->AsString=Edit1->Text;
 Form1->ClientDataSet1->FieldByName("CDNumber")->AsString=Edit2->Text;
 Form1->ClientDataSet1->FieldByName("CDSeriNo")->AsString=TheCDSeriNo;

 //在TreeView中加相应项目
 TTreeNode * tmpNode = Form1->TreeView1->Items->Item[0];
 TTreeNode * meNode = Form1->TreeView1->Items->AddChild(tmpNode,Edit1->Text.c_str());
 Form1->TreeView1->Selected=meNode;
 Form1->TreeView1->Selected->ImageIndex=1;
 Form1->TreeView1->Selected->SelectedIndex=0;
 Form1->itemFindCD->Enabled=true;

 //如果设置为自动搜索光盘,进行以下操作
 if( CheckBox1->Checked==true || CheckBox2->Checked==true ) {
    TSerchDisk * pSD = new TSerchDisk();
    if(CheckBox1->Checked==true) pSD->AddDir=true;
    if(CheckBox2->Checked==true) {    //查找文件类型
       int iCount,i;
       AnsiString tmp;

       tmp=ExtractFileDir(Application->ExeName);
       tmp=tmp+AnsiString("\\cdpack.ini");

       TMemIniFile * Reg=new TMemIniFile(tmp);

       if(Reg->SectionExists("Common")&& Reg->SectionExists("Filter")) {
          if(Reg->ValueExists("Common","FilterCount"))
             iCount = Reg->ReadInteger("Common","FilterCount",3);
          else {
             Application->MessageBox("错误的ini文件!","错误",MB_OK);
             goto work;
          }
          for(i=0;i<iCount;i++) {
             tmp=AnsiString("item")+AnsiString(i);
             if(Reg->ValueExists("Filter",tmp))
                pSD->FilterString[i]=Reg->ReadString("Filter",tmp,"");
             else {
                Application->MessageBox("错误的ini文件!","错误",MB_OK);
                goto work;
             }
          }
          pSD->FilterCount=iCount;
       }
       else Application->MessageBox("错误的ini文件!","错误",MB_OK);
work:  delete Reg;
    }

    pSD->PathName=strDir;

    int k=pSD->Serch(); //用TSerchDisk类列出光盘目录
    int i;
    AnsiString temp;
    for(i=0;i<k;i++) { //搜索结果加入软件库
       Form1->ClientDataSet2->Append();
       Form1->ClientDataSet2->FieldByName("CDSeriNo")->AsString=TheCDSeriNo;
       temp= pSD->FileList->Strings[i];
       Form1->ClientDataSet2->FieldByName("SWName")->AsString=GetSWName(temp);
       Form1->ClientDataSet2->FieldByName("SWDirFile")->AsString=temp;
       Form1->ClientDataSet2->FieldByName("SWDescription")->AsString="";
    }
    delete pSD;
    //更新ListView
    Form1->TreeView1Change(Form1->TreeView1,Form1->TreeView1->Selected);
    Form1->itemFindSoft->Enabled=true;

 }

 Close();
}
//---------------------------------------------------------------------------
//获取文件或目录的名称
AnsiString __fastcall TForm3::GetSWName(AnsiString str)
{
  //
  AnsiString name;
  if(str[str.Length()]=='\\') str[str.Length()]='\0'; //如是目录
  name=ExtractFileName(str);
  int k=name.LastDelimiter(".");    //去除扩展名
  if(k!=0) name[k]='\0';
  return name;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -