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

📄 fm_ouptrss.pas

📁 ReadWorld RSS 聚合新闻 阅读器 XML 欢迎使用ReadWorldRSS阅读器 1 这个程序更改了我上回发布的《聚合新闻(RSS)阅读器》的一些错误。 2 新增了频道列表的拖放
💻 PAS
字号:
unit FM_OuptRss;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, ImgList, xmldom, XMLIntf, msxmldom, XMLDoc,shellapi;

type
  TFMOuptRss = class(TForm)
    TreeView1: TTreeView;
    TreeView2: TTreeView;
    Button1: TButton;
    Button4: TButton;
    Button6: TButton;
    Button7: TButton;
    Label1: TLabel;
    XMLDoc2: TXMLDocument;
    procedure Button1Click(Sender: TObject);
    procedure AddChannel(Node1:TTreeNode;Node2:TTreeNode;Node3:TTreeNode;s:string);
    procedure FormCreate(Sender: TObject);
    procedure TreeViewLoadXML(XMLNode: IXMLNode; TreeNode: TTreeNode;Tree:TTreeView);
    procedure Button4Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FMOuptRss: TFMOuptRss;
  XMLFilePathName:String;
implementation
uses
 FM_ViewRss,FM_RSS;
{$R *.dfm}

procedure TFMOuptRss.AddChannel(Node1, Node2,Node3: TTreeNode;s:string);
begin
 while node1<>nil   do
    begin
      if node1.HasChildren then
        begin
          node1:=node1.getFirstChild;
          if node1.ImageIndex=0 then
           begin
            Node2:=TreeView2.Items.AddChild(Node2,node1.Text);
            Node3:=FMRSS.TreeView1.Items.AddChild(Node3,node1.Text);
            Node2.ImageIndex:=0;
            Node3.ImageIndex:=0;
            Node3.SelectedIndex:=0;
            Node2.SelectedIndex:=0;
           end ;
          if node1.ImageIndex=3 then
           begin
            Node2:=TreeView2.Items.AddChild(Node2,node1.Text);
            Node3:=FMRSS.TreeView1.Items.AddChild(Node3,node1.Text);
            Node2.ImageIndex:=3;
            Node3.ImageIndex:=3;
            Node3.SelectedIndex:=3;
            Node2.SelectedIndex:=3;
           end ;
          AddChannel(node1,Node2,Node3,s);
          node1:=node1.Parent;
          node2:=node2.Parent;
          node3:=node3.Parent;
        end;
      if (node1.getNextSibling<>nil)and(s<>node1.Parent.Text) then
       begin
        node1:=node1.getNextSibling  ;
        if node1.ImageIndex=0 then
         begin
          Node2:=TreeView2.Items.Add(Node2,Node1.Text);
          Node3:=FMRSS.TreeView1.Items.Add(Node3,Node1.Text);
          Node2.ImageIndex:=0;
          Node3.ImageIndex:=0;
          Node3.SelectedIndex:=0;
          Node2.SelectedIndex:=0;
         end;
        if node1.ImageIndex=3 then
         begin
          Node2:=TreeView2.Items.Add(Node2,Node1.Text);
          Node3:=FMRSS.TreeView1.Items.Add(Node3,Node1.Text);
          Node2.ImageIndex:=3;
          Node3.ImageIndex:=3;
          Node3.SelectedIndex:=3;
          Node2.SelectedIndex:=3;
         end;
       end
      else
        exit;
      end;
end;

procedure TFMOuptRss.Button1Click(Sender: TObject);
var
 items2,Items3,ItemsParent:TTreeNode;
 SList,S_List,AddList:TStringList;
 XMLNode,XMLNode1:IXMLNode;
 k:integer;
 XMLDoc1:TXMLDocument;
