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

📄 unit1.pas

📁 一款基于DELPHI环境的MVC框架
💻 PAS
📖 第 1 页 / 共 2 页
字号:
      and (fXmlParser.CurName = TagName) then
        begin
          Result:= true;
          Exit;
        end;
    end;
end;

function GetXmlData(): boolean;
begin
  Result:=false;
  while fXmlParser.Scan() do
    begin
      if ((fXmlParser.CurPartType=ptContent) or (fXmlParser.CurPartType=ptCData)) then
       begin
         Result:= true;
         exit;
       end
    end;
end;

begin
 OD := TOpenDialog.Create(Self);
 with OD do
  begin
     Title := 'Load XML file';
     Filter := 'XML files (*.xml)|*.XML';
     DefaultExt := 'xml';
  end;
 if OD.Execute then
      begin
        edtPath.Text := OD.Filename;
        Caption := 'XML creator : '+ OD.Filename;
        UpdateComponents();
        ParseInit(OD.Filename);
     try
      if not GetXmlHead() then exit;
      if not GetXmlTag('Updates') then Exit;
      if not GetXmlTag('Details') then Exit;
      if not GetXmlTag('ApplicationName') then Exit;
      if not GetXmlData() then Exit;
      edtName.Text := fXmlParser.CurContent;
      if not GetXmlTag('Author') then Exit;
      if not GetXmlData() then Exit;
      edtAuthor.Text := fXmlParser.CurContent;
      if not GetXmlTag('Company') then Exit;
      if not GetXmlData() then Exit;
      edtCompany.Text := fXmlParser.CurContent;
      if not GetXmlTag('Version') then Exit;
      if not GetXmlData() then Exit;
      edtVersion.Text := fXmlParser.CurContent;
      if not GetXmlTag('ChangeLog') then Exit;
      while GetXmlTag('Info') do
        begin
          for i := 0 to fXmlParser.CurAttr.Count-1 do
            begin
              Node := TNvpNode(fXmlParser.CurAttr[i]);
              if Node.Name = 'Text' then
                 memInfo.Lines.Add(Node.Value)
            end;
        end;
      fXmlParser.StartScan;
      i:= 0;
      if not GetXmlTag('Instructions') then Exit;
          while GetXmlTag('File') do
          begin
            if (FXmlParser.CurAttr.Count > 0) then
              begin
                inc(i);
                SetAttr('Name', Container);
                stgrInst.Cells[1, i]:= Container;
                SetAttr('Destination', Container);
                stgrInst.Cells[2, i]:= Container;
                SetAttr('Terminate', Container);
                stgrInst.Cells[3, i]:= Container;
              end;
          end;
    finally
      UpdateControls(OD.FileName);
      OD.Free;
    end;
   end;
end;

procedure Tform1.ParseInit(XmlFile: string);
begin
  fXmlParser := TXmlParser.Create;
  with fXmlParser do
   begin
      LoadFromFile(PChar(XmlFile));
      Normalize := True;
      StartScan;
   end;
end;

procedure Tform1.btnCreateXMLClick(Sender: TObject);
var
  SD : TSaveDialog;
  i  : integer;
  MS : TMemoryStream;
  st : string;
 procedure WriteString(const str : string);
  begin
    if str <> '' then
      MS.Write(str[1],Length(str));
  end;
