📄 fm_rss.pas
字号:
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 + -