?? websearchholder.pas
字號:
{ used in demo3
demo3 中我獨立出了這個單元專門封裝了一個TWebSearchHolder類來直接從最上層控制搜索寶的基本操作
這樣邏輯更為清晰,層次更加明了,main單元中的代碼也簡化了,無需再定義并實現對應的事件處理函數
因為所有這些都在該類中做了。
你可以在main單元的FormCreate中看到該類的初始化
}
unit WebSearchHolder;
interface
uses
SysUtils, ComCtrls, StdCtrls, Classes, Forms, CheckLst,
ThreadPool, ThreadTask, MyHTTPtask, MyThreadPool,
ActnList, Define;
type
TWebSearchHolder = class
private
_WebSearchPool : TWebSearchPool;
protected
function LoadWebSearchTask(TaskList : TThreadList) : Integer;
procedure WebSearchPoolDone(Sender : TObject);
procedure WebSearchPoolStop(Sender : TObject);
procedure Terminate;
public
_EngineChkLst : TCheckListBox;
_OnTerminate : TNotifyEvent;
H_KEYWORD : string;
H_PAGENUM : Integer;
H_TERM_PRO_BAR : TProgressBar;
H_PROGRESS_BAR : TProgressBar;
H_OnSrhRetFind : TSrhRetFindEvent;
//
_AC_START : TAction;
_AC_PAUSE : TAction;
_AC_GOON : TAction;
_AC_STOP : TAction;
//
procedure SetActStatus(Status : TBtnStatEx);
procedure Start;
procedure Pause;
procedure Goon;
procedure Stop;
constructor Create;
destructor Destroy;override;
end;
implementation
uses
HTTPutil;
constructor TWebSearchHolder.Create;
begin
inherited;
H_PAGENUM := 10;
end;
destructor TWebSearchHolder.Destroy;
begin
if _WebSearchPool<>nil then
begin
_WebSearchPool.Stop;
FreeAndNil(_WebSearchPool);
end;
inherited;
end;
procedure TWebSearchHolder.SetActStatus(Status : TBtnStatEx);
procedure SetAct(Act : TAction; Enable : Boolean);
begin
if Act <> nil then Act.Enabled := Enable;
end;
begin
SetAct(_AC_START,ABtnEnabEx[Integer(Status),Integer(btxStart)]);
SetAct(_AC_GOON ,ABtnEnabEx[Integer(Status),Integer(btxGoon )]);
SetAct(_AC_STOP ,ABtnEnabEx[Integer(Status),Integer(btxStop )]);
SetAct(_AC_PAUSE,ABtnEnabEx[Integer(Status),Integer(btxPause)]);
end;
procedure TWebSearchHolder.WebSearchPoolDone(Sender : TObject);
begin
FreeAndNil(_WebSearchPool);
SetActStatus(bsxNull);
Terminate;
end;
procedure TWebSearchHolder.WebSearchPoolStop(Sender : TObject);
begin
FreeAndNil(_WebSearchPool);
end;
procedure TWebSearchHolder.Terminate;
begin
if Assigned(_OnTerminate) then
_OnTerminate(Self);
end;
function TWebSearchHolder.LoadWebSearchTask(TaskList : TThreadList): Integer;
var
i : Integer;
Param,P : PWebEngineObj;
begin
Result := 0;
with _EngineChkLst do
for i:=Count-1 downto 0 do
begin
if Checked[i] then
begin
GetMem(Param,SizeOf(TWebEngineObj));
P := PWebEngineObj(Items.Objects[i]);
Param^.Site := P^.Site ;
LoadTask(i,Param,TaskList);
Inc(Result);
end;
end;
end;
procedure TWebSearchHolder.Start;
begin
if _WebSearchPool <> nil then exit;
SetActStatus(bsxRunning);
_WebSearchPool := TWebSearchPool.Create;
with _WebSearchPool do
begin
P_KEY_WORD := H_KEYWORD;
P_PAGE_NUM := H_PAGENUM;
P_OnSrhRetFind := H_OnSrhRetFind;
_OnForceStop := WebSearchPoolStop;
_OnTerminate := WebSearchPoolDone;
_THREAD_COUNT := LoadWebSearchTask(_TASK_LIST);
if _THREAD_COUNT=0 then
begin
MsgBox('你必須至少選擇一個引擎!',0);
SetActStatus(bsxNull);
FreeAndNil(_WebSearchPool);
Exit;
end;
Start;
end;
end;
procedure TWebSearchHolder.Pause;
begin
if _WebSearchPool=nil then exit;
SetActStatus(bsxPaused);
_WebSearchPool.Pause;
end;
procedure TWebSearchHolder.Goon;
begin
if _WebSearchPool=nil then exit;
SetActStatus(bsxRunning);
_WebSearchPool.Goon;
end;
procedure TWebSearchHolder.Stop;
begin
if _WebSearchPool=nil then exit;
SetActStatus(bsxNull);
_WebSearchPool.Stop;
end;
end.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -