今日、私はS8S8の投稿を見ました。シェルスクリプト、C言語、C ++、VBS、PHP、Perl、Java、C#、それはDelphiバージョンも書きました。 、しかし、いくつかの写真を読んだ後、それらはすべて子供に適していませんでした。
完全なプログラムコード:
//執筆は比較的大まかですが、基本的にダウンロード機能を実現できますので、それほど制御することはできません。
ユニットgetmm;
インタフェース
用途
窓、メッセージ、sysutils、バリアント、クラス、グラフィック、コントロール、フォーム、
ダイアログ、stdctrls、idbasecomponent、idcomponent、idtcpconnection、
idtcpclient、idhttp;
const
url = 'http://www.sergeaura.net/tgp/';
Offi = 192; //ディレクトリ数
offj = 16; //各ディレクトリの最大数
girlpic = 'c:/girlpic/'; //局所的に保存されます
//スレッドクラス
タイプ
tgetmm = class(tthread)
保護されています
fmmurl:string;
fdestpath:string;
fsubj:string;
手順実行;オーバーライド;
公共
Constructor Create(MMURL、DESTPATH、SUBJ:STRING);
終わり;
タイプ
tform1 = class(tform)
Button1:Tbutton;
Button2:tbutton;
MEMO1:TMEMO;
idhttp1:tidhttp;
チェックボックス:tcheckbox;
手順button1click(sender:tobject);
手順button2click(sender:tobject);
プライベート
{プライベート宣言}
rgetmm:tthread;
手順getmmthread(mmurl、destpath、subj:string);
公共
{公開宣言}
終わり;
var
form1:tform1;
実装
{$ r *.dfm}
//プロセスをダウンロードします
手順tform1.button1click(sender:tobject);
var
I、J:整数;
subi、subj、cururl、destpath:string;
strm:tmemorystream;
始める
memo1.lines.clear;
//ディレクトリを作成します
DirectoryExists(Girlpic)ではない場合
mkdir(girlpic);
試す
strm:= tmemorystream.create;
i:= 1 to offiの場合
始める
j:= 1からoffjの場合
始める
if(i <10)then
subi:= '00'+inttostr(i)
else if(i> 9)および(i <100)then
subi:= '0'+inttostr(i)
else subi:= inttostr(i);
if(j> 9)
subj:= inttostr(j)
else subj:= '0'+inttostr(j);
cururl:= url+subi+'/images/';
DestPath:= girlpic+subi+'/';
DirectoryExists(DestPath)ではない場合
Forcedirectories(DestPath);
//スレッドを使用すると、速度をn倍以上上げることができます
Checkbox1がチェックされている場合
始める
getmmthread(cururl、destpath、subj);
睡眠(500);
ENSEを終了します
//スレッドは使用されていません
始める
試す
strm.clear;
idhttp1.get(cururl+subj+'。jpg'、strm);
strm.savetofile(destpath+subj+'。jpg');
memo1.lines.add(cururl+'download ok!');
strm.clear;
idhttp1.get(cururl+'tn _'+subj+'。jpg'、strm);
strm.savetofile(destpath+'tn _'+subj+'。jpg');
memo1.lines.add(cururl+'download ok!');
を除外する
memo1.lines.add(cururl+'download error!');
終わり;
終わり;
終わり;
終わり;
memo1.lines.add( 'all ok!');
ついに
strm.free;
終わり;
終わり;
手順tform1.button2click(sender:tobject);
始める
近い;
終わり;
{tgetmm}
Constructor tgetmm.create(mmurl、destpath、subj:string);
始める
fmmurl:= mmurl;
fdestPath:= DestPath;
fsubj:= subj;
継承されたcreate(false);
終わり;
手順tgetmm.execute;
var
strm:tmemorystream;
idgetmm:tidhttp;
Destfile:文字列;
始める
試す
strm:= tmemorystream.create;
idgetmm:= tidhttp.create(nil);
試す
destfile:= fdestpath+fsubj+'。jpg';
Fileexists(Destfile)ではない場合
始める
strm.clear;
idgetmm.get(fmmurl+fsubj+'。jpg'、strm);
strm.savetofile(destfile);
終わり;
destfile:= fdestpath+'tn _'+fsubj+'。jpg';
Fileexists(Destfile)ではない場合
始める
strm.clear;
idgetmm.get(fmmurl+'tn _'+fsubj+'。jpg'、strm);
strm.savetofile(destfile);
終わり;
を除外する
終わり;
ついに
strm.free;
idgetmm.free;
終わり;
終わり;
手順tform1.getmmthread(mmurl、destpath、subj:string);
始める
rgetmm:= tgetmm.create(mmurl、destpath、subj);
終わり;
終わり。