main.cpp

来自「一个用C++Builder写的XML编辑器」· C++ 代码 · 共 1,226 行 · 第 1/3 页

CPP
1,226
字号
  EditType = etNull ;
 }
 catch(Exception &e)
 {
    Application->MessageBox( AnsiString("粘贴"" + BufferXMLNode->NodeName + ""结点错误,错误信息:" + e.Message).c_str(), "错误", MB_OK);
    return;
 }

}
//---------------------------------------------------------------------------

void __fastcall TFormXMLEdit::TimerXMLTimer(TObject *Sender)
{
  // To Do
  if ( !BufferXMLNode || !BufferTreeNode )
  {
    ToolButtonPaste->Enabled = false ;
    MenuEditPaste->Enabled = false ;
    PopupMenuPaste->Enabled = false ;
  }
  if ( BufferXMLNode || BufferTreeNode )
  {
    ToolButtonPaste->Enabled = true ;
    MenuEditPaste->Enabled = true ;
    PopupMenuPaste->Enabled = true ;

  }
  StatusBarMain->Panels->Items[1]->Text = "北京时间:" + DateTimeToStr(Now());

 if ( TreeViewXML->Items->Count < 1 )
   ValueListEditorValue->Enabled = false ;
 else
   ValueListEditorValue->Enabled =  true ;


}
//---------------------------------------------------------------------------

void __fastcall TFormXMLEdit::ToolButtonNewMouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{
 StatusBarMain->Panels->Items[0]->Text = "新建一个XML文件" ;
}
//---------------------------------------------------------------------------

void __fastcall TFormXMLEdit::ToolButtonOpenMouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{
 StatusBarMain->Panels->Items[0]->Text = "打开一个XML文件" ;

}
//---------------------------------------------------------------------------

void __fastcall TFormXMLEdit::ToolButtonSaveMouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{
 StatusBarMain->Panels->Items[0]->Text = "保存XML文件" ;

}
//---------------------------------------------------------------------------

void __fastcall TFormXMLEdit::ToolButtonUndoMouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{
 StatusBarMain->Panels->Items[0]->Text = "Undo" ;

}
//---------------------------------------------------------------------------

void __fastcall TFormXMLEdit::ToolButtonDelMouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{
 StatusBarMain->Panels->Items[0]->Text = "删除一个XML结点" ;

}
//---------------------------------------------------------------------------

void __fastcall TFormXMLEdit::ToolButtonCutMouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{
 StatusBarMain->Panels->Items[0]->Text = "剪贴一个XML结点" ;
}
//---------------------------------------------------------------------------

void __fastcall TFormXMLEdit::ToolButtonCopyMouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{
 StatusBarMain->Panels->Items[0]->Text = "复制一个XML结点" ;

}
//---------------------------------------------------------------------------

void __fastcall TFormXMLEdit::ToolButtonPasteMouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{
 StatusBarMain->Panels->Items[0]->Text = "粘贴一个XML结点到当前结点" ;

}
//---------------------------------------------------------------------------

void __fastcall TFormXMLEdit::ToolButtonFindMouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{
  StatusBarMain->Panels->Items[0]->Text = "再XML文档中查找结点" ;

}
//---------------------------------------------------------------------------

void __fastcall TFormXMLEdit::ToolButtonProviewMouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{
 StatusBarMain->Panels->Items[0]->Text = "预览当前XML文档" ;

}
//---------------------------------------------------------------------------

void __fastcall TFormXMLEdit::ToolButtonInsMouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{
 StatusBarMain->Panels->Items[0]->Text = "给当前结点插入一个元素或者属性" ;

}
//---------------------------------------------------------------------------

void __fastcall TFormXMLEdit::ToolButtonHelpMouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{
 StatusBarMain->Panels->Items[0]->Text = "帮助" ;

}
//---------------------------------------------------------------------------

void __fastcall TFormXMLEdit::ToolButtonExpandMouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{
 StatusBarMain->Panels->Items[0]->Text = "展开所有结点" ;

}
//---------------------------------------------------------------------------

void __fastcall TFormXMLEdit::ToolButtonCollapseMouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{
 StatusBarMain->Panels->Items[0]->Text = "收缩所有结点" ;

}
//---------------------------------------------------------------------------

