事件为什么不触发呀?急(在线等)

Everest 2003-10-21 10:33:12
各位大虾,请帮我看看这段程序怎么不触发事件?谢谢!
unit ThreadSendInfo;

interface

uses
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.
...全文
71 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hmzgz81 2003-10-21
  • 打赏
  • 举报
回复
看看delphi消息

http://expert.csdn.net/Expert/topic/2278/2278663.xml?temp=1.115054E-02
Everest 2003-10-21
  • 打赏
  • 举报
回复
可以帮我改一下程序吗??是在哪儿出的问题?
chl_ccssddnn 2003-10-21
  • 打赏
  • 举报
回复
你没有定义由什么消息来触发你的事件啊!
如果想使用,按你的程序,就是调用这个procedure了。
你应该看看delphi中消息处理方面的资料,你的问题就基本可以解决了
Everest 2003-10-21
  • 打赏
  • 举报
回复
up
Everest 2003-10-21
  • 打赏
  • 举报
回复
大家帮帮我,帮我改写一下,能够调用!!谢谢!

5,379

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