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

📄 mainunit.cpp

📁 一个小巧实用的电子书库程序
💻 CPP
📖 第 1 页 / 共 3 页
字号:
  while((GetTickCount()-ITime) < 2000);
  AboutBox->Hide();
  AboutBox->Free();
}
//---------------------------------------------------------------------------
//窗体关闭之前
void __fastcall TMainForm::FormClose(TObject *Sender, TCloseAction &Action)
{
  FreeLibrary(hhctrl);
  if(IndexChanged || RichEdit->Modified)
  {
    switch(Application->MessageBox("数据库已改动,是否保存?","电子书库",
                MB_YESNOCANCEL))
    {
      case IDCANCEL:
        Action=caNone;
        break;
      case IDNO:
        IndexChanged=false;
        RichEdit->Modified=false;
    }
  }
  if(RichEdit->Modified)
    SaveContentToFile();  //保存RichEdit中的内容
  if(IndexChanged)
    SaveIndexToFile();    //更新索引
  SaveStatusToReg();      //保存应用程序的状态
  fclose(DatFp);          //关闭数据文件
}
//---------------------------------------------------------------------------
//树形视图有输入焦点的节点改变后
void __fastcall TMainForm::TreeViewChange(TObject *Sender, TTreeNode *Node)
{
  TitleFLabel->Caption=Node->Text;
  TitleNLabel->Caption=Node->Text;  //标题置中
  if(RichEdit->Modified)    //文本改动标志为真
    SaveContentToFile();
  ActiveNode=Node;
  RichEdit->OnChange=NULL;
  LoadContentFromFile();
}
//---------------------------------------------------------------------------
//节点被编辑以后
void __fastcall TMainForm::TreeViewEdited(TObject *Sender, TTreeNode *Node,
      AnsiString &S)
{
  if((!S.Length())&&(!RichEdit->GetTextLen())&&(!Node->getFirstChild()))
  {
    PostMessage(TreeView->Handle,TVM_DELETEITEM,0,(long)Node->ItemId);
    StatusBar->Panels->Items[3]->Text=AnsiString("总记录数:")+TreeView->Items->Count;
  }
  else
  {
    IndexChanged=true;
  }
}
//---------------------------------------------------------------------------
//文本编辑区选择的改变
void __fastcall TMainForm::RichEditSelectionChange(TObject *Sender)
{
  if(RichEdit->SelLength)  //当被选择的文本长度不为0时
  {
    CutToolButton->Enabled=true;
    CopyToolButton->Enabled=true;
  }
  else
  {
    CutToolButton->Enabled=false;
    CopyToolButton->Enabled=false;
  }
}
//---------------------------------------------------------------------------
//进入文本编辑区时
void __fastcall TMainForm::RichEditEnter(TObject *Sender)
{
  GetLineRow();
}
//---------------------------------------------------------------------------
//光标位置改变时
void __fastcall TMainForm::RichEditKeyUp(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
  GetLineRow();
}
//---------------------------------------------------------------------------
//查找函数
void __fastcall TMainForm::FindDialogFind(TObject *Sender)
{
  int FoundAt, StartPos, ToEnd;
  TSearchTypes SearchFlag;
  if(FindDialog->Options.Contains(frMatchCase))SearchFlag<<stMatchCase;
  if(FindDialog->Options.Contains(frWholeWord))SearchFlag<<stWholeWord;
  StartPos = RichEdit->SelStart + RichEdit->SelLength;
  ToEnd = RichEdit->Text.Length() - StartPos;
  FoundAt=RichEdit->FindText(FindDialog->FindText,StartPos,ToEnd,
                             SearchFlag);
  if (FoundAt != -1)
  {
    RichEdit->SetFocus();
    RichEdit->SelStart = FoundAt;
    RichEdit->SelLength = FindDialog->FindText.Length();
  }
  else
  {
    RichEdit->SelLength=0;
    RichEdit->SelStart=StartPos;
    Application->MessageBox(("找不到 "+AnsiString(FindDialog->FindText)).c_str(),
                             "查找失败",0);
  }
}
//---------------------------------------------------------------------------
//替换功能
void __fastcall TMainForm::ReplaceDialogReplace(TObject *Sender)
{
  int FoundAt, StartPos, ToEnd;
  TSearchTypes SearchFlag;
  if(ReplaceDialog->Options.Contains(frMatchCase))SearchFlag<<stMatchCase;
  if(ReplaceDialog->Options.Contains(frWholeWord))SearchFlag<<stWholeWord;
  StartPos = RichEdit->SelStart;
  ToEnd = RichEdit->Text.Length() - StartPos;

  if(ReplaceDialog->Options.Contains(frReplace))
  {
    FoundAt=RichEdit->FindText(ReplaceDialog->FindText,StartPos,ToEnd,
                               SearchFlag);
    if (FoundAt != -1)
    {
      RichEdit->SetFocus();
      RichEdit->SelStart = FoundAt;
      RichEdit->SelLength = ReplaceDialog->FindText.Length();
      RichEdit->SelText = ReplaceDialog->ReplaceText;
      RichEdit->SelStart = FoundAt;
      RichEdit->SelLength = ReplaceDialog->ReplaceText.Length();
    }
    else
    {
      RichEdit->SelLength=0;
      RichEdit->SelStart=StartPos;
      Application->MessageBox(("找不到 "+AnsiString(FindDialog->FindText)).c_str(),
                               "查找失败",0);
    }
  }
  else if(ReplaceDialog->Options.Contains(frReplaceAll))
  {
    StartPos=0;
    FoundAt=0;
    while(FoundAt != -1)
    {
      FoundAt=RichEdit->FindText(ReplaceDialog->FindText,StartPos,ToEnd,
                                 SearchFlag);
      if(FoundAt != -1)
      {
        RichEdit->SetFocus();
        RichEdit->SelStart = FoundAt;
        RichEdit->SelLength=ReplaceDialog->FindText.Length();
        RichEdit->SelText=ReplaceDialog->ReplaceText;
      }
      else
        Application->MessageBox("已经成功完成全文件的替换工作","替换完毕",0);
    }
  }
}
//---------------------------------------------------------------------------
//左右面积大小改变后
void __fastcall TMainForm::PanelResize(TObject *Sender)
{
  KivenFLabel->Width=Panel3->Width-3;
  KivenNLabel->Width=Panel3->Width-3;
  TitleFLabel->Width=Panel4->Width-3;
  TitleNLabel->Width=Panel4->Width-3;
}
//---------------------------------------------------------------------------
//文件菜单弹出时的动作
void __fastcall TMainForm::FileMenuItemClick(TObject *Sender)
{
  if(RichEdit->GetTextLen())
  {
    ExportMenuItem->Enabled=true;
    PrintMenuItem->Enabled=true;
  }
  else
  {
    ExportMenuItem->Enabled=false;
    PrintMenuItem->Enabled=false;
  }
}
//---------------------------------------------------------------------------
//编辑菜单弹出时的动作
void __fastcall TMainForm::EditMenuItemClick(TObject *Sender)
{
  bool Sel=CutToolButton->Enabled;
  CutMenuItem->Enabled=Sel;
  CopyMenuItem->Enabled=Sel;
  DelMenuItem->Enabled=Sel;
  DelSpaceMenuItem->Enabled=Sel;
  CoalitionMenuItem->Enabled=Sel;
  if((RichEdit->SelLength==RichEdit->GetTextLen()+2)||(!RichEdit->GetTextLen()))
    SelAllMenuItem->Enabled=false;
  else
    SelAllMenuItem->Enabled=true;
}
//---------------------------------------------------------------------------
//RichEdit的弹出菜单弹出时
void __fastcall TMainForm::RichEditPopupMenuPopup(TObject *Sender)
{
  bool Sel=CutToolButton->Enabled;
  CutPopMenuItem->Enabled=Sel;
  CopyPopMenuItem->Enabled=Sel;
  DelPopMenuItem->Enabled=Sel;
  DelSpacePopMenuItem->Enabled=Sel;
  CoalitionPopMenuItem->Enabled=Sel;
  if((RichEdit->SelLength==RichEdit->GetTextLen()+2)||(!RichEdit->GetTextLen()))
    SelAllPopMenuItem->Enabled=false;
  else
    SelAllPopMenuItem->Enabled=true;
}
//---------------------------------------------------------------------------
//从文件中添加到数据库
void __fastcall TMainForm::AppendMenuItemClick(TObject *Sender)
{
  FILE *pFp;
  char *pBuf;
  int pSize;
  if(OpenDialog->Execute())
  {
    pFp=fopen(OpenDialog->FileName.c_str(),"rb");  //打开选取的文件
    fseek(pFp,0,2);
    pSize=ftell(pFp);   //得到文件长度
    fseek(pFp,0,0);     //置位文件指针回文件头
    pBuf=new char[pSize];
    fread(pBuf,sizeof(char),pSize,pFp);  //读入文件内容
    fclose(pFp);
    RichEdit->SelText=pBuf;
    delete pBuf;
  }
}
//---------------------------------------------------------------------------
//读入所选文件内容到RichEdit
void __fastcall TMainForm::ImportMenuItemClick(TObject *Sender)
{
  TTreeNode *TempNode;
  char TitleName[256];
  int i;

  if(OpenDialog->Execute())
  {
    for(i=0;i<OpenDialog->Files->Count;i++)  //循环读入多重选择文件
    {
      TempNode=TreeView->Items->Insert(TreeView->Selected,
                     GetNameFromFileName(TitleName,OpenDialog->Files->Strings[i].c_str()));
      TempNode->ImageIndex=-1;
      TreeView->Selected=TempNode;
      RichEdit->Lines->LoadFromFile(OpenDialog->Files->Strings[i]);
    }
    StatusBar->Panels->Items[3]->Text=AnsiString("总记录数:")+TreeView->Items->Count;
  }
}
//---------------------------------------------------------------------------
//将文本内容另存为文件
void __fastcall TMainForm::ExportMenuItemClick(TObject *Sender)
{
  if(RichEdit->GetTextLen())
  {
    if(SaveDialog->Execute())
      RichEdit->Lines->SaveToFile(SaveDialog->FileName);
  }
}
//---------------------------------------------------------------------------
//打印文本内容
void __fastcall TMainForm::PrintMenuItemClick(TObject *Sender)
{
  if(RichEdit->GetTextLen())
    RichEdit->Print(TitleFLabel->Caption);
}
//---------------------------------------------------------------------------
//关闭应用程序
void __fastcall TMainForm::ExitMenuItemClick(TObject *Sender)
{
  Close();
}
//---------------------------------------------------------------------------
//将所选文本剪切
void __fastcall TMainForm::CutMenuItemClick(TObject *Sender)
{
  RichEdit->CutToClipboard();
}
//---------------------------------------------------------------------------
//将所选文本拷贝
void __fastcall TMainForm::CopyMenuItemClick(TObject *Sender)
{
  RichEdit->CopyToClipboard();
}
//---------------------------------------------------------------------------
//将所选文本粘贴
void __fastcall TMainForm::PasteMenuItemClick(TObject *Sender)
{
  RichEdit->PasteFromClipboard();
}
//---------------------------------------------------------------------------
//将所选文本清除
void __fastcall TMainForm::DelMenuItemClick(TObject *Sender)
{
  RichEdit->ClearSelection();
}
//---------------------------------------------------------------------------
//选择所有文本
void __fastcall TMainForm::SelAllMenuItemClick(TObject *Sender)
{
  RichEdit->SelectAll();
}
//---------------------------------------------------------------------------
//查找文本
void __fastcall TMainForm::FindMenuItemClick(TObject *Sender)
{
  ReplaceDialog->ReplaceText="";
  FindDialog->Execute();
}
//---------------------------------------------------------------------------
//查找下一匹配文本
void __fastcall TMainForm::FindNextMenuItemClick(TObject *Sender)
{
  if(ReplaceDialog->ReplaceText.Length())
  {
    ReplaceDialog->Options<<frReplace;
    ReplaceDialogReplace(Sender);
  }
  else if(FindDialog->FindText.Length())
  {
    FindDialogFind(Sender);

⌨️ 快捷键说明

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