Öncelikle programla yapılan işlem şudur.
Kullanıcının hesabına giriyorsunuz yani profiline fotoğraflar kısmına giriyorsunuz.
Sayfayı sonuna kadar indiriyorsunuz. Yani tüm fotoları küçük kutucuklar halinde görüyorsunuz.
Bu sırada html dosyası sürekli güncelleniyor ve büyüyor.
Sonra resimler bitince kodları hafızaya al butonuna basıyorsunuz.Bu işlem bir kaç ms. sürüyor html boyutuna göre. Daha sonra linkleri al tuşuna basıyoruz. Burada çekilen html dosyasını parçalara ayırıyor ve içinden image dosyalarının linklerini çekiyor.
Bu işlem image sayısına göre 5 ms ile 20 sn arasında değişiyor. Sonrasında listelenenleri indire basıyoruz ve kaydedeceğimiz dizini seçiyoruz. Ve işlemi başlatıyoruz. Olay Bu kadar :)
programda takılmalar olabilir indirirken programı yazarken multi threading olarak yazmamıştım dolayısıyla tek program tek işlem yapıyor. indirme işlemi internet bağlantınıza göre değişebilir. Dosyaları ":large" olarak indiriyor. kaydederken tabiki sistemdeki uzantıya göre kaydediyor. Dolayısıyla büyük boyutlu kaydediyor.
Paylaşacağım Kodlarda programın sonraki versiyonunun kodları. yani program başka bir exe dosyası ile indirme işlemi yaptırabiliyor. Önceki versiyonu kaydetmemişim. bu versiyonuda derlemedim henüz. Bundan dolayı. ilk versiyonunun derlenmiş exe dosyasını ve son versiyonun kodlarını paylaşıyorum.
isteyen bu kodları kullansın isteyen ise sadece tek thread li exe dosyasını kullansın :)
Tek threadli exe dosyası
Burası çift exeli form1
Kullanıcının hesabına giriyorsunuz yani profiline fotoğraflar kısmına giriyorsunuz.
Sayfayı sonuna kadar indiriyorsunuz. Yani tüm fotoları küçük kutucuklar halinde görüyorsunuz.
Bu sırada html dosyası sürekli güncelleniyor ve büyüyor.
Sonra resimler bitince kodları hafızaya al butonuna basıyorsunuz.Bu işlem bir kaç ms. sürüyor html boyutuna göre. Daha sonra linkleri al tuşuna basıyoruz. Burada çekilen html dosyasını parçalara ayırıyor ve içinden image dosyalarının linklerini çekiyor.
Bu işlem image sayısına göre 5 ms ile 20 sn arasında değişiyor. Sonrasında listelenenleri indire basıyoruz ve kaydedeceğimiz dizini seçiyoruz. Ve işlemi başlatıyoruz. Olay Bu kadar :)
programda takılmalar olabilir indirirken programı yazarken multi threading olarak yazmamıştım dolayısıyla tek program tek işlem yapıyor. indirme işlemi internet bağlantınıza göre değişebilir. Dosyaları ":large" olarak indiriyor. kaydederken tabiki sistemdeki uzantıya göre kaydediyor. Dolayısıyla büyük boyutlu kaydediyor.
Paylaşacağım Kodlarda programın sonraki versiyonunun kodları. yani program başka bir exe dosyası ile indirme işlemi yaptırabiliyor. Önceki versiyonu kaydetmemişim. bu versiyonuda derlemedim henüz. Bundan dolayı. ilk versiyonunun derlenmiş exe dosyasını ve son versiyonun kodlarını paylaşıyorum.
isteyen bu kodları kullansın isteyen ise sadece tek thread li exe dosyasını kullansın :)
Tek threadli exe dosyası
Burası çift exeli form1
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, OleCtrls, SHDocVw, ComCtrls, ExtActns, FileCtrl, FlCtrlEx,
cxShellBrowserDialog, IEDownload, clMultiDC, clSingleDC, clDownLoader,
clMultiDownLoader,clWinInet, clDC, clDCUtils, sEdit, IdBaseComponent,
IdComponent, IdTCPConnection, IdTCPClient, IdHTTP, IdIPWatch, IdSSLOpenSSL,
clHtmlParser,HtmlParser, DomCore,mshtml,activex, ExtCtrls, sSkinManager,
sListBox, sMemo, sSplitter, sButton, sPanel;
type
TForm1 = class(TForm)
RichEdit1: TRichEdit;
cxShellBrowserDialog1: TcxShellBrowserDialog;
clDownLoader1: TclDownLoader;
IdHTTP1: TIdHTTP;
Panel1: TPanel;
Label1: TLabel;
IdIPWatch1: TIdIPWatch;
clHtmlParser1: TclHtmlParser;
Panel2: TPanel;
Button6: TButton;
Button2: TButton;
Button7: TButton;
Button5: TButton;
Button3: TButton;
Panel3: TPanel;
sEdit1: TsEdit;
Button4: TButton;
Button1: TButton;
Label2: TLabel;
Panel4: TPanel;
WebBrowser1: TWebBrowser;
Button8: TButton;
sSkinManager1: TsSkinManager;
sEdit2: TsEdit;
sListBox1: TsListBox;
sMemo1: TsMemo;
sSplitter1: TsSplitter;
sButton1: TsButton;
sButton2: TsButton;
panel5: TsPanel;
sskins: TsMemo;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure indydownload();
procedure logcu(islem:string);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
function zaman(bas,son:cardinal):string;
procedure siradaki();
procedure clDownLoader1ProcessCompleted(Sender: TObject);
procedure clDownLoader1StatusChanged(Sender: TObject;
Status: TclProcessStatus);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure FormCreate(Sender: TObject);
procedure clDownLoader1Error(Sender: TObject; const Error: string;
ErrorCode: Integer);
procedure Button6Click(Sender: TObject);
procedure IdIPWatch1Status(ASender: TObject; const AStatus: TIdStatus;
const AStatusText: string);
procedure Button7Click(Sender: TObject);
procedure IdHTTP1WorkEnd(ASender: TObject; AWorkMode: TWorkMode);
procedure FormResize(Sender: TObject);
procedure Panel2Resize(Sender: TObject);
procedure Button8Click(Sender: TObject);
procedure Panel3Resize(Sender: TObject);
procedure sButton1Click(Sender: TObject);
procedure sButton2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
sira:integer=0;
tumsayfa:string;
islemci:integer=0;
ricbas:integer=0;
tekrar:integer;
basla,sonsure:cardinal;
resourcestring
cOperationIsInProgress = 'Operation is in progress';
cUnknownError = 'Unknown error, code = %d';
cResourceAccessError = 'HTTP resource access error occured, code = %d';
cDataStreamAbsent = 'The data source stream is not assigned';
cExtendedErrorInfo = 'Additional info';
cRequestTimeOut = 'Request timeout';
cDataValueName = 'Data';
implementation
uses Unit3;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
if sEdit1.Text='' then
begin
WebBrowser1.Navigate('www.twitter.com/') ;
logcu('www.twitter.com adresine giriş yapıldı');
end
else
begin
WebBrowser1.Navigate('www.twitter.com/'+sedit1.Text);
logcu('www.twitter.com/'+sedit1.Text+' adresine giriş yapıldı');
logcu(sedit1.Text+' isimli profil açıldı');
end;
panel5.Visible:=false;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
serhad:string;
begin
basla:=Gettickcount;
if WebBrowser1.ReadyState=READYSTATE_COMPLETE then
begin
////richedit1.Text:=WebBrowser1.OleObject.document.body.innerHTML;
tumsayfa:=WebBrowser1.OleObject.document.body.innerHTML;
sonsure:=gettickcount;
logcu(WebBrowser1.LocationURL+' sayfası kaynak kodları sisteme alındı '+zaman(basla,sonsure));
button3.Enabled:=true;
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
var
startTime,endTime,elapsed: cardinal;
yer,uzunluk,toplam,poz,sira:integer;
nesne,ric,son,hafiza:string;
z,k: Integer;
begin
slistbox1.Items.Clear;
Button7.Enabled:=true;
son:='';
starttime:=GetTickCount;
Application.ProcessMessages;
logcu('linkler sisteme çekiliyor');
sleep(500);
nesne:='data-resolved-url-large="https://pbs.twimg.com/media/' ;
// uzunluk:=Length(tumsayfa);
///z:=1;
///sira:=0;
poz:=pos(nesne,tumsayfa) ;
/// poz:=RichEdit1.FindText(nesne,0,length(richedit1.Text),[stMatchCase]) ;
while poz<>0 do
begin
Application.ProcessMessages;
if islemci=1 then
begin
logcu('listeleme islemi iptal edildi');
islemci:=0;
exit;
end;
hafiza:=(Copy(tumsayfa,poz+25,53)) ;
// RichEdit1.SelStart:=poz+25;
// RichEdit1.SelLength:=53;
// if son<> RichEdit1.SelText then
if son<>hafiza then
begin
Application.ProcessMessages;
slistbox1.Items.Add(hafiza);
end;
/// sira:=poz;
// ric:= richedit1.Text ;
toplam:=poz+77;
tumsayfa:=(copy(tumsayfa,poz+77,length(tumsayfa)-77));
// RichEdit1.Text:=ric;
son:= hafiza;
poz:=pos(nesne,tumsayfa)
/// poz:=RichEdit1.FindText(nesne,RichEdit1.SelStart+1,length(richedit1.Text),[stMatchCase]) ;
end;
endtime:=GetTickCount;
logcu(' ['+zaman(startTime,endTime)+ '] sürede ['+inttostr(sListBox1.Items.Count)+'] adet nesne Listelendi');
Button6.Enabled:=true;
end;
procedure TForm1.Button4Click(Sender: TObject);
var
adi,arana:string;
sirasi,s:integer;
begin
WebBrowser1.Navigate('https://www.twitter.com/'+sedit1.Text+'/media') ;
logcu(sedit1.Text+' isimli profil resimleri görüntülendi');
panel5.Visible:=false;
end;
procedure TForm1.Button5Click(Sender: TObject);
var
adi,path:string;
i,son,islem:integer;
url:string;
begin
basla:=gettickcount;
sira:=0;
cxShellBrowserDialog1.Execute;
sEdit2.Text:=cxShellBrowserDialog1.Path;
logcu(sedit2.Text+' dizinine dosyalar indirilecek');
siradaki;
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
tekrar:=0;
basla:=gettickcount;
sira:=0;
cxShellBrowserDialog1.Execute;
sedit2.Text:=cxShellBrowserDialog1.Path;
indydownload;
end;
procedure TForm1.Button7Click(Sender: TObject);
begin
islemci:=1;
Button7.Enabled:=false;
end;
procedure TForm1.Button8Click(Sender: TObject);
var
adres: string;
begin
panel5.Visible:=false;
if WebBrowser1.ReadyState=READYSTATE_COMPLETE then
begin
adres:= WebBrowser1.LocationURL ;
WebBrowser1.Navigate(adres+'/media');
end;
end;
procedure tform1.indydownload();
var
s: TStream;
i:integer;
adi:string;
secilen:integer;
iohand2:TIdHTTP;
IOHandler:TIdSSLIOHandlerSocketOpenSSL;
begin
IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
idHTTP1 := TIdHTTP.Create(nil);
idHTTP1.IOHandler := IOHandler;
idHTTP1.ReadTimeout := 0;
if sira<>sListBox1.Items.Count-1 then
begin
Application.ProcessMessages;
adi:=Copy ( sListBox1.Items[sira],29 ,19 );
IdHTTP1.HandleRedirects := True;
if FileExists(sedit2.Text+'/'+adi) then
begin
tekrar:=tekrar+1;
sira:=sira+1;
logcu('['+inttostr(sira)+'] tekrar eden dosya');
indydownload;
end
else
begin
s := TFileStream.Create(sedit2.Text+'/'+adi, fmCreate);
try
begin
IdHttp1.Get(slistbox1.Items[sira], s);
sira:=sira+1;
s.Free;
logcu(inttostr(sira)+' ['+slistbox1.Items[sira] +'] indiriliyor..');
indydownload;
end;
except
on e: Exception do
begin
secilen:= MessageDlg('İndirilirken hata oluştu dosya tekrar denensin mi (evet)?'#13' Sonraki dosyaya geçilsin mi (hayır)? '#13' İndirme iptal (iptal)?',mtWarning, [mbYes,mbNo,mbCancel],0) ;
logcu('['+slistbox1.Items[sira] +'] dosyası indirilirken hata alındı...');
if secilen=6 then
begin
logcu('['+slistbox1.Items[sira] +'] dosyası tekrar deneniyor');
sira:=sira;
s.Free;
indydownload;
end;
if secilen=7 then
begin
logcu('['+slistbox1.Items[sira] +'] iptal edildi sonraki dosya alınıyor');
sira:=sira+1;
s.Free;
indydownload;
end;
if secilen=2 then
begin
s.Free;
logcu('indirme iptal edildi');
exit;
end;
end;
end;
end ;
end
else
begin
sonsure:=gettickcount;
logcu('tüm dosyalar indirildi '+ zaman(basla,sonsure));
logcu('-----------İndirme Raporu----------');
logcu('Toplam Listelenen : '+inttostr(slistbox1.Items.Count)) ;
logcu('İndirilen : '+inttostr(slistbox1.Items.Count-tekrar-1));
logcu('Önceden indirilmiş veya Paylaşılmış : '+inttostr(tekrar+1));
end;
end;
procedure TForm1.clDownLoader1Error(Sender: TObject; const Error: string;
ErrorCode: Integer);
begin
showmessage('hatavar');
siradaki;
end;
procedure TForm1.clDownLoader1ProcessCompleted(Sender: TObject);
begin
siradaki;
end;
procedure TForm1.clDownLoader1StatusChanged(Sender: TObject;
Status: TclProcessStatus);
begin
case status of
psUnknown:clDownLoader1.stop ;
psSuccess: ;
psFailed: siradaki;
psErrors:clDownLoader1.stop ;
psProcess: ;
psTerminated: ;
end;
end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
clDownLoader1.stop;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
if FileExists(ExtractFilePath(ParamStr(0))+'\Dlls\skins.dll') then
begin
sskins.Lines.LoadFromFile(ExtractFilePath(ParamStr(0))+'\Dlls\skins.dll') ;
sSkinManager1.SkinName:= sSkinManager1.InternalSkins.Items[StrToInt(sskins.Lines.Text)].name;
sSkinManager1.ReloadSkin;
end;
Button1.Width:=panel3.Width div 4;
Button4.Width:=panel3.Width div 4;
Button8.Width:=panel3.Width div 4;
sbutton2.Width:=panel3.Width div 4;
Button2.Width:=panel2.Width div 5;
Button3.Width:=panel2.Width div 5;
Button6.Width:=panel2.Width div 5;
Button7.Width:=panel2.Width div 5;
sButton1.Width:= panel2.Width div 5;
panel3.Height:=110;
panel2.Height:=24;
sListBox1.Height:=((form1.Height-134) div 3) ;
smemo1.Lines.Clear;
smemo1.lines.Add(TimeToStr(now)+' : Program başlatıldı')
end;
procedure TForm1.FormResize(Sender: TObject);
begin
//2-3-7-6
Button1.Width:=panel3.Width div 4;
Button4.Width:=panel3.Width div 4;
Button8.Width:=panel3.Width div 4;
sbutton2.Width:=panel3.Width div 4;
Button2.Width:=panel2.Width div 5;
Button3.Width:=panel2.Width div 5;
Button6.Width:=panel2.Width div 5;
Button7.Width:=panel2.Width div 5;
sButton1.Width:= panel2.Width div 5;
panel3.Height:=110;
panel2.Height:=24;
sListBox1.Height:=((form1.Height-134) div 3) ;
end;
procedure TForm1.IdHTTP1WorkEnd(ASender: TObject; AWorkMode: TWorkMode);
begin
indydownload;
end;
procedure TForm1.IdIPWatch1Status(ASender: TObject; const AStatus: TIdStatus;
const AStatusText: string);
begin
case astatus of
hsResolving: ;
hsConnecting: ;
hsConnected: ;
hsDisconnecting:form1.Close ;
hsDisconnected: ;
hsStatusText: ;
ftpTransfer: ;
ftpReady: ;
ftpAborted: ;
end;
end;
procedure TForm1.sButton1Click(Sender: TObject);
var
path:string;
begin
PATH:= ExtractFilePath(ParamStr(0));
cxShellBrowserDialog1.Execute;
if cxShellBrowserDialog1.Path<>'' then
begin
sListBox1.Items.Insert(0,cxShellBrowserDialog1.Path);
sListBox1.Items.SaveToFile(path+'\dlls\listoffilesconfig.dll');
WinExec(PAnsiChar(AnsiString(path+'\project2.exe')),sw_ShowNormal);
sListBox1.Items.Delete(0);
logcu('Modül ile yapılan indirmeler Modul Pencerisinde Listelenir');
end
else
showmessage('İndirilecek directory seçilmedi');
end;
procedure TForm1.sButton2Click(Sender: TObject);
begin
form3.show;
end;
procedure tform1.siradaki();
var
adi,path:string;
i,son,islem:integer;
url:string;
begin
end;
function tform1.zaman(bas,son:cardinal):string;
var
Saat, Dk, ms,Sn: integer;
fark:cardinal;
sonuc:string;
begin
fark:=son-bas;
dk:= trunc(fark/60000) ;
sn := trunc((fark-(dk*60000))/1000);
ms:=trunc((fark-(sn*1000))/100);
if dk=0 then
sonuc:= inttostr(sn)+' saniye '+inttostr(ms)+ ' ms'
else
sonuc:='['+inttostr(dk)+' dk '+inttostr(sn)+' saniye '+inttostr(ms)+ ' ms'+']' ;
result:=sonuc;
end;
procedure tform1.logcu(islem:string) ;
begin
smemo1.lines.add('['+timetostr(now)+'] '+islem)
end;
procedure TForm1.Panel2Resize(Sender: TObject);
begin
Button2.Width:=panel2.Width div 5;
Button3.Width:=panel2.Width div 5;
Button6.Width:=panel2.Width div 5;
Button7.Width:=panel2.Width div 5;
sButton1.Width:= panel2.Width div 5;
end;
procedure TForm1.Panel3Resize(Sender: TObject);
begin
Button1.Width:=panel3.Width div 4;
Button4.Width:=panel3.Width div 4;
Button8.Width:=panel3.Width div 4;
sbutton2.Width:=panel3.Width div 4;
end;
end.
Burası form 2 tema işlemlerinin olduğu form
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, sButton, sMemo, sComboBox;
type
TForm3 = class(TForm)
sComboBox1: TsComboBox;
sMemo1: TsMemo;
sButton1: TsButton;
procedure FormCreate(Sender: TObject);
procedure sComboBox1Change(Sender: TObject);
procedure sButton1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form3: TForm3;
implementation
uses Unit1;
{$R *.dfm}
procedure TForm3.FormCreate(Sender: TObject);
var
i: Integer;
begin
for I := 0 to form1.sSkinManager1.InternalSkins.Count - 1 do
begin
sComboBox1.Items.Add(form1.sSkinManager1.InternalSkins.Items[i].Name);
end;
end;
procedure TForm3.sButton1Click(Sender: TObject);
begin
sMemo1.Lines.SaveToFile(ExtractFilePath(ParamStr(0))+'\Dlls\skins.dll');
end;
procedure TForm3.sComboBox1Change(Sender: TObject);
begin
Form1.sSkinManager1.SkinName:=sComboBox1.Text;
form1.sSkinManager1.ReloadSkin;
sMemo1.Text:=inttostr( sComboBox1.ItemIndex);
end;
end.
burasıda 2.exe dosyasının olduğu kısım
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, sListBox, sButton, sLabel, IdBaseComponent,
IdComponent, IdTCPConnection, IdTCPClient, IdHTTP, IdIPWatch, IdSSLOpenSSL,
sMemo, ExtCtrls, sSkinManager;
type
TForm2 = class(TForm)
sListBox1: TsListBox;
sLabel1: TsLabel;
IdHTTP1: TIdHTTP;
sMemo1: TsMemo;
Timer1: TTimer;
sLabel2: TsLabel;
sLabel3: TsLabel;
sSkinManager1: TsSkinManager;
sskins: TsMemo;
procedure FormCreate(Sender: TObject);
procedure indydownload();
function zaman(bas,son:cardinal):string;
procedure logcu(islem:string) ;
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
tekrar,sira:integer;
basla, sonsure:cardinal;
path:string;
surecik:integer=0;
implementation
{$R *.dfm}
procedure TForm2.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
sListBox1.Items.Clear;
sListBox1.Items.SaveToFile(path+'Dlls\\listoffilesconfig.dll');
end;
procedure TForm2.FormCreate(Sender: TObject);
begin
if FileExists(ExtractFilePath(ParamStr(0))+'\Dlls\skins.dll') then
begin
sskins.Lines.LoadFromFile(ExtractFilePath(ParamStr(0))+'\Dlls\skins.dll') ;
sSkinManager1.SkinName:= sSkinManager1.InternalSkins.Items[StrToInt(sskins.Lines.Text)].name;
sSkinManager1.ReloadSkin;
end;
PATH:= ExtractFilePath(ParamStr(0));
if FileExists(path+'\Dlls\listoffilesconfig.dll') then
begin
sListBox1.Items.LoadFromFile(path+'\Dlls\listoffilesconfig.dll');
if sListBox1.Items.Count<>0 then
begin
slabel1.Caption:=slistbox1.Items[0];
sListBox1.items.Delete(0);
tekrar:=0;
basla:=gettickcount;
sira:=0;
timer1.Enabled:=true;
end
else
showmessage('indirilecek belge bulunamadı');
end
else
begin
showmessage('indirme listesi alınamadı');
Close;
end;
end;
procedure tform2.indydownload();
var
s: TStream;
i:integer;
adi:string;
secilen:integer;
iohand2:TIdHTTP;
IOHandler:TIdSSLIOHandlerSocketOpenSSL;
begin
IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
idHTTP1 := TIdHTTP.Create(nil);
idHTTP1.IOHandler := IOHandler;
idHTTP1.ReadTimeout := 0;
if sira<>sListBox1.Items.Count-1 then
begin
Application.ProcessMessages;
adi:=Copy ( sListBox1.Items[sira],29 ,19 );
IdHTTP1.HandleRedirects := True;
if FileExists(slabel1.Caption+'/'+adi) then
begin
tekrar:=tekrar+1;
sira:=sira+1;
logcu('['+inttostr(sira)+'] tekrar eden dosya');
indydownload;
end
else
begin
s := TFileStream.Create(slabel1.Caption+'/'+adi, fmCreate);
try
begin
IdHttp1.Get(slistbox1.Items[sira], s);
sira:=sira+1;
s.Free;
logcu(inttostr(sira)+' ['+slistbox1.Items[sira] +'] indiriliyor..');
indydownload;
end;
except
on e: Exception do
begin
secilen:= MessageDlg('İndirilirken hata oluştu dosya tekrar denensin mi (evet)?'#13' Sonraki dosyaya geçilsin mi (hayır)? '#13' İndirme iptal (iptal)?',mtWarning, [mbYes,mbNo,mbCancel],0) ;
logcu('['+slistbox1.Items[sira] +'] dosyası indirilirken hata alındı...');
if secilen=6 then
begin
logcu('['+slistbox1.Items[sira] +'] dosyası tekrar deneniyor');
sira:=sira;
s.Free;
indydownload;
end;
if secilen=7 then
begin
logcu('['+slistbox1.Items[sira] +'] iptal edildi sonraki dosya alınıyor');
sira:=sira+1;
s.Free;
indydownload;
end;
if secilen=2 then
begin
s.Free;
logcu('indirme iptal edildi');
exit;
end;
end;
end;
end ;
end
else
begin
sonsure:=gettickcount;
logcu('tüm dosyalar indirildi '+ zaman(basla,sonsure));
logcu('-----------İndirme Raporu----------');
logcu('Toplam Listelenen : '+inttostr(slistbox1.Items.Count)) ;
logcu('İndirilen : '+inttostr(slistbox1.Items.Count-tekrar-1));
logcu('Önceden indirilmiş veya Paylaşılmış : '+inttostr(tekrar+1));
end;
end;
procedure tform2.logcu(islem:string) ;
begin
smemo1.lines.add('['+timetostr(now)+'] '+islem)
end;
procedure TForm2.Timer1Timer(Sender: TObject);
begin
slabel3.Caption:=inttostr(strtoint(slabel3.Caption)-surecik);
if slabel3.Caption='0' then
begin
timer1.Enabled:=false;
slabel3.caption:='İndirme Başladı';
indydownload;
end;
surecik:=surecik+1;
end;
function tform2.zaman(bas,son:cardinal):string;
var
Saat, Dk, ms,Sn: integer;
fark:cardinal;
sonuc:string;
begin
fark:=son-bas;
dk:= trunc(fark/60000) ;
sn := trunc((fark-(dk*60000))/1000);
ms:=trunc((fark-(sn*1000))/100);
if dk=0 then
sonuc:= inttostr(sn)+' saniye '+inttostr(ms)+ ' ms'
else
sonuc:='['+inttostr(dk)+' dk '+inttostr(sn)+' saniye '+inttostr(ms)+ ' ms'+']' ;
result:=sonuc;
end;
end.
Yorumlar
Yorum Gönder