Twitter Dan Twitter api kullanmadan Image Çekme

Ö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
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