📄 fm_addchannel.~pas
字号:
unit FM_ADDChannel;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, xmldom, XMLIntf, msxmldom, XMLDoc,ShDocVw,
ComCtrls, OleCtrls, ImgList,StrUtils, RzPanel, IdBaseComponent,
IdComponent, IdTCPConnection, IdTCPClient, IdHTTP, RzTreeVw;
type
TFMADDChannel = class(TForm)
Image1: TImage;
RzPanel1: TRzPanel;
Bevel1: TBevel;
ProgressBar1: TProgressBar;
Label5: TLabel;
Label2: TLabel;
Label1: TLabel;
Edit1: TEdit;
Image2: TImage;
Button1: TButton;
RzPanel2: TRzPanel;
Label3: TLabel;
Edit2: TEdit;
Bevel2: TBevel;
Button2: TButton;
Button3: TButton;
Button4: TButton;
IdHTTP1: TIdHTTP;
RzTreeView1: TRzTreeView;
Label4: TLabel;
procedure Button5Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure IdHTTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCountMax: Integer);
procedure IdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure TreeViewLoadXML(XMLNode: IXMLNode; TreeNode: TTreeNode);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FMADDChannel: TFMADDChannel;
ClearPath:Boolean;
implementation
uses
FM_RSS,UN_CSS;
{$R *.dfm}
procedure TFMADDChannel.Button5Click(Sender: TObject);
var
k,I:integer;
Mark,xmlfilename:string;
XMLDc1:TXMLDocument;
SList,SNodes:TStringList;
XMLNode:IXMLNode;
XMLNode2:IXMLNode;
Items2,ItemsParent:TTreeNode;
begin
if Edit1.Text<>'' then
if Edit2.Text<>'' then
begin
if RzTreeView1.Selected<>nil then
begin
XMLDc1:=TXMLDocument.Create(Self);
XMLDc1.FileName:=ExtractFilePath(Application.ExeName)+'RSSChannel.xml';
XMLDc1.Active:=True;
XMLNode:=XMLDc1.Node.ChildNodes.Nodes[0];
Items2:=FMRSS.RzTreeView1.Items[0];
SList:=TStringList.Create;
SNodes:=TStringList.Create;
SNodes.Clear;
SList.Clear;
if RzTreeView1.Selected.Parent<>nil then
begin
ItemsParent:=RzTreeView1.Selected;
k:=RzTreeView1.Selected.Index;
while ItemsParent<>nil do
begin
SList.Add(inttostr(ItemsParent.index));
SNodes.Add(inttostr(ItemsParent.index));
ItemsParent:=ItemsParent.Parent;
end;
SList.Delete(SList.Count-1);
SNodes.Delete(SNodes.Count-1);
while SList.Text <>'' do
begin
XMLNode:=XMLNode.ChildNodes.Nodes[strtoint(SList.Strings[SList.Count-1])];
SList.Delete(SList.Count-1);
end;
while SNodes.Text <>'' do
begin
Items2:=Items2.Item[strtoint(SNodes.Strings[SNodes.Count-1])];
Items2.Selected:=True;
SNodes.Delete(SNodes.Count-1);
end;
XMLNode2:=XMLNode.AddChild('Channel');
XMLNode2.Attributes['Name']:=Edit2.Text;
XMLNode2.NodeValue:=Edit1.Text;
Items2:=FMRSS.RzTreeView1.Items.AddChild(Items2,' '+Edit2.Text+#10);
Items2.SelectedIndex:=3;
Items2.ImageIndex:=3;
Items2.Selected:=True;
Items2.Parent.Expanded:=True;
end
else
begin
XMLNode2:=XMLDc1.Node.ChildNodes.Nodes[0].AddChild('Channel');
XMLNode2.Attributes['Name']:=Edit2.Text;
XMLNode2.NodeValue:=Edit1.Text;
Items2:=FMRSS.RzTreeView1.Items.AddChild(Items2,' '+Edit2.Text+#10);
Items2.SelectedIndex:=3;
Items2.ImageIndex:=3;
Items2.Selected:=True;
Items2.Parent.Expanded:=True;
end;
XMLDC1.SaveToFile(ExtractFilePath(Application.ExeName)+'RSSChannel.xml');
ChannelNamesList:=Edit1.Text;
for i:=1 to Length(Edit1.Text) do
begin
Mark:=MidStr(Edit1.Text,i,1);
if (Mark<>'=')and(Mark<>'/')and(Mark<>'\')and(Mark<>':')and(Mark<>'?')and(Mark<>'*')and(Mark<>'&')and(Mark<>'%') then
XMLFileName:=XMLFileName+Mark;
end;
XMLtoHtml:=ExtractFilePath(Application.ExeName)+'Feed\'+XMLFileName+'.xml';
ClearPath:=False;
XMLDc1.Free;
Close;
end
else
Application.MessageBox('请选择要添加到的频道组!','提醒',MB_Ok or MB_ICONINFORMATION);
end
else
Application.MessageBox('频道名称不能为空!','提醒',MB_Ok or MB_ICONINFORMATION);
end;
procedure TFMADDChannel.Button1Click(Sender: TObject);
var
XMLNode1:IXMLNode;
XMLDc2:TXMLDocument;
DownLoadXML:TFileStream;
i,j,k:integer;
Mark,XMLFileName:String;
begin
try
Label5.Visible:=True;
ProgressBar1.Visible:=True;
Mark:='';
XMLFileName:='';
for i:=1 to Length(Edit1.Text) do
begin
Mark:=MidStr(Edit1.Text,i,1);
if (Mark<>'=')and(Mark<>'/')and(Mark<>'\')and(Mark<>':')and(Mark<>'?')and(Mark<>'*')and(Mark<>'&')and(Mark<>'%') then
XMLFileName:=XMLFileName+Mark;
end;
DownLoadXML:=TFileStream.Create(ExtractFilePath(Application.ExeName)+'Feed\'+XMLFileName+'.xml',fmCreate);
Idhttp1.Get(Edit1.Text,DownLoadXML);
Idhttp1.Disconnect;
DownLoadXML.Free;
try
XMLDc2:=TXMLDocument.Create(self);
XMLDc2.FileName:=ExtractFilePath(Application.ExeName)+'Feed\'+XMLFileName+'.xml';
XMLDc2.Active:=True;
for i:=0 to XMLDc2.Node.ChildNodes.Count do
if XMLDc2.Node.ChildNodes.Nodes[i].NodeName='rss' then
break;
XMLNode1:=XMLDc2.Node.ChildNodes.Nodes[i];
XMLNode1.Attributes['New']:='New';
for k:=0 to XMLNode1.ChildNodes.Count-1 do
if LowerCase(XMLNode1.ChildNodes.Nodes[k].NodeName)='channel' then
break;
XMLNode1:= XMLNode1.ChildNodes.Nodes[k];
for j:=0 to XMLDc2.Node.ChildNodes.Nodes[i].ChildNodes.Nodes[k].ChildNodes.count-1 do
if LowerCase(XMLDc2.Node.ChildNodes.Nodes[i].ChildNodes.Nodes[k].ChildNodes.Nodes[j].NodeName)='title' then
break;
if XMLDc2.Node.ChildNodes.Nodes[i].ChildNodes.Nodes[k].ChildNodes.Nodes[j].ChildNodes.Count<>0 then
Edit2.Text:=XMLDc2.Node.ChildNodes.Nodes[i].ChildNodes.Nodes[k].ChildNodes.Nodes[j].ChildNodes.Nodes[0].NodeValue
else
Edit2.Text:=XMLDc2.Node.ChildNodes.Nodes[i].ChildNodes.Nodes[k].ChildNodes.Nodes[j].NodeValue;
for i:=0 to XMLNode1.ChildNodes.Count-1 do
if LowerCase(XMLNode1.ChildNodes.Nodes[i].NodeName)='item' then
XMLNode1.ChildNodes.Nodes[i].AddChild('read').NodeValue:='N';
RzPanel2.Visible:=TRUE;
Label5.Visible:=False;
ProgressBar1.Visible:=False;
XMLDc2.SaveToFile(ExtractFilePath(Application.ExeName)+'Feed\'+XMLFileName+'.xml');
XMLDc2.Free;
except
XMLDc2.Free;
ProgressBar1.Position:=0;
ProgressBar1.Min:=0;
Application.MessageBox('文件不符合RSS2.0标准','错误',MB_Ok or MB_ICONERROR);
DeleteFile(ExtractFilePath(Application.ExeName)+'Feed\'+XMLFileName+'.xml');
end;
except
AddToolTip(Edit1.Handle, @ti, 2, '网络连接错误,请填入正确的地址', '网络连接错误',0,0);//Application.MessageBox('网络连接错误','错误',MB_Ok or MB_ICONWARNING);
end;
end;
procedure TFMADDChannel.Button3Click(Sender: TObject);
var
i:integer;
Mark,XMLFileName:string;
begin
for i:=1 to Length(Edit1.Text) do
begin
Mark:=MidStr(Edit1.Text,i,1);
if (Mark<>'=')and(Mark<>'/')and(Mark<>'\')and(Mark<>':')and(Mark<>'?')and(Mark<>'*')and(Mark<>'&')and(Mark<>'%') then
XMLFileName:=XMLFileName+Mark;
end;
DeleteFile(ExtractFilePath(Application.ExeName)+'Feed\'+XMLFileName+'.xml');
Close;
end;
procedure TFMADDChannel.Button4Click(Sender: TObject);
begin
RzPanel2.Visible:=False;
end;
procedure TFMADDChannel.IdHTTP1WorkBegin(Sender: TObject;
AWorkMode: TWorkMode; const AWorkCountMax: Integer);
begin
ProgressBar1.Max:=AWorkCountMax;
ProgressBar1.Min:=0;
ProgressBar1.Position:=0;
end;
procedure TFMADDChannel.IdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer);
begin
ProgressBar1.Position := AWorkCount;
end;
procedure TFMADDChannel.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
if ClearPath then
XMLtoHtml:='';
end;
procedure TFMADDChannel.FormCreate(Sender: TObject);
var
XMLNode:IXMLNode;
XMLDoc1:TXMLDocument;
begin
CreateToolTips(Edit1.Handle);
XMLDoc1:=TXMLDocument.Create(Self);
XMLDoc1.FileName:=ExtractFilePath(Application.ExeName)+'RSSChannel.xml';
XMLDoc1.Active:=true;
RzTreeView1.Items.Clear;
XMLNode:=XMLDoc1.Node.ChildNodes.Nodes[0];
RzTreeView1.Items.Add(nil,'聚合新闻(RSS)阅读器');
Application.ProcessMessages;
try
TreeViewLoadXML(XMLNode,RzTreeView1.Items[0]);
except
end;
RzTreeView1.FullExpand;
XMLDoc1.Free;
ClearPath:=True;
end;
procedure TFMADDChannel.TreeViewLoadXML(XMLNode: IXMLNode;
TreeNode: TTreeNode);
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:=RzTreeView1.Items.Addchild(TreeNode,XMLNode.ChildNodes.Nodes[i].Attributes['Name']);
Item.SelectedIndex:=0;
Item.ImageIndex:=0;
TreeViewLoadXML(XMLNode.ChildNodes.Nodes[i],Item);
end;
if XMLNode.ChildNodes.Nodes[i].NodeName='Channel' then
XMLNode.ChildNodes.Nodes[i].NodeValue;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -