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

📄 search_frm.pas

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

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls,
  JvExComCtrls, JvComCtrls, JvCheckTreeView,cxTL,uOpml,uFeed,MProperties;

type
  TfmSearch = class(TForm)
    Label1: TLabel;
    Button1: TButton;
    AutoCloseBox: TCheckBox;
    Button4: TButton;
    CheckTreeView1: TJvCheckTreeView;
    Edit1: TEdit;
    procedure FormShow(Sender: TObject);
    procedure CheckTreeView1CustomDrawItem(Sender: TCustomTreeView;
      Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
    procedure Button1Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure AutoCloseBoxClick(Sender: TObject);
  private
    root:TTreeNode;
    procedure LoadToTree(rNode:TTreeNode;sNode:TcxTreeListNode);
    procedure Search(cnode:TTreeNode);
    procedure SearchFeedItem(FeedItem:TFeedItem);

    { Private declarations }
  public
    { Public declarations }
  end;

var
  fmSearch: TfmSearch;

implementation

uses
 uMain,uHTMLMessage,FastStrings,FastStringFuncs,uConstants,uLocalRSS;

{$R *.dfm}


procedure TfmSearch.LoadToTree(rNode:TTreeNode;sNode:TcxTreeListNode);
var i:Integer;
  cnode:TTreeNode;
begin
  for i := 0 to sNode.Count - 1 do    // Iterate
    begin
      cnode := CheckTreeView1.Items.AddChildObject(rNode,sNode.Items[i].Texts[0],TFeedItem(sNode.Items[i].Data));
      if sNode.Items[i].HasChildren then
        LoadToTree(cnode,sNode.Items[i]);
    end;    // for
end;


procedure TfmSearch.FormShow(Sender: TObject);
var i:Integer;
  cnode:TTreeNode;
begin
  CheckTreeView1.Items.Clear;
  with MainWindow do
  begin
    root := CheckTreeView1.Items.AddObject(nil,ChannelNode.Texts[0],ChannelNode);
    for i := 0 to ChannelNode.Count - 1 do    // Iterate
    begin
      cnode := CheckTreeView1.Items.AddChildObject(root,ChannelNode.Items[i].Texts[0],TFeedItem(ChannelNode.Items[i].Data));
      if ChannelNode.Items[i].HasChildren then
        Self.LoadToTree(cnode,ChannelNode.Items[i]);
    end;    // for
  end;
  CheckTreeView1.SetChecked(root,true);
  root.Expand(false);
  AutoCloseBox.Checked := gProperties.AutoCloseSearchWin;
end;

procedure TfmSearch.CheckTreeView1CustomDrawItem(Sender: TCustomTreeView;
  Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
var i:Integer;
begin
  if Node.HasChildren then
  begin
    for i := 0 to Node.Count - 1 do    // Iterate
     CheckTreeView1.SetChecked(Node.Item[i],CheckTreeView1.GetChecked(Node));
  end;

end;

procedure TfmSearch.Button1Click(Sender: TObject);
var
  tnode:TcxTreeListNode;
  otl:TOutlineType;
  FileName:string;
begin
  if Edit1.Text = '' then
  begin
    HTMLMessage('Information','Please type the words that you want to search .',false);
    Exit;
  end;
  MainWindow.cxTreeList1.Clear;

  Search(root);
  MainWindow.Caption := 'RssNavigator - Search result ['+Edit1.Text+']';
  if MainWindow.cxTreeList1.Count=0 then
     HTMLMessage('Information','No matchs found for Search string :"<b>'+Edit1.Text+'</b>" ! '
                 + 'Please type other string and try again !',false)
  else
    if AutoCloseBox.Checked then
      Close;
end;

procedure TfmSearch.Search(cnode:TTreeNode);
var i:Integer;
begin
  for i := 0 to cnode.Count - 1 do    // Iterate
  begin
    if (CheckTreeView1.GetChecked(cnode.Item[i]))and(TFeedItem(cnode.Item[i].Data).Outline.Type_<>'folder') then
      SearchFeedItem(TFeedItem(cnode.Item[i].Data));
    if cnode.Item[i].HasChildren then
      Search(cnode.Item[i]);
  end;    // for
end;

procedure TfmSearch.SearchFeedItem(FeedItem:TFeedItem);
var
  node:TcxTreeListNode;
  item:TLocalRssItem;
  i,j:Integer;
  HTML:WideString;
begin
  for i := 0 to FeedItem.Rss.Items.Count - 1 do    // Iterate
  with MainWindow do
  begin
    item:= FeedItem.Rss.Items.Item[i];
    if (Pos(Edit1.Text,item.Title)>0) or (Pos(Edit1.Text,item.Description)>0) then
    begin
      if not item.Delete then
      with cxTreeList1.Add do
      begin
        Data:=TLocalRssItem(item);
        Values[0]:=item.Readed;
        Values[1]:=item.Flag;
        Texts[2]:=item.Title;
        Texts[3]:=item.Author;
        Texts[4]:=item.PubDate.ToString;
        Texts[5]:=item.Category;
        Texts[6]:=item.ReceivedDate.ToString;
        Texts[7]:=ExtractNonHTML(item.Description);
      end;
    end;
  end;    // for
end;

procedure TfmSearch.Button4Click(Sender: TObject);
begin
  Close;
end;

procedure TfmSearch.AutoCloseBoxClick(Sender: TObject);
begin
  gProperties.AutoCloseSearchWin := AutoCloseBox.Checked;
end;

end.

⌨️ 快捷键说明

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