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

📄 fm_rss.pas

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

interface      

uses
  Windows, Messages, StrUtils,SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, cxGraphics, OleCtrls, SHDocVw, ComCtrls, cxControls,shellapi,
  dxStatusBar, dxBar, ExtCtrls, ToolWin, StdCtrls, ImgList, dxBarExtItems,
  xmldom, XMLIntf, msxmldom, XMLDoc, Menus, dxDockControl, dxDockPanel;
type
  TFMRSS = class(TForm)
    dxBarManager1: TdxBarManager;
    dxBarSubItem1: TdxBarSubItem;
    dxBarSubItem2: TdxBarSubItem;
    dxBarSubItem3: TdxBarSubItem;
    dxBarButton1: TdxBarButton;
    dxBarButton2: TdxBarButton;
    dxBarButton3: TdxBarButton;
    dxBarButton6: TdxBarButton;
    dxBarButton7: TdxBarButton;
    dxBarButton8: TdxBarButton;
    dxBarButton10: TdxBarButton;
    dxBarButton11: TdxBarButton;
    dxBarButton12: TdxBarButton;
    dxBarButton13: TdxBarButton;
    dxBarButton14: TdxBarButton;
    ImageList2: TImageList;
    dxBarButton16: TdxBarButton;
    dxBarButton21: TdxBarButton;
    ImageList3: TImageList;
    dxBarEdit1: TdxBarEdit;
    dxBarCombo1: TdxBarCombo;
    dxBarPopupMenu1: TdxBarPopupMenu;
    dxBarButton23: TdxBarButton;
    dxBarButton22: TdxBarButton;
    dxBarButton24: TdxBarButton;
    dxBarButton25: TdxBarButton;
    dxBarButton26: TdxBarButton;
    dxBarButton27: TdxBarButton;
    dxBarButton28: TdxBarButton;
    dxBarButton29: TdxBarButton;
    dxBarButton30: TdxBarButton;
    dxBarButton31: TdxBarButton;
    dxBarButton32: TdxBarButton;
    dxBarButton33: TdxBarButton;
    dxBarPopupMenu2: TdxBarPopupMenu;
    N1: TdxBarButton;
    N2: TdxBarButton;
    N3: TdxBarButton;
    N4: TdxBarButton;
    N5: TdxBarButton;
    N6: TdxBarButton;
    N7: TdxBarButton;
    N8: TdxBarButton;
    N9: TdxBarButton;
    N10: TdxBarButton;
    dxDockingManager1: TdxDockingManager;
    dxDockSite1: TdxDockSite;
    dxLayoutDockSite1: TdxLayoutDockSite;
    dpToolbox: TdxDockPanel;
    TreeView1: TTreeView;
    dxDockPanel1: TdxDockPanel;
    ListView1: TListView;
    Splitter1: TSplitter;
    dxBarLargeButton3: TdxBarLargeButton;
    dxBarLargeButton4: TdxBarLargeButton;
    dxBarLargeButton5: TdxBarLargeButton;
    dxBarLargeButton6: TdxBarLargeButton;
    dxBarLargeButton7: TdxBarLargeButton;
    dxBarLargeButton8: TdxBarLargeButton;
    dxLayoutDockSite2: TdxLayoutDockSite;
    WebBrowser1: TWebBrowser;
    ImageList4: TImageList;
    dxBarSubItem7: TdxBarSubItem;
    dxBarButton35: TdxBarButton;
    dxBarButton36: TdxBarButton;
    dxBarButton37: TdxBarButton;
    dxBarButton38: TdxBarButton;
    dxBarProgressItem1: TdxBarProgressItem;
    dxBarLargeButton1: TdxBarLargeButton;
    dxBarLargeButton9: TdxBarLargeButton;
    dxBarButton9: TdxBarButton;
    dxBarStatic1: TdxBarStatic;
    dxBarLargeButton2: TdxBarLargeButton;
    dxBarLargeButton10: TdxBarLargeButton;
    dxBarLargeButton11: TdxBarLargeButton;
    dxBarLargeButton12: TdxBarLargeButton;
    dxBarLargeButton13: TdxBarLargeButton;
    dxBarLargeButton14: TdxBarLargeButton;
    dxBarLargeButton15: TdxBarLargeButton;
    dxBarLargeButton16: TdxBarLargeButton;
    dxBarButton4: TdxBarButton;
    dxBarButton5: TdxBarButton;
    dxBarButton15: TdxBarButton;
    XML1: TXMLDocument;
    XML2: TXMLDocument;
    procedure FormCreate(Sender: TObject);
    procedure dxBarButton1Click(Sender: TObject);
    procedure dxBarButton2Click(Sender: TObject);
    procedure SearchXML(XMLNode:IXMLNode; SList1: TStringList;ij:integer);
    procedure ListViewLoadXML(XMLNode: IXMLNode);
    procedure ListView1DblClick(Sender: TObject);
    procedure TreeView1DblClick(Sender: TObject);
    procedure ListView1Click(Sender: TObject);
    procedure TempHTML(XMLFile:string;Title:string;XMLDoc1:TXMLDocument);
    procedure WebBrowser1ProgressChange(Sender: TObject; Progress,
      ProgressMax: Integer);
    procedure dxBarButton8Click(Sender: TObject);
    procedure N1Click(Sender: TObject);
    procedure N2Click(Sender: TObject);
    procedure N9Click(Sender: TObject);
    procedure N7Click(Sender: TObject);
    procedure N5Click(Sender: TObject);
    procedure N3Click(Sender: TObject);
    procedure N8Click(Sender: TObject);
    procedure N6Click(Sender: TObject);
    procedure N4Click(Sender: TObject);
    procedure TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure dxBarLargeButton8Click(Sender: TObject);
    procedure dxBarLargeButton3Click(Sender: TObject);
    procedure dxBarLargeButton4Click(Sender: TObject);
    procedure dxBarLargeButton5Click(Sender: TObject);
    procedure dxBarLargeButton6Click(Sender: TObject);
    procedure dxBarLargeButton7Click(Sender: TObject);
    procedure StyleClick(Sender: TObject);
    procedure N10Click(Sender: TObject);
    procedure dxBarButton29Click(Sender: TObject);
    procedure dxBarButton30Click(Sender: TObject);
    procedure dxBarButton5Click(Sender: TObject);
    procedure dxBarButton15Click(Sender: TObject);
    procedure dxBarButton23Click(Sender: TObject);
    procedure TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);
    procedure TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    procedure dxBarButton33Click(Sender: TObject);
    procedure TreeViewLoadXML(XMLNode: IXMLNode; TreeNode: TTreeNode);
    procedure dxBarButton22Click(Sender: TObject);
    procedure dxBarButton27Click(Sender: TObject);
    procedure dxBarButton28Click(Sender: TObject);
    procedure dxBarButton3Click(Sender: TObject);
    procedure dxBarLargeButton15Click(Sender: TObject);
    procedure dxBarLargeButton1Click(Sender: TObject);
    procedure dxBarLargeButton9Click(Sender: TObject);
  private
    { Private declarations }

  public
        { Public declarations }
  end;
