main.cpp
来自「一个用C++Builder写的XML编辑器」· C++ 代码 · 共 1,226 行 · 第 1/3 页
CPP
1,226 行
MenuInsAttrib->Enabled = State ;
ToolButtonSave->Enabled = State ;
ToolButtonUndo->Enabled = false ;
ToolButtonDel->Enabled = State ;
ToolButtonCut->Enabled = State ;
ToolButtonCopy->Enabled = State ;
ToolButtonPaste->Enabled = State ;
ToolButtonFind->Enabled = State ;
ToolButtonProview->Enabled = State ;
ToolButtonIns->Enabled = State ;
ToolButtonRenAttrib->Enabled = State ;
ToolButtonExpand->Enabled = State ;
ToolButtonCollapse->Enabled = State ;
if ( State )
Caption = AnsiString("XMLEdit 1.0 作者:王莹莉 " )+ AnsiString("[文件名:" ) + XMLFileName + AnsiString("]" );
else
Caption = "XMLEdit 1.0 作者:王莹莉 " ;
}
//---------------------------------------------------------------------------
void __fastcall TFormXMLEdit::ToolButtonNewClick(TObject *Sender)
{
// To Do
if ( !XMLDocumentToEdit->IsEmptyDoc())
{
int iRet = Application->MessageBox(AnsiString("文件" + XMLFileName + "还没有保存,是否保存?").c_str(), "警告", MB_YESNO );
if ( iRet == IDYES )
{
XMLDocumentToEdit->SaveToFile(XMLFileName);
XMLDocumentToEdit->XML->Clear();
TreeViewXML->Items->Clear();
ValueListEditorValue->Strings->Clear();
}
}
else
XMLDocumentToEdit->XML->Clear();
SaveDialogXML->Title = "新建XML文件" ;
if ( SaveDialogXML->Execute() )
XMLFileName = SaveDialogXML->FileName ;
else
return ;
if ( FileExists( XMLFileName ))
{
int iRet = Application->MessageBox(AnsiString("文件" + XMLFileName + "已经存在,是否覆盖?").c_str(), "警告", MB_YESNO );
if ( iRet != IDYES )
return ;
}
XMLDocumentToEdit->Active = true;
//<!-- 金软交通处理系统工程文件 -->" )
//XMLDocumentToEdit->LoadFromXML( AnsiString("<!-- 金软交通处理系统工程文件 -->" ));
_di_IXMLDocument XMLDoc = NewXMLDocument();
XMLDoc->Active = true;
XMLDoc->Encoding = "GB2312";
XMLDoc->Version = "1.0";
//_di_IXMLNode XMLNode = XMLDoc->CreateElement("Root0","");
//XMLDoc->AddChild("Root");
//XMLDoc->LoadFromXML(WideString("<?xml version=\"1.0\" encoding=\"utf-8\" ?> <!-- 金软交通处理系统工程文件 -->"));
//_di_IXMLNode XMLNode = XMLDoc->CreateNode("金软交通处理系统工程文件",ntComment );
//XMLNode->SetText( "金软交通处理系统工程文件") ;
//XMLDoc->AddChild("Root");
//XMLDoc->DocumentElement->AddChild("Root001");
//XMLDoc->DocumentElement->AddChild("Root002");
//XMLDoc->DocumentElement->AddChild("Root003");
//XMLDoc->DocumentElement->AddChild("Root004");
//XMLDoc->SaveToFile("D:\\demo.xml") ;
XMLDocumentToEdit->Version = "1.0";
XMLDocumentToEdit->Encoding = "GB2312" ;
IXMLNode *NewNode;
//NewNode = XMLDocumentToEdit->CreateNode(WideString("NewNode"),ntAttribute , WideString("1234"));
//NewNode->SetAttribute(WideString("NewNode"),WideString("1111") );
//NewNode = XMLDocumentToEdit->CreateElement(WideString("NewNode"),WideString("1234"));
//NewNode->SetAttribute("NewValue1","1234");
NewNode = XMLDocumentToEdit->AddChild("Root");
//XMLDocumentToEdit->LoadFromXML( AnsiString("<?xml version=\"1.0\" encoding=\"utf-8\" ?>" ));
XMLDocumentToEdit->SaveToFile(XMLFileName) ;
EnableAll(true);
AddNode(NULL,XMLDocumentToEdit->DocumentElement);
XMLDocumentToEdit->Active = true ;
RootXMLNode = XMLDocumentToEdit->DocumentElement;
//设置最近打开的文件菜单
SaveRecent();
LoadRecent();
}
//---------------------------------------------------------------------------
void __fastcall TFormXMLEdit::CreateNode()
{
_di_IXMLDocument XMLDoc = NewXMLDocument();
_di_IXMLNodeList ChildNodes;
if(XMLDoc)
{
XMLDoc->Active = true;
XMLDoc->Encoding = "UTF-8";
XMLDoc->Version = "1.0";
//_di_IXMLNode XMLNode = XMLDoc->AddChild("root");
_di_IXMLNode XMLNode = XMLDoc->CreateElement("Root0","");
if(XMLNode)
{ ChildNodes = XMLNode->ChildNodes;
_di_IXMLNode XMLChild0 = XMLDoc->CreateElement("node0","");
XMLChild0->SetAttribute("a1",String("11"));
ChildNodes->Add(XMLChild0);
_di_IXMLNode XMLChild = XMLNode->AddChild("node1");
if(XMLChild)
XMLChild->Text = "123";
}
// XMLDoc->DocumentElement = XMLDocument1->DocumentElement;
XMLDoc->DocumentElement = XMLNode;
XMLDoc->SaveToFile("D:\\t2.xml");
XMLDoc->Active = false;
}
delete XMLDoc;
}
//---------------------------------------------------------------------------
void __fastcall TFormXMLEdit::MenuFileCloseFileClick(TObject *Sender)
{
// To Do
XMLDocumentToEdit->SaveToFile(XMLFileName);
XMLDocumentToEdit->XML->Clear();
TreeViewXML->Items->Clear();
ValueListEditorValue->Strings->Clear();
EnableAll();
}
//---------------------------------------------------------------------------
void __fastcall TFormXMLEdit::FormClose(TObject *Sender,
TCloseAction &Action)
{
// To Do
if ( !XMLDocumentToEdit->IsEmptyDoc())
XMLDocumentToEdit->SaveToFile(XMLFileName);
}
//---------------------------------------------------------------------------
void __fastcall TFormXMLEdit::ValueListEditorValueKeyUp(TObject *Sender,
WORD &Key, TShiftState Shift)
{
// To Do
if ( TreeViewXML->Items->Count < 1 )
return ;
if (! SelectedXMLNode )
return ;
if( SelectedXMLNode->NodeName.IsEmpty() )
return;
if ( !RenKeyFlag )
{
//IXMLNode *CurrentNode = (IXMLNode * )TreeViewXML->Selected->Data ;
IXMLNode *CurrentNode = SelectedXMLNode ;
AnsiString KeyStr, TempStr;
WideString ValueStr;
CurrentNode->ReadOnly = false;
for(int i = 1; i<= ValueListEditorValue ->Strings->Count ; i++ )
{
KeyStr = ValueListEditorValue->Keys[i];
ValueStr = KeyStr.Trim() ;
if ( ValueStr.IsEmpty() )
{
randomize();
AnsiString NewName = "新属性" + IntToStr( random (1000) );
KeyStr = ValueStr = InputBox("新元素", "新元素的名字:", NewName);
ValueListEditorValue->Keys[i] = NewName ;
CurrentNode->SetAttribute(WideString(NewName ), "") ;
}
TempStr = ValueListEditorValue->Values[KeyStr];
CurrentNode->Attributes[ValueStr ] = TempStr;
}
}
if ( RenKeyFlag )
{
IXMLNode *CurrentXMLNode = SelectedXMLNode ;
AnsiString CurXMLNodeName = CurrentXMLNode->NodeName ;
CurrentXMLNode->ReadOnly = false;
AnsiString KeyStr,TempStr;
WideString ValueStr;
IXMLNodeList *CurXMLNodeList = CurrentXMLNode->AttributeNodes ;
CurXMLNodeList->Clear();
for(int i = 1; i<= ValueListEditorValue ->Strings->Count ; i++ )
{
KeyStr = ValueListEditorValue->Keys[i];
ValueStr = KeyStr.Trim() ;
if ( ValueStr.IsEmpty() )
{
randomize();
AnsiString NewName = "新属性" + IntToStr( random (1000) );
KeyStr = ValueStr = InputBox("新元素", "新元素的名字:", NewName);
ValueListEditorValue->Keys[i] = NewName ;
CurrentXMLNode->SetAttribute(WideString(NewName ), "") ;
}
TempStr = ValueListEditorValue->Values[KeyStr];
CurrentXMLNode->SetAttribute(ValueStr,TempStr) ;
}
//CurParentXMLNodeList->Add(NewXMLNode) ;
//AddNode( SelectedTreeNode , NewXMLNode );
//BrushAttribute(NewXMLNode);
}
}
//---------------------------------------------------------------------------
void __fastcall TFormXMLEdit::ToolButtonProviewClick(TObject *Sender)
{
// To Do
ShellExecute(Application->Handle,"open",XMLFileName.c_str(),NULL,NULL,SW_SHOW);
}
//---------------------------------------------------------------------------
void __fastcall TFormXMLEdit::MenuViewSourceClick(TObject *Sender)
{
// To Do
TStrings *XMLText = XMLDocumentToEdit->XML;
char szFileName[256];
fnsplit(XMLFileName.c_str(), NULL, NULL, szFileName, NULL);
AnsiString XMLTXTFileName = AnsiString( szFileName ) ;
char TempPath[256];
GetTempPath( 256 ,TempPath );
XMLTXTFileName = AnsiString(TempPath) + XMLTXTFileName + ".Txt";
XMLText->SaveToFile(XMLTXTFileName);
ShellExecute(Application->Handle,"open",XMLTXTFileName.c_str(),NULL,NULL,SW_SHOW);
}
//---------------------------------------------------------------------------
void __fastcall TFormXMLEdit::MenuEditClearClick(TObject *Sender)
{
// To Do
XMLDocumentToEdit->Active = true ;
XMLDocumentToEdit->XML->Clear();
TreeViewXML->Items->Clear();
ValueListEditorValue->Strings->Clear();
XMLDocumentToEdit->LoadFromXML(WideString(""));
XMLDocumentToEdit->Version = "1.0";
XMLDocumentToEdit->Encoding = "GB2312" ;
XMLDocumentToEdit->AddChild("Root");
XMLDocumentToEdit->SaveToFile(XMLFileName);
EnableAll(true);
AddNode(NULL,XMLDocumentToEdit->DocumentElement);
XMLDocumentToEdit->Active = true ;
RootXMLNode = XMLDocumentToEdit->DocumentElement;
}
//---------------------------------------------------------------------------
void __fastcall TFormXMLEdit::MenuFileSaveAsClick(TObject *Sender)
{
// To Do
if ( !XMLDocumentToEdit->IsEmptyDoc())
XMLDocumentToEdit->SaveToFile(XMLFileName);
else
return ;
AnsiString NewXMLFileName ;
SaveDialogXML->Title = "另存XML文件为" ;
if ( SaveDialogXML->Execute() )
NewXMLFileName = SaveDialogXML->FileName ;
else
return ;
if ( FileExists( NewXMLFileName ))
{
int iRet = Application->MessageBox(AnsiString("文件" + NewXMLFileName + "已经存在,是否覆盖?").c_str(), "警告", MB_YESNO );
if ( iRet != IDYES )
return ;
}
XMLFileName = NewXMLFileName ;
XMLDocumentToEdit->SaveToFile(XMLFileName);
}
//---------------------------------------------------------------------------
void __fastcall TFormXMLEdit::PopupMenuCutClick(TObject *Sender)
{
// To Do
try
{
BufferXMLNode = (IXMLNode * )TreeViewXML->Selected->Data ;
BufferTreeNode = TreeViewXML->Selected;
EditType = etCut ;
}
catch(Exception &e)
{
Application->MessageBox( AnsiString("删除"" + BufferXMLNode->NodeName + ""结点错误,错误信息:" + e.Message).c_str(), "错误", MB_OK);
return;
}
}
//---------------------------------------------------------------------------
void __fastcall TFormXMLEdit::PopupMenuCopyClick(TObject *Sender)
{
// To Do
try
{
BufferXMLNode = (IXMLNode * )TreeViewXML->Selected->Data ;
BufferTreeNode = TreeViewXML->Selected;
EditType = etCopy ;
}
catch(Exception &e)
{
Application->MessageBox( AnsiString("删除"" + BufferXMLNode->NodeName + ""结点错误,错误信息:" + e.Message).c_str(), "错误", MB_OK);
return;
}
}
//---------------------------------------------------------------------------
void __fastcall TFormXMLEdit::PopupMenuPasteClick(TObject *Sender)
{
// To Do
try
{
if ( !BufferXMLNode )
return ;
if ( !BufferTreeNode )
return ;
IXMLNode *SelectedNode = (IXMLNode * )TreeViewXML->Selected->Data ;
TTreeNode *SelectedTreeNode = TreeViewXML->Selected;
//IXMLNode *ParentNode = SelectedNode->ParentNode;
IXMLNodeList *ChildNodeList = SelectedNode->ChildNodes ;
if ( EditType == etCopy )
{
//copy node
//_di_IXMLNode ACopyXMLNode ,ToBeCopiedXMLNode = (_di_IXMLNode)BufferXMLNode ;
_di_IXMLNode ACopyXMLNode = BufferXMLNode->CloneNode(true) ;// CloneNode(false); //ToBeCopiedXMLNode->
//AnsiString aNodeName = ACopyXMLNode->NodeName ;
ChildNodeList->Add(ACopyXMLNode);
}
TTreeNode *tNode = TreeViewXML->Items->AddChild(SelectedTreeNode, BufferXMLNode->NodeName );
tNode->Assign(BufferTreeNode) ;
//AddNode(SelectedTreeNode,BufferTreeNode);
BufferTreeNode = NULL;
BufferXMLNode = NULL;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?