begin
  edtPath.Text := '';
  MS := TMemoryStream.Create();
  try
    WriteString('<?xml version="1.0" encoding="windows-1252"?>'#13#10);
    WriteString('<Updates>'#13#10);
    WriteString('   <Details>'#13#10);
    WriteString(#9'<ApplicationName>'+ edtName.Text +'</ApplicationName>'#13#10);
    WriteString(#9'<Author>'+ edtAuthor.Text +'</Author>'#13#10);
    WriteString(#9'<Company>'+ edtCompany.Text +'</Company>'#13#10);
    WriteString(#9'<Version>'+ edtVersion.Text +'</Version>'#13#10);
    WriteString('   </Details>'#13#10);
    WriteString('   <ChangeLog>'#13#10);
    for i:=1 to memInfo.Lines.Count -1 do
     begin
       if cbNumerator.Checked then
       st := IntToStr(i)+'. '+ memInfo.Lines.Strings[i]+ ''
       else
       st :=  memInfo.Lines.Strings[i]+ '' ;
       WriteString(#9+ '<Info Text=" '+ st + '"/>'+ #13#10);
     end;
    WriteString('   </ChangeLog>'#13#10);
    WriteString('   <Instructions>'#13#10);
    for i:=1 to stgrInst.RowCount -1 do
     begin
      if stgrInst.Cells[1, 1] <> '' then
        begin
        if stgrInst.Cells[1, i] <> '' then
          begin
          if ((stgrInst.Cells[3, i] = 'yes') or (stgrInst.Cells[3, i] = 'no'))then
            begin
              WriteString(#9'<File Name=" ' + stgrInst.Cells[1, i] + '" ' +
                     'Destination="'  + stgrInst.Cells[2, i] + '" ' +
                     'Terminate="'    + stgrInst.Cells[3, i] + '"'  + '/>'#13#10)
            end
            else
            begin
             MessageDlg('The Terminame field must contain "yes" or "no" only.'
                        ,mtError, [mbCancel], 0);
            end;
          end;
        end
        else
        begin
          MessageDlg('You must enter at least one file to update :).'
                     ,mtError, [mbCancel], 0);
          Exit;
        end;
    end;
    WriteString('   </Instructions>'#13#10);
    WriteString('</Updates>'#13#10);

      SD:= TSaveDialog.Create(Self);
    with SD do
     begin
       Title := 'Save XML file';
       DefaultExt := 'xml';
       Filter := 'XML files (*.xml)|*.XML';
       FileName   := 'Updates.xml';
       if cbOverWrite.Checked then
       Options := [ofHideReadOnly,ofEnableSizing, ofOverWritePrompt];
    end;
    if SD.Execute then
      begin
        ms.SaveToFile(SD.FileName);
        UpdateControls(SD.FileName);
        UpdateComponents();
        ShowMessage('You have ceated the proper XML file.'+#10+#13+
                    'The file is stored in: '+#10+#13+ edtPath.Text+#10+#13+
                    'Now, upload the file to the web site remote folder using ftp.');
      end;
  finally
    EmbeddedWB1.LoadFromStream(MS);
    ms.Free();
  end;
end;

procedure Tform1.SetAttr(AttrName: string; var st: string);
var
  Node: TNvpNode;
begin
  Node := FXmlParser.CurAttr.Node(AttrName);
  if Node <> nil then
    st := Node.Value;
end;

procedure Tform1.XmlScanner1CData(Sender: TObject; Content: string);
begin
  Content := StringReplace (Content, #13, ' ', [rfReplaceAll]);
  Content := StringReplace (Content, #10, '',  [rfReplaceAll]);
  TreeView.Items.AddChild  (CurNode, Content);
end;

procedure Tform1.XmlScanner1Comment(Sender: TObject; Comment: string);
begin
  TreeView.Items.AddChild (CurNode, 'Comment');
end;

procedure Tform1.XmlScanner1Content(Sender: TObject; Content: string);
begin
  Content := StringReplace (Content, #13, ' ', [rfReplaceAll]);
  Content := StringReplace (Content, #10, '',  [rfReplaceAll]);
  TreeView.Items.AddChild  (CurNode, Content);
end;

procedure Tform1.XmlScanner1DtdRead(Sender: TObject; RootElementName: string);
begin
    TreeView.Items.AddChild (CurNode, 'DTD: '+RootElementName);
end;

procedure Tform1.XmlScanner1EmptyTag(Sender: TObject; TagName: string;
  Attributes: TAttrList);
var
  i : integer;
begin
  CurNode := TreeView.Items.AddChild (CurNode, 'Element "'+TagName+'" (Empty)');
  for i := 0 to Attributes.Count-1 do
    TreeView.Items.AddChild (CurNode, '  * Attribute '+Attributes.Name (i)+'='+Attributes.Value(i));
    CurNode := CurNode.Parent;
end;

procedure Tform1.XmlScanner1EndTag(Sender: TObject; TagName: string);
begin
  if CurNode <> nil then
    CurNode := CurNode.Parent;
end;

procedure Tform1.XmlScanner1PI(Sender: TObject; Target, Content: string;
  Attributes: TAttrList);
begin
  TreeView.Items.AddChild (CurNode, 'Processing Instruction: '+Content);
end;

procedure Tform1.XmlScanner1StartTag(Sender: TObject; TagName: string;
  Attributes: TAttrList);
var
  i : integer;
begin
  CurNode := TreeView.Items.AddChild (CurNode, 'Element "'+TagName+'"');
  for i := 0 to Attributes.Count-1 do
    TreeView.Items.AddChild (CurNode, '  * Attribute '+Attributes.Name (i)+'='+Attributes.Value(i));
end;

procedure TForm1.XmlScanner1XmlProlog(Sender: TObject; XmlVersion,
  Encoding: string; Standalone: Boolean);
begin
  TreeView.Items.AddChild (CurNode, 'XML Prolog: Version='+XmlVersion+' Encoding='+Encoding);
end;

procedure Tform1.Button1Click(Sender: TObject);
begin
  TreeView.FullExpand;
end;

procedure Tform1.Button2Click(Sender: TObject);
begin
  TreeView.FullCollapse;
end;

procedure Tform1.FormResize(Sender: TObject);
begin
    with stgrInst do
     begin
         ColWidths[1] := Round(100 * Self.Width / 580);
         ColWidths[2] := Round(335 * Self.Width / 580);
     end;
end;

procedure Tform1.SpeedButton3Click(Sender: TObject);
begin
   edtName.Text := '';
   edtVersion.Text := '';
   edtCompany.Text := '';
   edtAuthor.Text := '';
   HideControls();
end;

procedure Tform1.SpeedButton1Click(Sender: TObject);
begin
   memInfo.Lines.Clear;
   HideControls();
end;

procedure Tform1.SpeedButton2Click(Sender: TObject);
var
  i, j : integer;
begin
   for i:=1 to stgrInst.RowCount -1 do
     for j:= 1 to stgrInst.ColCount -1 do
      stgrInst.Cells[j, i] := '';
   HideControls();
end;



end.

⌨️ 快捷键说明

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