var
  ii:integer;
  FMRSS: TFMRSS;
  TitleName1,TitleName2,TitleName3,TitleName4,TitleName5:TStringList;
  Cou:integer;
  T_Name,XMLtoHTML,ChannelNames,ChannelNamesList:string;
  ChannelNodeItem: IXMLNode;
implementation
uses
 FM_ADDCRow,FM_ADDChannel,FM_RssAbout,FM_ChanP,FM_ViewRss,FM_OuptRss,FM_InPutRss,UN_CSS;
{$R *.dfm}
procedure TFMRSS.FormCreate(Sender: TObject);
var
  XMLNode:IXMLNode;
  XMLDoc1:TXMLDocument;
  XMLInt:IDOMDocument;
begin
 ii:=0;
 XMLDoc1:=TXMLDocument.Create(Self);
 //try
  if FileExists(ExtractFilePath(Application.ExeName)+'RSSChannel.xml') then
   begin
     XMLDoc1.FileName:=ExtractFilePath(Application.ExeName)+'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.Items[0].Expanded:=True;
   end
  else
   begin
    //XMLDoc1.SaveToFile(ExtractFilePath(Application.ExeName)+'RSSChannel.xml');
   // XMLDoc1.FileName:=ExtractFilePath(Application.ExeName)+'RSSChannel.xml';
    XMLDoc1.Active:=True;
    TreeView1.Items.Add(nil,'聚合新闻(RSS)阅读器');
    XMLInt:=XMLDoc1.DOMDocument;
    XMLInt.createElement('RSSChannel');
    XMLDoc1.SaveToFile(ExtractFilePath(Application.ExeName)+'RSSChannel.xml');
   end;
 //except
 //end;
  XMLDoc1.Free;
  WebBrowser1.Navigate('res://' + ExtractFilePath(Application.ExeName) + 'Project1.exe/INDEXPAGE');
