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 + -
显示快捷键?