📄 main.cpp
字号:
//只要选择的项目数不为空,一个个删除数据库中的相应软件和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 + -