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

📄 usearch.pas

📁 自己写的一个 RSS 阅读器
💻 PAS
字号:
unit uSearch;

interface

uses SysUtils,uLocalRSS,Classes,MSXML2_TLB,uOpml,Dialogs,WinHTTP,ExtCtrls,
     uRssBase,uHTMLMessage,uW3CDTF,ComCtrls,cxtl;

type
  TSearch = class;
  TSearchItem = class;

  TSearch = class(TComponent)
  private
    fItems:TList;
  protected
    function Get_Item(index : integer): TSearchItem;
    function Get_Count(): integer;
    procedure Add(item : TObject);overload;

  public
	  constructor Create(AOnwer:TComponent);
    Destructor Destroy; override;
    function Add(otl:TOutlineType):TSearchItem;overload;
    procedure Delete(Index:integer);overload;
    procedure Delete(SearchItem:TSearchItem);overload;
    property Item[Index: Integer]: TSearchItem read Get_Item;
    property Count :Integer read Get_Count;
    procedure Save;

  end;

  

  TSearchItem = class(TComponent)
  private
    fFeed:TLocalRssFeed;
    fTreeNode:TcxTreeListNode;
    foutline:TOutlineType;
    TmpDoc:IXMLDOMDocument2;

    procedure Set_TreeNode(Value:TcxTreeListNode);
    function Get_Index:integer;
  public
    constructor Create(AOnwer:TComponent;outline:TOutlineType);
    Destructor Destroy; override;
    property Rss:TLocalRssFeed read fFeed write fFeed;
    property Outline:TOutlineType read foutline write foutline;
    property TreeNode:TcxTreeListNode read fTreeNode write Set_TreeNode;

    property Index :Integer read Get_Index;

  end;

implementation

uses MProperties,ActiveX,uConstants,FastStrings,RegExpr,uMain;

constructor TSearch.Create(AOnwer:TComponent);
var i:Integer;
begin
  inherited Create(AOnwer);
  fItems:=TList.Create;
end;
Destructor TSearch.Destroy;
begin
  fItems.Free;
  inherited destroy;
end;
procedure TSearch.Save;
var i:Integer;
begin
  for  i:= 0 to Count - 1 do    // Iterate
  begin
    Item[i].Rss.SaveXml(gProperties.SearchDir + Item[i].Outline.FileName);
  end;
end;
procedure TSearch.Add(item:TObject);
begin
    fItems.Add(item);
end;

function TSearch.Add(otl:TOutlineType):TSearchItem;
var item:TSearchItem;
begin
    item:=TSearchItem.Create(Self,otl);
    fItems.Add(item);
    Result:=item;
end;

procedure TSearch.Delete(index:integer);
var theFileName:string;
  outline:TOutlineType;
  node:IXMLDOMNode;
begin
  theFileName := gProperties.SearchDir+TSearchItem(fItems.Items[Index]).Outline.FileName;
  if FileExists(theFileName) then
    DeleteFile(theFileName);
  node:=TSearchItem(fItems.Items[Index]).Outline.Node ;
  node.parentNode.removeChild(node);
  fItems.Delete(Index);
end;
procedure TSearch.Delete(SearchItem:TSearchItem);
var i:Integer;
begin
  for  i:= 0 to fItems.Count - 1 do    // Iterate
  begin
    if TSearchItem(fItems.Items[i]) = SearchItem then
    begin
      Delete(i);
      Break;
    end;
  end;    // for
end;

function TSearch.Get_Item(Index:integer):TSearchItem;
begin
  Result:= TSearchItem(fItems[index]);
end;
function TSearch.Get_Count:Integer;
begin
  Result:=fItems.Count;
end;




{TSearchItem}
constructor TSearchItem.Create(AOnwer:TComponent;outline:TOutlineType);
var
  doc:IXMLDOMDocument2;
begin
  inherited Create(AOnwer);
  foutline:=outline;
    doc:=CoDOMDocument.Create;

    if not FileExists(gProperties.SearchDir + foutline.FileName) then
      CreateEmptyRssXml(gProperties.SearchDir,foutline.FileName);  //本地rss文件不存在时,创建空白的

    doc.load(gProperties.SearchDir + foutline.FileName);
    if doc.parseError.errorCode<>0 then
    begin
      CreateEmptyRssXml(gProperties.SearchDir,foutline.FileName);  //本地rss文件解析出错时,创建空白的
      doc.load(gProperties.SearchDir + foutline.FileName);
    end;


    fFeed := TLocalRssFeed.Create(self,Doc);
end;

Destructor TSearchItem.Destroy;
begin
  foutline.Free;
  fFeed.Free;
  inherited destroy;
end;

procedure TSearchItem.Set_TreeNode(Value:TcxTreeListNode);
begin
  fTreeNode:=Value;
  if foutline.Type_<>'folder' then
  begin
     fTreeNode.ImageIndex := 8;
     fTreeNode.SelectedIndex := 8;
  end;
end;

function TSearchItem.Get_Index:Integer;
var i:Integer;
begin
  for  i:= 0 to TSearch(Self.Owner).fItems.Count - 1 do    // Iterate
  begin
    if TSearchItem(TSearch(Self.Owner).fItems.Items[i])=Self then
    begin
       Result := i;
       Break;
    end;
  end;    // for
end;

end.

⌨️ 快捷键说明

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