📄 fm_ouptrss.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 + -