各位大虾,请帮我看看这段程序怎么不触发事件?谢谢!
unit ThreadSendInfo;interfaceuses
Classes, Forms, ExtCtrls, SysUtils, StdCtrls, OleCtrls, SHDocVw, PubVar, DataFun;
type
TSendInfo = class(TThread)
private
WebSendInfo: TWebBrowser; //
MemoDisplay: TMemo; //
IfExecSend: Boolean; //
SendSign: Integer; //
typSendData: SendData_Type; //
{ Private declarations }
protected procedure WebDocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant); //事件
procedure SendMsg();
procedure DataSearch();
procedure DBSetSign(); procedure Execute; override;
public
constructor Create(AMemo:TMemo);
end;implementation{ Important: Methods and properties of objects in visual components can only be
used in a method called using Synchronize, for example, Synchronize(UpdateCaption); and UpdateCaption could look like, procedure SendInfoThread.UpdateCaption;
begin
Form1.Caption := 'Updated in a thread';
end; }{ SendInfoThread }constructor TSendInfo.Create(AMemo:TMemo);
begin
inherited Create(False);
Priority:= tpIdle; //
FreeOnTerminate:= False; // SendSign:= 0;
IfExecSend:= False;
WebSendInfo:= TWebBrowser.Create(Application);
WebSendInfo.OnDocumentComplete:= WebDocumentComplete; MemoDisplay:= AMemo;
end;procedure TSendInfo.Execute;
begin
{ Place thread code here } while (not Terminated) or (IfExecSend) do
begin
if High(typWaitSendData) < 0 then
Synchronize(DataSearch); if not ifExecSend then
Synchronize(SendMsg);
end;
end;procedure TSendInfo.DataSearch();
begin
if funDBDataSearch <> 0 then
begin
if funConnDB = 0 then
funDBDataSearch
else if funConnDB = 0 then
funDBDataSearch;
end;
end;procedure TSendInfo.SendMsg();
var
StrWeb: WideString;
begin
if (not IfExecSend) and (High(typWaitSendData) >= 0) then
begin
typSendData:= typWaitSendData[High(typWaitSendData)]; StrWeb:= 'http://www.163.com'; IfExecSend:= True; SendSign:= 9;
Synchronize(DBSetSign); SetLength(typWaitSendData,High(typWaitSendData)); WebSendInfo.Navigate(StrWeb);
end;
end;procedure TSendInfo.DBSetSign();
begin
while True do
begin
if funDBSetSign(typSendData.Sm_Num,SendSign) <> 0 then
begin
funConnDB;
end
else
begin
Break;
end;
end;
end;procedure TSendInfo.WebDocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant);
var
ovDoc :OleVariant; //取得网页的内容
ErrMsg :String; //错误信息
begin////这个事件为什么不能触发呢/
ovDoc:=(Sender as TWebBrowser).Document;
if(Pos('该页无法显示',ovDoc.All.item.innerhtml) <> 0) then //网络不通或对方服务器关闭
begin
SendSign:= 0;
ErrMsg:= '网络不通或服务停止,请与系统管理员联系!'
end;// Synchronize(DBSetSign);end;end.
unit ThreadSendInfo;interfaceuses
Classes, Forms, ExtCtrls, SysUtils, StdCtrls, OleCtrls, SHDocVw, PubVar, DataFun;
type
TSendInfo = class(TThread)
private
WebSendInfo: TWebBrowser; //
MemoDisplay: TMemo; //
IfExecSend: Boolean; //
SendSign: Integer; //
typSendData: SendData_Type; //
{ Private declarations }
protected procedure WebDocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant); //事件
procedure SendMsg();
procedure DataSearch();
procedure DBSetSign(); procedure Execute; override;
public
constructor Create(AMemo:TMemo);
end;implementation{ Important: Methods and properties of objects in visual components can only be
used in a method called using Synchronize, for example, Synchronize(UpdateCaption); and UpdateCaption could look like, procedure SendInfoThread.UpdateCaption;
begin
Form1.Caption := 'Updated in a thread';
end; }{ SendInfoThread }constructor TSendInfo.Create(AMemo:TMemo);
begin
inherited Create(False);
Priority:= tpIdle; //
FreeOnTerminate:= False; // SendSign:= 0;
IfExecSend:= False;
WebSendInfo:= TWebBrowser.Create(Application);
WebSendInfo.OnDocumentComplete:= WebDocumentComplete; MemoDisplay:= AMemo;
end;procedure TSendInfo.Execute;
begin
{ Place thread code here } while (not Terminated) or (IfExecSend) do
begin
if High(typWaitSendData) < 0 then
Synchronize(DataSearch); if not ifExecSend then
Synchronize(SendMsg);
end;
end;procedure TSendInfo.DataSearch();
begin
if funDBDataSearch <> 0 then
begin
if funConnDB = 0 then
funDBDataSearch
else if funConnDB = 0 then
funDBDataSearch;
end;
end;procedure TSendInfo.SendMsg();
var
StrWeb: WideString;
begin
if (not IfExecSend) and (High(typWaitSendData) >= 0) then
begin
typSendData:= typWaitSendData[High(typWaitSendData)]; StrWeb:= 'http://www.163.com'; IfExecSend:= True; SendSign:= 9;
Synchronize(DBSetSign); SetLength(typWaitSendData,High(typWaitSendData)); WebSendInfo.Navigate(StrWeb);
end;
end;procedure TSendInfo.DBSetSign();
begin
while True do
begin
if funDBSetSign(typSendData.Sm_Num,SendSign) <> 0 then
begin
funConnDB;
end
else
begin
Break;
end;
end;
end;procedure TSendInfo.WebDocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant);
var
ovDoc :OleVariant; //取得网页的内容
ErrMsg :String; //错误信息
begin////这个事件为什么不能触发呢/
ovDoc:=(Sender as TWebBrowser).Document;
if(Pos('该页无法显示',ovDoc.All.item.innerhtml) <> 0) then //网络不通或对方服务器关闭
begin
SendSign:= 0;
ErrMsg:= '网络不通或服务停止,请与系统管理员联系!'
end;// Synchronize(DBSetSign);end;end.
begin Priority:= tpIdle; //
FreeOnTerminate:= False; // SendSign:= 0;
IfExecSend:= False;
WebSendInfo:= TWebBrowser.Create(Application);
WebSendInfo.OnDocumentComplete:= WebDocumentComplete; MemoDisplay:= AMemo;
inherited Create(False);
end;
改成这样试试