void __fastcall TFormXMLEdit::ToolButtonExpandClick(TObject *Sender)
{
  // To Do
  TTreeNode *SelectedTreeNode = TreeViewXML->Selected;
  if (SelectedTreeNode)
    SelectedTreeNode->Expand(true);
  else
    TreeViewXML->FullExpand();
}
//---------------------------------------------------------------------------

void __fastcall TFormXMLEdit::ToolButtonCollapseClick(TObject *Sender)
{
 // To Do
  TTreeNode *SelectedTreeNode = TreeViewXML->Selected;
  if (SelectedTreeNode)
   SelectedTreeNode->Collapse(true );
  else
   TreeViewXML->FullCollapse();
}
//---------------------------------------------------------------------------

void __fastcall TFormXMLEdit::ToolButtonRenAttribMouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{
 StatusBarMain->Panels->Items[0]->Text = "更改属性名字开关" ;
}
//---------------------------------------------------------------------------

void __fastcall TFormXMLEdit::MenuEditRenAttribClick(TObject *Sender)
{
  //To Do
  if ( MenuEditRenAttrib->Checked )
  {
    ToolButtonRenAttrib->Down  = true ;
    ToolButtonRenAttrib->Click();
  }
  else
  {
    ToolButtonRenAttrib->Down  = false ;
    ToolButtonRenAttrib->Click();
  }


}
//---------------------------------------------------------------------------

void __fastcall TFormXMLEdit::ToolButtonRenAttribClick(TObject *Sender)
{
  if ( ToolButtonRenAttrib->Down  )
  {
    MenuEditRenAttrib->Checked = true;

    ValueListEditorValue->KeyOptions.Clear();

    ValueListEditorValue->KeyOptions << keyEdit << keyAdd << keyDelete << keyUnique ;
    ValueListEditorValue->Refresh();
    RenKeyFlag = true ;
  }
  else
  {
    MenuEditRenAttrib->Checked = false;

    ValueListEditorValue->KeyOptions.Clear();

    ValueListEditorValue->KeyOptions <<  keyUnique ;
    ValueListEditorValue->Refresh();
    RenKeyFlag = true ;
  }

}
//---------------------------------------------------------------------------

