我在IdHTTP1WorkBegin,IdHTTP1Work,IdHTTP1WorkEnd中实现一个打开网上的文件的过程中显示进程条的代码,如果我去掉“idhttp1:=tidhttp.Create(nil);”以及“idhttp1.Disconnect;”和“idhttp1.Free;”这几句,进程条可以正常显示,但加上这几句后,进程条就不出现了,请问是何原因?procedure Tfm.DblClick(Sender: TObject);
var
sFileName: string;
MyStream: TMemoryStream;
begin
sFileName := 'http://www.xxx.cn/' + DBReport.Fields[0].Text; IdAntiFreeze1.OnlyWhenIdle:=False;
MyStream:=TMemoryStream.Create; try
idhttp1:=tidhttp.Create(nil);
idhttp1.HandleRedirects:=true;
IdHTTP1.Get(widestring(FormatURL(sFileName)), MyStream);
except
Application.MessageBox('打开文件出错,请检查网络!','错误', MB_OK or MB_ICONERROR);
MyStream.Free;
Exit;
end; MyStream.Free;end;procedure TfmInvestReport.IdHTTP1WorkBegin(Sender: TObject;
AWorkMode: TWorkMode; const AWorkCountMax: Integer);
begin
ProgressBar1.Visible := true;
ProgressBar1.Max := AWorkCountMax;
ProgressBar1.Min := 0;
ProgressBar1.Position := 0;
end;procedure TfmInvestReport.IdHTTP1Work(Sender: TObject;
AWorkMode: TWorkMode; const AWorkCount: Integer);
begin
ProgressBar1.Position := ProgressBar1.Position+AWorkCount;
end;procedure TfmInvestReport.IdHTTP1WorkEnd(Sender: TObject;
AWorkMode: TWorkMode);
begin
ProgressBar1.Visible := False;
idhttp1.Disconnect; // 断开连接
idhttp1.Free; // 释放
end;
var
sFileName: string;
MyStream: TMemoryStream;
begin
sFileName := 'http://www.xxx.cn/' + DBReport.Fields[0].Text; IdAntiFreeze1.OnlyWhenIdle:=False;
MyStream:=TMemoryStream.Create; try
idhttp1:=tidhttp.Create(nil);
idhttp1.HandleRedirects:=true;
IdHTTP1.Get(widestring(FormatURL(sFileName)), MyStream);
except
Application.MessageBox('打开文件出错,请检查网络!','错误', MB_OK or MB_ICONERROR);
MyStream.Free;
Exit;
end; MyStream.Free;end;procedure TfmInvestReport.IdHTTP1WorkBegin(Sender: TObject;
AWorkMode: TWorkMode; const AWorkCountMax: Integer);
begin
ProgressBar1.Visible := true;
ProgressBar1.Max := AWorkCountMax;
ProgressBar1.Min := 0;
ProgressBar1.Position := 0;
end;procedure TfmInvestReport.IdHTTP1Work(Sender: TObject;
AWorkMode: TWorkMode; const AWorkCount: Integer);
begin
ProgressBar1.Position := ProgressBar1.Position+AWorkCount;
end;procedure TfmInvestReport.IdHTTP1WorkEnd(Sender: TObject;
AWorkMode: TWorkMode);
begin
ProgressBar1.Visible := False;
idhttp1.Disconnect; // 断开连接
idhttp1.Free; // 释放
end;
解决方案 »
- 有没有 带复选框的treeView,或者怎么样才能让treeView带有复选框
- 请教各位,如何在桌面右键菜单上加入自己的菜单?见图
- 最简单我也不会,怎样在一个函数或过程中调用一个button的click事件?
- 高分求一时钟指针的走法?
- 才下了DELPHI7,怎么才144兆,不是说有两张光盘那么多啊?安起后用会不会有问题?用过的给点建议!
- 我是只菜鸟,需要帮助
- 急急!求教各位大侠:关于跨操作系统windows 不同版本运行问题。
- 用installshield for delphi 6.0 发布程序该如何发?
- 关于UDP,毕业设计,紧急呼救!!!!!!!!!!!!
- delphi 获取谷歌浏览器的通知提醒
- TIdHttp与TIdHttpServer一起用怎么用?
- Delphi 中 TIndUDPServer 关闭时报错 用Active := False 关闭.
1.如果 idhttp1 是窗体上的组件,那么 idhttp1:=tidhttp.Create(nil); 这一句将造成内存泄漏。
2.因为 idhttp1 是用代码新创建的,它的 OnWork、OnWorkBegin、OnWorkEnd 都是等于 nil 的,
还没有被赋值,自然这三个事件过程的代码不会被执行。
idhttp1:=tidhttp.Create(nil);
idhttp1.Disconnect; // 断开连接
idhttp1.Free; 2.如果楼主确实想要动态创建 TIdHTTP ,那么加入以下代码
//声明
private
idhttp1: TIdHTTP;//修改
try
idhttp1:=tidhttp.Create(nil);
//加入以下三句
idhttp1.OnWorkBegin := IdHTTP1WorkBegin;
idhttp1.OnWork := IdHTTP1Work;
idhttp1.OnWorkEnd := IdHTTP1WorkEnd; idhttp1.HandleRedirects:=true;
IdHTTP1.Get(widestring(FormatURL(sFileName)), MyStream);
except
Application.MessageBox('打开文件出错,请检查网络!','错误', MB_OK or MB_ICONERROR);
MyStream.Free;
Exit;
end;