本人想用户点打开哪个图片,就用线程在网上下载那张图片下来如果那张图片没有下载下来时,用户点下一张图片,则把前面的线程关掉,然后再启动一个线程下载这张。。以下是本人写的代码。。没有实现把前面的线程关掉的功能,请教线程高手。。这个怎么处理?
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
IdTCPClient, IdHTTP, StdCtrls,JPEG;type
TForm1 = class(TForm)
Panel6: TPanel;
Image1: TImage;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;type
Tmythread=class(Tthread)
private
Image:TImage;
URL:string;
protected
procedure execute;override;
procedure LoadPictureFromWeb;
public
constructor create(suspended:boolean;var Image1:TImage;WebURL:string);
end;var
Form1: TForm1;implementation{$R *.dfm}
constructor Tmythread.create(suspended:boolean;var Image1:TImage;WebURL:string);
begin
inherited create(suspended);
Image:=Image1;
URL:=WebURL;
FreeOnTerminate:=true;
end;procedure Tmythread.execute;
begin
LoadPictureFromWeb;
end;procedure Tmythread.LoadPictureFromWeb;
var
Stream:TMemoryStream;
IdHTTP: TIdHTTP;
jpg:TJPEGImage;
begin
try
Stream:=TMemoryStream.Create;
IdHTTP:=TIdHTTP.Create(nil);
IdHTTP.Get(URL,Stream); try
Stream.Position:=0;
jpg:=TJPEGImage.Create;
jpg.LoadFromStream(Stream);
Image.Picture.Assign(jpg);
Image.BringToFront;
except
end;
finally
Stream.Free;
IdHTTP.Free;
end;
end;procedure TForm1.Button1Click(Sender: TObject);
var
mythread:Tmythread;
begin
mythread:=Tmythread.create(false,Image1,'要打开的图片.jpg');
end;end.
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
IdTCPClient, IdHTTP, StdCtrls,JPEG;type
TForm1 = class(TForm)
Panel6: TPanel;
Image1: TImage;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;type
Tmythread=class(Tthread)
private
Image:TImage;
URL:string;
protected
procedure execute;override;
procedure LoadPictureFromWeb;
public
constructor create(suspended:boolean;var Image1:TImage;WebURL:string);
end;var
Form1: TForm1;implementation{$R *.dfm}
constructor Tmythread.create(suspended:boolean;var Image1:TImage;WebURL:string);
begin
inherited create(suspended);
Image:=Image1;
URL:=WebURL;
FreeOnTerminate:=true;
end;procedure Tmythread.execute;
begin
LoadPictureFromWeb;
end;procedure Tmythread.LoadPictureFromWeb;
var
Stream:TMemoryStream;
IdHTTP: TIdHTTP;
jpg:TJPEGImage;
begin
try
Stream:=TMemoryStream.Create;
IdHTTP:=TIdHTTP.Create(nil);
IdHTTP.Get(URL,Stream); try
Stream.Position:=0;
jpg:=TJPEGImage.Create;
jpg.LoadFromStream(Stream);
Image.Picture.Assign(jpg);
Image.BringToFront;
except
end;
finally
Stream.Free;
IdHTTP.Free;
end;
end;procedure TForm1.Button1Click(Sender: TObject);
var
mythread:Tmythread;
begin
mythread:=Tmythread.create(false,Image1,'要打开的图片.jpg');
end;end.
解决方案 »
- DSPack播放压缩视频 SampleGrabber无法截图
- 如何用webbrowser控制这个页面的表单提交
- 数据同步 想用导入 导出 成文本文件,实现数据同步 如何做?
- FTP自动更新程序,怎样把ini文件集成到程序内部。(在线等)
- tadoquery.recno的取值问题
- 一个关于比较日期大小的问题,急!!! 100分
- delphi在开发网站上有什么好?,我用了一段时间,感觉好痛苦哦,没有李维叔叔在《电子商务篇》的说的好哦
- 请问如何使用glscene实现颜色渐变?
- 关于ERP。 300分 ->you!(分开给)
- 请问如何让一台拨号上网的计算机断线?
- 我想画网桥或者其他网络设备,用什么软件好画并且不难看啊?
- ctrl+F查询框使用问题
var
mythread:Tmythread;
做全局变量,你另外再放个方法出来,Image1,'要打开的图片.jpg'); 做参数传进去,每次你只管调用就可以了,最后程序退出的时候释放
执行完毕后会自动释放的,不用你手动写代码释放了