void __fastcall TFormXMLEdit::ToolButtonFindClick(TObject *Sender)
{
  // To Do
  if ( FindDialogXML->Execute() )
  {
    //AnsiString tFindStr = FindDialogXML->FindText ;

  }

}
//---------------------------------------------------------------------------
int __fastcall TFormXMLEdit::LoadRecent()
{

  AnsiString RecDir  = ProgramPath ;


  AnsiString RecFileName = RecDir + "Recent.INI" ;
  if ( !FileExists( RecFileName ) )
  {
   MenuFileRecent->Enabled      = false;

   return -1;
  }

  MenuFileRecent->Enabled      = true;

  TIniFile *pRecIni = new TIniFile( RecFileName );
  AnsiString sValue ;

  MenuFileRecent->Clear();
  TMenuItem  *newSubRecItem;

  //先装入工程文件信息
  for ( int i = 1; i <= 10 ; i ++ )
  {
   sValue = pRecIni->ReadString("XMLFile" + IntToStr( i ),"Name", "");
   if ( !sValue.IsEmpty() )
   {
     newSubRecItem          = new TMenuItem(NULL);
     if ( i < 10 )
      newSubRecItem->Caption =  IntToStr( i ) + " " +sValue ;
     if ( i == 10 )
      newSubRecItem->Caption =                 "A " +sValue ;

     newSubRecItem->OnClick = MenuFileRecentClick;
     MenuFileRecent->Add( newSubRecItem );
   }
  }

  delete pRecIni;

  return 1;

}
//---------------------------------------------------------------------------
int __fastcall TFormXMLEdit::SaveRecent()
{

  AnsiString RecDir  = ProgramPath ;

  AnsiString RecFileName = RecDir + "Recent.INI" ;

  TIniFile *pRecIni = new TIniFile( RecFileName );
  AnsiString    sValue ;

  //先写入工程文件信息
  AnsiString     CurProject = XMLFileName ;

  bool Existed = false ;
  int  iPos    = -1 , iCount = 0;
  for( int i = 1; i <= 10; i++ )
  {
   sValue = pRecIni->ReadString("XMLFile" + IntToStr( i ),"Name", "");
   if ( !sValue.IsEmpty() )
   {
     if ( sValue == CurProject )
     {
      iPos     = i ;
      Existed  = true;
     }
     iCount ++;

    }
  }

  if ( !Existed )
    iPos = iCount ;

  for ( int i = iPos -1 ;  i > 0 && Existed  && (iPos > 1 ) ; i-- )
  {
   sValue = pRecIni->ReadString("XMLFile" + IntToStr( i ),"Name", "");
   if ( !sValue.IsEmpty() )
    pRecIni->WriteString("XMLFile" + IntToStr( i+1 ) ,"Name", sValue );
  }

  for ( int i = iPos  ;  i > 0 && !Existed  ; i-- )
  {
   sValue = pRecIni->ReadString("XMLFile" + IntToStr( i ),"Name", "");
   if ( !sValue.IsEmpty() )
    pRecIni->WriteString("XMLFile" + IntToStr( i+1 ) ,"Name", sValue );
  }

  pRecIni->WriteString("XMLFile1"  ,"Name", CurProject );

  sValue = pRecIni->ReadString("FileCount" ,"Value", "");
  if ( !sValue.IsEmpty()  )
  {
    unsigned int  iCount = sValue.ToInt();
    if ( iCount > 65533 )
       iCount = 0;
    pRecIni->WriteString("FileCount"  ,"Value", IntToStr( iCount + 1 ) );
  }
  else
    pRecIni->WriteString("FileCount"  ,"Value", IntToStr( 1 ) );

  pRecIni->UpdateFile();
  delete pRecIni;
  return 1;

}
//---------------------------------------------------------------------------
void __fastcall TFormXMLEdit::FormCreate(TObject *Sender)
{
  LPTSTR pp= GetCommandLine();
  TStringList *Para = new TStringList;
  Para->CommaText  = pp;
  AnsiString SelfName = Para->Strings[0];
  int iPos = SelfName.LastDelimiter( "\\" );
  ProgramPath = SelfName.SubString(1,  iPos );

  LoadRecent();
}
//---------------------------------------------------------------------------
void __fastcall TFormXMLEdit::MenuFileRecentClick(TObject *Sender)
{
  TMenuItem *ClickedItem = dynamic_cast<TMenuItem *>(Sender);

  AnsiString sCaption    = ClickedItem->Caption ;

  sCaption = sCaption.SubString( 3, sCaption.Length());
  
  if ( FileExists( sCaption ) )
    OpenXMLFromFile( sCaption );
  else
    Application->MessageBox( AnsiString(sCaption +"不存在!").c_str(), "警告" , MB_OK);

}
//---------------------------------------------------------------------------

void __fastcall TFormXMLEdit::PopupMenuRenNodeClick(TObject *Sender)
{
  // To do

  //IXMLNode *CurrentXMLNode   =  (IXMLNode * )TreeViewXML->Selected->Data ;

  IXMLNode *CurrentXMLNode   = SelectedXMLNode ;
  AnsiString CurrentXMLNodeName = CurrentXMLNode->NodeName ;

  IXMLNodeList *CurParentXMLNodeList = CurrentXMLNode->ParentNode->ChildNodes ;

  randomize();
  AnsiString NewName = "新结点"  + IntToStr( random (1000) );

  AnsiString NewXMLNodeName  =  InputBox("更改元素的名字", "新结点的名字:", NewName);

  IXMLNode *NewXMLNode =  CurrentXMLNode->ParentNode->AddChild(NewXMLNodeName);

  AddXMLNode(NewXMLNode,CurrentXMLNode );

  CurParentXMLNodeList->Delete(CurrentXMLNodeName);

  TTreeNode *SelectedTreeNode = TreeViewXML->Selected;
  TTreeNode *SelectedParentTreeNode = SelectedTreeNode->Parent ;
  SelectedTreeNode->Delete();

  //SelectedTreeNode->Text =  NewXMLNodeName ;

  AddNode( SelectedParentTreeNode , NewXMLNode );


  BrushAttribute(NewXMLNode);

}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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