end;

procedure TFMRSS.dxBarButton1Click(Sender: TObject);
var
 FADDC:TFMADDChannel;
 XMLDoc1:TXMLDocument;
 XMLNode1:IXMLNode;
 j:integer;
begin
if TreeView1.Selected<>nil then
 if (TreeView1.Selected.ImageIndex<>3) then
  begin
   FADDC:=TFMADDChannel.Create(self);
   FADDC.ShowModal;
   try
    XMLDoc1:=TXMLDocument.Create(Self);
    XMLDoc1.FileName:=XMLtoHtml;
    XMLDoc1.Active:=True;
    for j:=0 to XMLDoc1.Node.ChildNodes.Count-1 do
     if LowerCase(XMLDoc1.Node.ChildNodes.Nodes[j].NodeName)='rss' then
      Break;
    XMLNode1:=XMLDoc1.Node.ChildNodes.Nodes[j].ChildNodes.Nodes[0];
    ListView1.Items.Clear;
    ListViewLoadXML(XMLNode1);
    XMLDoc1.Free;
   except
   end;
  end
 else
  Application.MessageBox('不能在频道节点下添加频道或者没有选择节点','错误',MB_OK OR MB_ICONERROR)
else
  Application.MessageBox('请先选择频道组','错误',MB_OK OR MB_ICONERROR);
end;

procedure TFMRSS.dxBarButton2Click(Sender: TObject);
var
 FADDCR:TFMADDCRow;
begin
 if TreeView1.Selected<>nil then
  begin
   if TreeView1.Selected.ImageIndex<>3 then
    begin
     FADDCR:=TFMADDCRow.Create(self);
     FADDCR.ShowModal;
    end
   else
    Application.MessageBox('不能在频道节点下添加频道组','错误',MB_OK OR MB_ICONERROR);
  end
 else
    Application.MessageBox('请选择节点添加位置','错误',MB_OK OR MB_ICONERROR);
end;


procedure TFMRSS.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:=TreeView1.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
     begin
      Item:=TreeView1.Items.Addchild(TreeNode,XMLNode.ChildNodes.Nodes[i].Attributes['Name']);
      Item.SelectedIndex:=3;
      Item.ImageIndex:=3;
     end;
    end;
end;


procedure TFMRSS.ListViewLoadXML(XMLNode: IXMLNode);
var
 i,j,k,l:integer;
 Item:TListItem;