begin
if (TreeView1.Selected<>nil)and(TreeView2.Selected<>nil)then
 if (TreeView2.Selected.ImageIndex<>3)and(TreeView1.Selected.Parent<>nil)and(TreeView2.Items.Count<>1) then
  begin
  SList:=TStringList.Create;
  S_List:=TStringList.Create;
  AddList:=TStringList.Create;
  AddList.Clear;
  SList.Clear;
  S_List.Clear;
  Items2:=nil;
  XMLDoc1:=TXMLDocument.Create(self);
  XMLDoc1.FileName:=XMLFilePathName;
  XMLDoc1.Active:=True;
  XMLNode:=XMLDoc1.Node.ChildNodes.Nodes[0];
  ItemsParent:=TreeView1.Selected.Parent ;
  k:=TreeView1.Selected.Index;
   while ItemsParent<>nil do
    begin
      SList.Add(inttostr(ItemsParent.index));
      ItemsParent:=ItemsParent.Parent;
    end;
   SList.Delete(SList.Count-1);
   while SList.Text <>'' do
    begin
     XMLNode:=XMLNode.ChildNodes.Nodes[strtoint(SList.Strings[SList.Count-1])];
     SList.Delete(SList.Count-1);
    end;
 XMLNode1:=XMLNode.ChildNodes.Nodes[k];
 XMLDoc2.FileName:=ExtractFilePath(Application.ExeName)+'RSSChannel.xml';
 XMLDoc2.Active:=True;
 XMLNode:=XMLDoc2.Node.ChildNodes.Nodes[0];
 ItemsParent:=TreeView2.Selected.Parent;
 k:=TreeView2.Selected.Index;
 try
 while ItemsParent<>nil do
  begin
   S_List.Add(inttostr(ItemsParent.index));
   AddList.Add(inttostr(ItemsParent.index));
   ItemsParent:=ItemsParent.Parent;
  end;
  S_List.Delete(S_List.Count-1);
  AddList.Delete(AddList.Count-1);
   while S_List.Text<>''do
    begin
     XMLNode:=XMLNode.ChildNodes.Nodes[strtoint(S_List.Strings[S_List.Count-1])];
     S_List.Delete(S_List.Count-1);
    end;
  XMLNode.ChildNodes.Nodes[k].ChildNodes.Add(XMLNode1);
  except
  XMLNode:=XMLDoc2.Node.ChildNodes.Nodes[0];
  XMLNode.ChildNodes.Add(XMLnode1); 
  end;
  XMLDoc2.SaveToFile(ExtractFilePath(Application.ExeName)+'RSSChannel.xml');
  Items3:=FMRSS.TreeView1.Items[0];
  While AddList.Text<>'' do
   begin
    Items3:=Items3.Item[strtoint(AddList.Strings[AddList.Count-1])];
    Items3.Selected:=True;
    AddList.Delete(AddList.Count-1);
   end;
  Items3:=Items3.Item[k];
  Items3.Selected:=True;
  if TreeView1.Selected.ImageIndex=0 then
   begin
    Items2:=TreeView2.Items.AddChild(TreeView2.Selected,TreeView1.Selected.Text);
    Items2.ImageIndex:=0;
    Items2.SelectedIndex:=0;
    TreeView2.Selected.Expanded:=True;
    if TreeView2.Items[0].Selected then
     begin
      Items3:=FMRSS.TreeView1.Items.AddChild(FMRSS.TreeView1.Items[0],TreeView1.Selected.Text);
      Items3.ImageIndex:=0;
      Items3.SelectedIndex:=0;
      Items3.Expanded:=True;
     end
    else
     begin
      Items3:=FMRSS.TreeView1.Items.AddChild(Items3,TreeView1.Selected.Text);
      Items3.ImageIndex:=0;
      Items3.SelectedIndex:=0;
      Items3.Expanded:=True;
     end ;
   end;
   if TreeView1.Selected.ImageIndex=3 then
   begin
    Items2:=TreeView2.Items.AddChild(TreeView2.Selected,TreeView1.Selected.Text);
    Items2.ImageIndex:=3;
    Items2.SelectedIndex:=3;
    TreeView2.Selected.Expanded:=True;
    if TreeView2.Items[0].Selected then
     begin
      Items3:=FMRSS.TreeView1.Items.AddChild(FMRSS.TreeView1.Items[0],TreeView1.Selected.Text);
      Items3.ImageIndex:=3;
      Items3.SelectedIndex:=3;
      Items3.Expanded:=True;
     end
    else
     begin
      Items3:=FMRSS.TreeView1.Items.AddChild(Items3,TreeView1.Selected.Text);
      Items3.ImageIndex:=3;
      Items3.SelectedIndex:=3;
      Items3.Expanded:=True;
     end;
   end;
  AddChannel(TreeView1.Selected,Items2,Items3,TreeView1.Selected.Parent.Text);
  XMLDoc1.Free ;
 end
 else
  Application.MessageBox('不可以在频道节点下添加项目或没有选择节点','错误',MB_OK or MB_ICONWARNING) ;
