CDAdd.cpp
资源名称:cd_man.zip [点击查看]
上传用户:deyixm
上传日期:2007-01-06
资源大小:43k
文件大小:6k
源码类别:
行业应用
开发平台:
Visual C++
- //---------------------------------------------------------------------------
- // 学韬电子光盘册 版本: 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]=' '; VolName[i]=' ';}
- //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()]=' '; //如是目录
- name=ExtractFileName(str);
- int k=name.LastDelimiter("."); //去除扩展名
- if(k!=0) name[k]=' ';
- return name;
- }