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

📄 fm_addchannel.pas

📁 realworld source code
💻 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;
{$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
  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
 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 + -