📄 usearch.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 + -