CDAdd.cpp
上传用户:deyixm
上传日期:2007-01-06
资源大小:43k
文件大小:6k
源码类别:

行业应用

开发平台:

Visual C++

  1. //---------------------------------------------------------------------------
  2. // 学韬电子光盘册   版本: 1.0.2
  3. // 作者:颜承     时间:2000.1.17
  4. // 主要构件: TListView ,TTreeView ,TClientDataSet ,TList等
  5. // API函数: GetVolumeInformation,ShellExecute  GetDriveType GetLogicDriveStrings
  6. // 自定义类: TSerchDisk 递归方法搜索整个磁盘目录文件结构
  7. // 此为添加光盘的实现文件
  8. //---------------------------------------------------------------------------
  9. // 版权所有(C)2000 颜 承
  10. // 这一程序是自由软件,
  11. // 你可以遵照自由软件基金会出版的GNU通用公共许可证条款来修改和重新发布这一程序。
  12. // 发布这一程序的目的是希望它有用,但没有任何担保。甚至没有适合特定目的的隐含的担保。
  13. // 更详细的情况请参阅GNU通用公共许可证。
  14. // 你应该已经和程序一起收到一份GNU通用公共许可证的副本。
  15. // 我的联系方式:桂林集琦药业股份有限公司技术部(541004)
  16. // E-Mail: ycshowtop@sohu.com
  17. //-------------------------------------------------------------------------------
  18. #include <vcl.h>
  19. #include <vcl/registry.hpp>
  20. #pragma hdrstop
  21. #include "CDAdd.h"
  22. #include "main.h"
  23. #include "SerchDisk.h"
  24. //---------------------------------------------------------------------------
  25. #pragma package(smart_init)
  26. #pragma resource "*.dfm"
  27. TForm3 *Form3;
  28. AnsiString TheCDSeriNo;
  29. AnsiString strDir;
  30. //---------------------------------------------------------------------------
  31. __fastcall TForm3::TForm3(TComponent* Owner)
  32.         : TForm(Owner)
  33. {
  34. TheCDSeriNo="";
  35. Edit2->Text="";     //光盘编号
  36. }
  37. //---------------------------------------------------------------------------
  38. void __fastcall TForm3::DriveComboBox1Change(TObject *Sender)
  39. {
  40.  strDir= AnsiString(DriveComboBox1->Drive) + AnsiString(":\");
  41.  unsigned long RetVal,a,b;
  42.  char VolName[256],str1[256];
  43.  int i;
  44.  for(i=0;i<256;i++) { str1[i]=''; VolName[i]='';}
  45.  //Windows API 函数 取光盘卷标序列号,如无光盘则返回0
  46.  GetVolumeInformation(strDir.c_str(), VolName,256,&RetVal,&a,&b,str1,256);
  47.  if(RetVal==0) {
  48.     Application->MessageBox("请先放入光盘,稍后再试!","提示",MB_OK);
  49.     return;
  50.  }
  51.  else {
  52.     Edit1->Text=AnsiString(VolName); //光盘名称默认为卷标名
  53.     TheCDSeriNo=AnsiString(RetVal);  //得到的序列号
  54.  }
  55. }
  56. //---------------------------------------------------------------------------
  57. //必须给出光盘编号,
  58. void __fastcall TForm3::Edit2Change(TObject *Sender)
  59. {
  60.  if(Edit2->Text=="") btOK->Enabled=false;
  61.  else btOK->Enabled=true;
  62. }
  63. //---------------------------------------------------------------------------
  64. //确定
  65. void __fastcall TForm3::btOKClick(TObject *Sender)
  66. {
  67.  TLocateOptions op;
  68.  op.Clear();
  69.  op<<loCaseInsensitive;
  70.  //确保序列号不重复
  71.  Form1->ClientDataSet1->First();
  72.  if( Form1->ClientDataSet1->Locate("CDSeriNo",TheCDSeriNo,op) ) {
  73.      Application->MessageBox("库中已有此光盘的记录!","提示",MB_OK);
  74.      TheCDSeriNo="";
  75.      return;
  76.  }
  77.  //确保编号不重复
  78.  Form1->ClientDataSet1->First();
  79.  if( Form1->ClientDataSet1->Locate("CDNumber",Edit2->Text,op) ) {
  80.      Application->MessageBox("库中已有此编号的光盘!","提示",MB_OK);
  81.      Edit2->SetFocus();
  82.      return;
  83.  }
  84.  //添加记录
  85.  Form1->ClientDataSet1->Append();
  86.  Form1->ClientDataSet1->FieldByName("CDName")->AsString=Edit1->Text;
  87.  Form1->ClientDataSet1->FieldByName("CDNumber")->AsString=Edit2->Text;
  88.  Form1->ClientDataSet1->FieldByName("CDSeriNo")->AsString=TheCDSeriNo;
  89.  //在TreeView中加相应项目
  90.  TTreeNode * tmpNode = Form1->TreeView1->Items->Item[0];
  91.  TTreeNode * meNode = Form1->TreeView1->Items->AddChild(tmpNode,Edit1->Text.c_str());
  92.  Form1->TreeView1->Selected=meNode;
  93.  Form1->TreeView1->Selected->ImageIndex=1;
  94.  Form1->TreeView1->Selected->SelectedIndex=0;
  95.  Form1->itemFindCD->Enabled=true;
  96.  //如果设置为自动搜索光盘,进行以下操作
  97.  if( CheckBox1->Checked==true || CheckBox2->Checked==true ) {
  98.     TSerchDisk * pSD = new TSerchDisk();
  99.     if(CheckBox1->Checked==true) pSD->AddDir=true;
  100.     if(CheckBox2->Checked==true) {    //查找文件类型
  101.        int iCount,i;
  102.        AnsiString tmp;
  103.        tmp=ExtractFileDir(Application->ExeName);
  104.        tmp=tmp+AnsiString("\cdpack.ini");
  105.        TMemIniFile * Reg=new TMemIniFile(tmp);
  106.        if(Reg->SectionExists("Common")&& Reg->SectionExists("Filter")) {
  107.           if(Reg->ValueExists("Common","FilterCount"))
  108.              iCount = Reg->ReadInteger("Common","FilterCount",3);
  109.           else {
  110.              Application->MessageBox("错误的ini文件!","错误",MB_OK);
  111.              goto work;
  112.           }
  113.           for(i=0;i<iCount;i++) {
  114.              tmp=AnsiString("item")+AnsiString(i);
  115.              if(Reg->ValueExists("Filter",tmp))
  116.                 pSD->FilterString[i]=Reg->ReadString("Filter",tmp,"");
  117.              else {
  118.                 Application->MessageBox("错误的ini文件!","错误",MB_OK);
  119.                 goto work;
  120.              }
  121.           }
  122.           pSD->FilterCount=iCount;
  123.        }
  124.        else Application->MessageBox("错误的ini文件!","错误",MB_OK);
  125. work:  delete Reg;
  126.     }
  127.     pSD->PathName=strDir;
  128.     int k=pSD->Serch(); //用TSerchDisk类列出光盘目录
  129.     int i;
  130.     AnsiString temp;
  131.     for(i=0;i<k;i++) { //搜索结果加入软件库
  132.        Form1->ClientDataSet2->Append();
  133.        Form1->ClientDataSet2->FieldByName("CDSeriNo")->AsString=TheCDSeriNo;
  134.        temp= pSD->FileList->Strings[i];
  135.        Form1->ClientDataSet2->FieldByName("SWName")->AsString=GetSWName(temp);
  136.        Form1->ClientDataSet2->FieldByName("SWDirFile")->AsString=temp;
  137.        Form1->ClientDataSet2->FieldByName("SWDescription")->AsString="";
  138.     }
  139.     delete pSD;
  140.     //更新ListView
  141.     Form1->TreeView1Change(Form1->TreeView1,Form1->TreeView1->Selected);
  142.     Form1->itemFindSoft->Enabled=true;
  143.  }
  144.  Close();
  145. }
  146. //---------------------------------------------------------------------------
  147. //获取文件或目录的名称
  148. AnsiString __fastcall TForm3::GetSWName(AnsiString str)
  149. {
  150.   //
  151.   AnsiString name;
  152.   if(str[str.Length()]=='\') str[str.Length()]=''; //如是目录
  153.   name=ExtractFileName(str);
  154.   int k=name.LastDelimiter(".");    //去除扩展名
  155.   if(k!=0) name[k]='';
  156.   return name;
  157. }