begin
  TitleName1:=TStringList.Create;
  TitleName2:=TStringList.Create;
  TitleName3:=TStringList.Create;
  TitleName4:=TStringList.Create;
  TitleName5:=TStringList.Create;
  TitleName1.Clear;
  TitleName2.Clear;
  TitleName3.Clear;
  TitleName4.Clear;
  TitleName5.Clear;
  l:=0;
  k:=0;
  for i:=0 to XMLNode.ChildNodes.Count-1  do
   begin
    if LowerCase(XMLNode.ChildNodes.Nodes[i].NodeName)='item' then
      for j:=0 to XMLNode.ChildNodes.Nodes[i].ChildNodes.Count-1 do
       begin
        RStringList1(XMLNode,i,j,TitleName1);
        RStringList2(XMLNode,i,j,TitleName2);
        RStringList3(XMLNode,i,j,TitleName3);
        RStringList4(XMLNode,i,j,TitleName4);
        RStringList5(XMLNode,i,j,TitleName5);
       end;
   end;
  for i:=0 to titlename1.Count-1 do
   begin
    Item:=ListView1.Items.Add;
    Item.Caption:=TitleName1.Strings[i];
    if TitleName5.Strings[i]='N' then
     begin
      Item.SubItems.Add('未读');
      Item.ImageIndex:=2;
      l:=l+1;
     end
    else
     begin
      Item.SubItems.Add('已读');
      Item.ImageIndex:=1;
      k:=k+1;
     end;
    if TitleName2.Count=TitleName1.Count then
     Item.SubItems.Add(TitleName2.Strings[i])
    else
     Item.SubItems.Add(' ');
    if TitleName3.Count=TitleName1.Count then
     Item.SubItems.Add(Titlename3.Strings[i])
    else
     Item.SubItems.Add(' ');
   end;
 Cou:=titlename1.Count;
 T_Name:=TreeView1.Selected.Text ;
 CSSMenu();
 dxBarStatic1.Caption:='频道:'+ChannelNames+'  总共有:'+inttostr(ListView1.Items.Count)+'条新闻'+'  其中:'+inttostr(k)+'条已读  '+inttostr(l)+'条未读';
end;

procedure TFMRSS.ListView1DblClick(Sender: TObject);
var
 Item:TListItem;
 i,j,k:integer;
 XMLFileName,Mark:string;
 XMLNode:IXMLNode;
 XMLDoc1:TXMLDocument;
begin
 k:=0;
 if ListView1.ItemIndex<>-1 then
  begin
   ListView1.Selected.ImageIndex:=1;
   Item:=ListView1.Selected;
   for i:=1 to Length(ChannelNamesList) do
     begin
      Mark:=MidStr(ChannelNamesList,i,1);
      if (Mark<>'=')and(Mark<>'/')and(Mark<>'\')and(Mark<>':')and(Mark<>'?')and(Mark<>'*')and(Mark<>'&')and(Mark<>'%')  then
        XMLFileName:=XMLFileName+Mark;
     end;
     XMLDoc1:=TXMLDocument.Create(self); 
     XMLDoc1.FileName:=ExtractFilePath(Application.ExeName)+'Feed\'+XMLFileName+'.xml';
     XMLDoc1.Active:=true;
     for j:=0 to XMLDoc1.Node.ChildNodes.Count do
       if LowerCase(XMLDoc1.Node.ChildNodes.Nodes[j].NodeName)='rss' then
         Break;
    XMLNode:=XMLDoc1.Node.ChildNodes.Nodes[j].ChildNodes.Nodes[0];
    for i:=0 to XMLNode.ChildNodes.Count-1  do
     if LowerCase(XMLNode.ChildNodes.Nodes[i].NodeName)='item' then
      break;
   XMLNode:=XMLNode.ChildNodes.Nodes[i+ListView1.Selected.Index];
   for i:=0 to XMLnode.ChildNodes.Count-1 do
    if XMLNode.ChildNodes.Nodes[i].NodeName='Read' then
      XMLNode.ChildNodes.Nodes[i].NodeValue:='Y';
   XMLDoc1.SaveToFile(ExtractFilePath(Application.ExeName)+'Feed\'+XMLFileName+'.xml');
   XMLDoc1.Free;
   for i:=0 to ListView1.Items.Count-1 do
     if ListView1.Items.Item[i].ImageIndex=1 then
        j:=j+1

⌨️ 快捷键说明

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