end;

procedure TFMOuptRss.FormCreate(Sender: TObject);
var
 XMLNode:IXMLNode;
 XMLDoc1:TXMLDocument;
begin
 XMLDoc1:=TXMLDocument.Create(self);
 XMLDoc1.FileName:=ExtractFilePath(Application.ExeName)+'rsschannel.xml';
 XMLDoc1.Active:=True;
 TreeView2.Items.Clear;
 XMLNode:=XMLDoc1.Node.ChildNodes.Nodes[0];
 TreeView2.Items.Add(nil,'聚合新闻(RSS)阅读器');
 TreeViewLoadXML(XMLNode,TreeView2.Items[0],TreeView2);
 TreeView2.Items[0].Expanded:=True;
 XMLDoc1.XML.Clear;
 XMLDoc1.Active:=False;
 try
 XMLDoc1.FileName:='http://freehost03.websamba.com/cyqlinux/rss/rsschannel.xml';
 XMLFilePathName:='http://freehost03.websamba.com/cyqlinux/rss/rsschannel.xml';
 XMLDoc1.Active:=True;
 TreeView1.Items.Clear;
 XMLNode:=XMLDoc1.Node.ChildNodes.Nodes[0];
 TreeView1.Items.Add(nil,'聚合新闻(RSS)阅读器');
 TreeViewLoadXML(XMLNode,TreeView1.Items[0],TreeView1);
 TreeView1.Items[0].Expanded:=True;
 except
  label1.caption:='网络链接失败';
 end;
 XMLDoc1.Free;
end;
procedure TFMOuptRss.TreeViewLoadXML(XMLNode: IXMLNode;  TreeNode: TTreeNode;Tree:TTreeview);
var
 Item:TTreeNode;
 i:integer;
begin
  for i:=0 to XMLNode.ChildNodes.Count-1 do
  begin
   if XMLNode.ChildNodes.Nodes[i].NodeName='ChannelName' then
     begin
      Item:=Tree.Items.Addchild(TreeNode,XMLNode.ChildNodes.Nodes[i].Attributes['Name']);
      Item.SelectedIndex:=0;
      Item.ImageIndex:=0;
      TreeViewLoadXML(XMLNode.ChildNodes.Nodes[i],Item,Tree);
     end;
    if XMLNode.ChildNodes.Nodes[i].NodeName='Channel' then
     begin
      Item:=Tree.Items.Addchild(TreeNode,XMLNode.ChildNodes.Nodes[i].Attributes['Name']);
      Item.SelectedIndex:=3;
      Item.ImageIndex:=3;
     end;
   end;
end;
procedure TFMOuptRss.Button4Click(Sender: TObject);
Var
 FMViewRss:TFMViewRSS;
 xmlnode:ixmlnode;
 XMLDoc1:TXMLDocument;
begin
 FMViewRss:=TFMViewRss.Create(self);
 FMViewRSS.ShowModal;
 XMLDoc1:=TXMLDocument.Create(self);
 try
  XMLDoc1.FileName:=XMLFilePathName;
  xmldoc1.Active:=True;
  XMLNode:=XMLDoc1.Node.ChildNodes.Nodes[0];
  if XMLNode.NodeName='RSSChannel' then
   begin
    TreeView1.Items.Clear;
    TreeView1.Items.Add(nil,'聚合新闻(RSS)阅读器');
    TreeViewLoadXML(XMLNode,TreeView1.Items[0],TreeView1);
    TreeView1.iTEMS[0].Expanded:=True;
   end
  else
     Application.MessageBox('不能打开频道请确保地址的正确性或文件的正确','错误',MB_OK OR MB_ICONERROR);
 except
  Application.MessageBox('不能打开频道请确保地址的正确性或文件的正确','错误',MB_OK OR MB_ICONERROR);
 end;
 XMLDoc1.Free;
end;

procedure TFMOuptRss.Button7Click(Sender: TObject);
begin
 ShellExecute(handle,'open',PChar('http://freehost03.websamba.com/cyqlinux/rss/info.htm'),nil,nil,sw_show);
end;

procedure TFMOuptRss.Button6Click(Sender: TObject);
begin
 close;
end;

end.

⌨️ 快捷键说明

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