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

📄 main.cpp

📁 管理光盘的程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    //只要选择的项目数不为空,一个个删除数据库中的相应软件和ListView中相应项目
    while(ListView1->Selected!=NULL) {
       ClientDataSet2->Locate("SWName",ListView1->Selected->Caption,op);
       ClientDataSet2->Delete();
       i=ListView1->Items->IndexOf(ListView1->Selected);
       ListView1->Items->Delete(i);
    }
    ListView1->Items->EndUpdate();
    ListView1->Selected=ListView1->ItemFocused;
    if(ClientDataSet2->RecordCount==0) itemFindSoft->Enabled=false;
}
//---------------------------------------------------------------------------
//ListView改变选择项目时,同时改变两个按钮状态
void __fastcall TForm1::ListView1Change(TObject *Sender, TListItem *Item,
      TItemChange Change)
{
 if(ListView1->Selected!=NULL){
   itemDelSoft->Enabled=true;
   pmModiSF->Enabled=true;
 }
 else{
   itemDelSoft->Enabled=false;
   pmModiSF->Enabled=false;
 }

}
//---------------------------------------------------------------------------
//以下两个函数对Del按键产生反应.
void __fastcall TForm1::TreeView1KeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
    if( Key==VK_DELETE && itemDelCD->Enabled==true && !(TreeView1->IsEditing()) )
    itemDelCDExecute(Sender);

}
//---------------------------------------------------------------------------
void __fastcall TForm1::ListView1KeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
    if( Key==VK_DELETE && itemDelSoft->Enabled==true  )
       itemDelSoftExecute(Sender);
    if( Key==VK_RETURN && ListView1->Selected!=NULL)
       ListView1DblClick(Sender);
}
//---------------------------------------------------------------------------
//光盘改名,如果为空则取消改变
void __fastcall TForm1::TreeView1Edited(TObject *Sender, TTreeNode *Node,
      AnsiString &S)
{
 if(S=="") S=Node->Text;
 else {
   ClientDataSet1->Edit();
   ClientDataSet1->FieldByName("CDName")->AsString=S;
   ClientDataSet1->Post();
   ClientDataSet1->MergeChangeLog();
 }
}
//---------------------------------------------------------------------------
//不允许改变根结点项的名字
void __fastcall TForm1::TreeView1Editing(TObject *Sender, TTreeNode *Node,
      bool &AllowEdit)
{
 if(Node->Level==0) AllowEdit=false;
}
//---------------------------------------------------------------------------
//查找下一个软件
void __fastcall TForm1::itemFindNextExecute(TObject *Sender)
{
 curNum++; //已找到的软件数加一,如果找完则关闭下一个按钮
 if(curNum >= pList->Count) {
   itemFindNext->Enabled=false;
   curNum=0;
   return;
 }
 //在TreeView中找到要查找软件对应光盘,选择
 PAList temp;
 TTreeNode * myNode=TreeView1->Items->Item[1];
 while(myNode!=NULL) {
   temp=(PAList)pList->Items[curNum];
   if(myNode->Text==temp->cdName ) break;
   myNode=myNode->GetNext();
 }
 if(myNode!=NULL) TreeView1->Selected=myNode;

 int i;
 ListView1->SetFocus();
 ListView1->Selected=NULL; //取消前一个选择

 for(i=0;i<ListView1->Items->Count;i++) {  //找到下一个相应软件,选择
   temp=(PAList)pList->Items[curNum];
   if(ListView1->Items->Item[i]->Caption==temp->swName){
      ListView1->Selected=ListView1->Items->Item[i];
      break;
   }
 }
 //以下确保选择项被显示
 i=ListView1->Items->IndexOf(ListView1->Selected);
 int j=i-ListView1->Items->IndexOf(ListView1->TopItem);
 i=ListView1->ClientHeight/ListView1->VisibleRowCount;
 if(j>ListView1->VisibleRowCount) ListView1->Scroll(0,i*j);

}
//---------------------------------------------------------------------------
//修改软件名称属性
void __fastcall TForm1::pmModiSFClick(TObject *Sender)
{
 Form2->Show();
}
//---------------------------------------------------------------------------
//执行软件
void __fastcall TForm1::ListView1DblClick(TObject *Sender)
{
 if(ListView1->Selected!=NULL) {
   int k= ListView1->Selected->SubItems->Strings[1].AnsiPos("!");
   if(k!=0) {
     AnsiString temp=ListView1->Selected->SubItems->Strings[1];
     temp=temp.SubString(k,temp.Length()-k+1);
     int res=MessageDlg(temp+"  是否继续执行?",mtWarning,TMsgDlgButtons()<<mbYes<<mbNo,0);
     if(res==mrNo) return;
   }
   ShellExecute(Form1->Handle,"open",ListView1->Selected->SubItems->Strings[0].c_str(),NULL,NULL,SW_SHOWNORMAL);
 }
}
//---------------------------------------------------------------------------
//修改光盘编号
void __fastcall TForm1::StatusBar1DblClick(TObject *Sender)
{
 if(StatusBar1->Panels->Items[2]->Text=="") return;
 AnsiString temp1 = ClientDataSet1->FieldByName("CDNumber")->AsString;
 AnsiString temp2 =InputBox("修改光盘编号","请输入新的光盘编号:",temp1);
 if(temp2!=temp1) {
   ClientDataSet1->Edit();
   ClientDataSet1->FieldByName("CDNumber")->AsString=temp2;
   ClientDataSet1->Post();
   ClientDataSet1->MergeChangeLog();
 }
 StatusBar1->Panels->Items[2]->Text=ClientDataSet1->FieldValues["CDNumber"];
}
//---------------------------------------------------------------------------
//关闭程序,保存文件消除对象
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
 pList->Clear();
 delete pList;
 if(ClientDataSet1->Active==true) {
    ClientDataSet1->SaveToFile(ClientDataSet1->FileName);
    ClientDataSet2->SaveToFile(ClientDataSet2->FileName);
    ClientDataSet1->Active=false;
    ClientDataSet2->Active=false;
 }
}
//---------------------------------------------------------------------------
//打开数据库文件
void __fastcall TForm1::OpenCDBFile(AnsiString filename)
{
     AnsiString temp=filename;
       //处理文件名,确保关闭了ClientDataSet
     if(ClientDataSet1->Active==true) {
         ClientDataSet1->SaveToFile(ClientDataSet1->FileName);
         ClientDataSet2->SaveToFile(ClientDataSet2->FileName);
     }
     if(temp.AnsiPos(".cdb")==0) temp=temp+AnsiString(".cdb");
     ClientDataSet1->Active=false;
     ClientDataSet1->FileName=temp;
     int k=temp.Length()-4;
     temp=temp.SubString(1,k)+AnsiString(".dat");
     ClientDataSet2->Active=false;
     ClientDataSet2->FileName=temp;

     ClientDataSet1->Active=true;   //打开
     ClientDataSet2->Active=true;

     //清空ListView TreeView
     TreeView1->Items->Item[0]->DeleteChildren();
     ListView1->Items->BeginUpdate();
     ListView1->Items->Clear();
     ListView1->Items->EndUpdate();
     StatusBar1->Panels->Items[2]->Text="";

     //将数据库中记录加入TreeView中
     k=ClientDataSet1->RecordCount;
     int i;
     ClientDataSet1->First();
     TTreeNode * tmpNode = TreeView1->Items->Item[0];

     for(i=0;i<k;i++) {
        TreeView1->Items->AddChild(tmpNode,ClientDataSet1->FieldByName("CDName")->AsString);
        TreeView1->Items->Item[i+1]->ImageIndex=1;
        TreeView1->Items->Item[i+1]->SelectedIndex=0;
        ClientDataSet1->Next();
     }
     //打开一些相关按钮
     itemAddCD->Enabled=true;
     itemSave->Enabled=true;
     itemOutput->Enabled=true;
     itemDelCD->Enabled=false;
     itemAddSoft->Enabled=false;
     itemDelSoft->Enabled=false;
     if(ClientDataSet1->RecordCount!=0) itemFindCD->Enabled=true;
     else itemFindCD->Enabled=false;
     if(ClientDataSet2->RecordCount!=0)itemFindSoft->Enabled=true;
     else itemFindSoft->Enabled=false;
     Form1->Caption=AnsiString("学韬电子光盘册 - ")+filename;

}
//--------------------------------------------------------------------------
//以命令行参数打开数据库
void __fastcall TForm1::FormShow(TObject *Sender)
{
 if(cdbname!="")
    OpenCDBFile(cdbname);
}
//---------------------------------------------------------------------------
//保存文件
void __fastcall TForm1::itemSaveExecute(TObject *Sender)
{
 if(ClientDataSet1->Active==true) {
    ClientDataSet1->SaveToFile(ClientDataSet1->FileName);
    ClientDataSet2->SaveToFile(ClientDataSet2->FileName);
 }
}
//---------------------------------------------------------------------------
//设置参数
void __fastcall TForm1::itemConfigExecute(TObject *Sender)
{
 Form6->Show();
}
//---------------------------------------------------------------------------
//输出HTML
void __fastcall TForm1::itemOutputExecute(TObject *Sender)
{
 AnsiString tmp;

 tmp=ExtractFileDir(Application->ExeName); //取应用程序所在目录
 tmp=tmp+AnsiString("\\cdpack.ini");

 TMemIniFile * Reg=new TMemIniFile(tmp);
 bool bLink=Reg->ReadBool("Common","HtmlLink",false); //是否要在HTML文件中设置链接
 Form7->Show();
 OutputHTML(Sender,bLink);
 Form7->Close();
 delete Reg;
}
//---------------------------------------------------------------------------
//写HTML文件
void __fastcall TForm1::OutputHTML(TObject * Sender, bool isLink)
{
 int i,k;

 AnsiString tmp,temp,tempNo;

 tmp=ExtractFileName(ClientDataSet1->FileName);
 k=tmp.Length()-4;
 tmp=tmp.SubString(1,k);

 FILE * fp;
 temp=tmp+AnsiString(".htm");
 fp=fopen(temp.c_str(),"w");
 if(fp==NULL){
   Application->MessageBox("不能创建文件!","错误",MB_OK);
   return;
 }

 fprintf(fp,"<html>");
 fprintf(fp,"<head>");
 fprintf(fp,"<meta http-equiv=\"Content-Type\" content=\"text/html; charset=gb2312\">");
 temp= AnsiString("<title>")+tmp+AnsiString("</title>");
 fprintf(fp,"%s",temp.c_str());
 fprintf(fp,"</head>");
 fprintf(fp,"<body>");
 fprintf(fp,"<p align=\"center\"><strong><font face=\"幼圆\" size=\"3\" color=\"#FF8000\">索引</font> </strong></p>");
 fprintf(fp,"<table border=\"1\" width=\"80%\">");
 fprintf(fp,"<tr><th width=\"20%\">编号</th><th width=\"80%\">光盘名称</th></tr>");

 ClientDataSet1->First();

 k=ClientDataSet1->RecordCount;
 Form7->ProgressBar1->Max=2*k;
 Form7->ProgressBar1->Position=1;

 for(i=0;i<k;i++) {
    fprintf(fp,"<tr>");

    temp=AnsiString("<td width=\"20%\">") +
         ClientDataSet1->FieldByName("CDNumber")->AsString +
         AnsiString("</td>");
    fprintf(fp,"%s",temp.c_str());
    temp=AnsiString("<td width=\"80%\"><a href=\"./Content/") +
         ClientDataSet1->FieldByName("CDName")->AsString +
         AnsiString(".htm\">") + ClientDataSet1->FieldByName("CDName")->AsString +
         AnsiString("</a></td>");
    fprintf(fp,"%s",temp.c_str());
    fprintf(fp,"</tr>");
    Form7->ProgressBar1->StepIt();
    ClientDataSet1->Next();
 }
 fprintf(fp,"</table>");
 fprintf(fp,"</body>");
 fprintf(fp,"</html>");

 fclose(fp);
 fp=NULL;

 CreateDir("Content");
 Form7->ProgressBar1->Position=k;

 ClientDataSet1->First();
 for(i=0;i<k;i++) {
   tmp=ClientDataSet1->FieldByName("CDName")->AsString;
   temp=GetCurrentDir()+AnsiString("\\Content\\")+tmp+AnsiString(".htm");
   fp=fopen(temp.c_str(),"w");
   if(fp==NULL) {
     Application->MessageBox("不能创建文件!","错误",MB_OK);
     return;
   }
   fprintf(fp,"<html>");
   fprintf(fp,"<head>");
   fprintf(fp,"<meta http-equiv=\"Content-Type\" content=\"text/html; charset=gb2312\">");
   temp= AnsiString("<title>")+tmp+AnsiString("</title>");
   fprintf(fp,"%s",temp.c_str());
   fprintf(fp,"</head>");
   fprintf(fp,"<body>");
   temp=AnsiString("<p align=\"center\"><strong><font face=\"幼圆\" size=\"3\" color=\"#FF8000\">") +
       tmp + AnsiString("</font> </strong></p>");
   fprintf(fp,"%s",temp.c_str());
   fprintf(fp,"<p></p>");

   //根据所选光盘序列号,在软件库设置过滤器
   tempNo=ClientDataSet1->FieldByName("CDSeriNo")->AsString;
   if(ClientDataSet2->Filtered==true) ClientDataSet2->Filtered=false;
   ClientDataSet2->Filter="CDSeriNo="+tempNo;
   ClientDataSet2->Filtered=true;
   ClientDataSet2->First();

   while(!ClientDataSet2->Eof) {
     if(isLink==true)
          temp=AnsiString("<p><strong>软件名称:</strong><a href=\"") +
               ClientDataSet2->FieldByName("SWDirFile")->AsString +
               AnsiString("\">")+ ClientDataSet2->FieldByName("SWName")->AsString +
               AnsiString("</a><br>");
     else temp=AnsiString("<p><strong>软件名称:</strong>") +
               ClientDataSet2->FieldByName("SWName")->AsString +
               AnsiString("<br>");
     fprintf(fp,"%s",temp.c_str());
     temp=AnsiString("<strong>软件说明:</strong>") +
          ClientDataSet2->FieldByName("SWDescription")->AsString +
          AnsiString("</p>");
     fprintf(fp,"%s",temp.c_str());
     fprintf(fp,"<hr>");

     ClientDataSet2->Next();
    }
    fprintf(fp,"</body>");
    fprintf(fp,"</html>");

    Form7->ProgressBar1->StepIt();
    fclose(fp);
    fp=NULL;
    ClientDataSet1->Next();
 }
}

⌨️ 快捷键说明

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