<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413794&amp;view=findpost&amp;p=3783027</guid>
        <pubDate>Mon, 19 Nov 2018 13:09:36 +0000</pubDate>
        <title>Скачиваем файлы из интернета</title>
        <link>https://forum.sources.ru/index.php?showtopic=413794&amp;view=findpost&amp;p=3783027</link>
        <description><![CDATA[Aqel: тоже думаю...]]></description>
        <author>Aqel</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413794&amp;view=findpost&amp;p=3783026</guid>
        <pubDate>Mon, 19 Nov 2018 12:43:13 +0000</pubDate>
        <title>Скачиваем файлы из интернета</title>
        <link>https://forum.sources.ru/index.php?showtopic=413794&amp;view=findpost&amp;p=3783026</link>
        <description><![CDATA[Славян: Может надо как-то официально сказать, чтобы закрыть поток (записать файл), а не просто оборвать - str.Free ? :unsure:]]></description>
        <author>Славян</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413794&amp;view=findpost&amp;p=3783016</guid>
        <pubDate>Mon, 19 Nov 2018 09:20:04 +0000</pubDate>
        <title>Скачиваем файлы из интернета</title>
        <link>https://forum.sources.ru/index.php?showtopic=413794&amp;view=findpost&amp;p=3783016</link>
        <description><![CDATA[Aqel: Есть код для скачивания через поток:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">unit Unit1;</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">interface</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">uses</div><div class="code_line">&nbsp;&nbsp;Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,</div><div class="code_line">&nbsp;&nbsp;Dialogs, StdCtrls, ComCtrls, IdBaseComponent, IdComponent, IdTCPConnection,</div><div class="code_line">&nbsp;&nbsp;IdTCPClient, IdHTTP, XPMan;</div><div class="code_line">const</div><div class="code_line">MY_MESS = WM_USER + 100;</div><div class="code_line">type</div><div class="code_line">&nbsp;&nbsp;TForm1 = class(TForm)</div><div class="code_line">&nbsp;&nbsp; &nbsp;ProgressBar1: TProgressBar;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Edit1: TEdit;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Edit2: TEdit;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Label1: TLabel;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Label2: TLabel;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Button1: TButton;</div><div class="code_line">&nbsp;&nbsp; &nbsp;SaveDialog1: TSaveDialog;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Button2: TButton;</div><div class="code_line">&nbsp;&nbsp; &nbsp;IdHTTP1: TIdHTTP;</div><div class="code_line">&nbsp;&nbsp; &nbsp;XPManifest1: TXPManifest;</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure Button1Click(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure Button2Click(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp;private</div><div class="code_line">&nbsp;&nbsp; &nbsp;{ Private declarations }</div><div class="code_line">&nbsp;&nbsp;public</div><div class="code_line">&nbsp;&nbsp; &nbsp;{ Public declarations }</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure thrTerminate(Sender:TObject);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure MyProgress(var msg:TMessage);message MY_MESS;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;Form1: TForm1;</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">implementation</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">{$R *.dfm}</div><div class="code_line">type</div><div class="code_line">&nbsp;&nbsp;TDownLoader = class(TThread)</div><div class="code_line">&nbsp;&nbsp;private</div><div class="code_line">&nbsp;&nbsp; &nbsp;FToFolder: string;</div><div class="code_line">&nbsp;&nbsp; &nbsp;FURL: string;</div><div class="code_line">&nbsp;&nbsp; &nbsp;protected</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;procedure Execute;override;</div><div class="code_line">&nbsp;&nbsp; &nbsp;public</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;property URL:string read FURL write FURL;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;property ToFolder:string read FToFolder write FToFolder;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;procedure IdHTTP1Work(ASender: TObject; AWorkMode: TWorkMode;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;AWorkCount: Int64);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;procedure IdHTTP1WorkBegin(ASender: TObject; AWorkMode: TWorkMode;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;AWorkCountMax: Int64);</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure IdHTTP1WorkEnd(ASender: TObject; AWorkMode: TWorkMode);</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">procedure TForm1.Button1Click(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;SaveDialog1.FileName:=copy(Edit1.Text,LastDelimiter(&#39;\/&#39;,Edit1.Text)+1,maxint);</div><div class="code_line">&nbsp;&nbsp;if SaveDialog1.Execute then</div><div class="code_line">&nbsp;&nbsp; &nbsp; Edit2.Text:=SaveDialog1.FileName;</div><div class="code_line">end;</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">{ TDownLoader }</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">procedure TDownLoader.Execute;</div><div class="code_line">&nbsp;&nbsp;var http:TIdHTTP;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;str:TFileStream;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;//Создим класс для закачки</div><div class="code_line">&nbsp;&nbsp;http:=TIdHTTP.Create(nil);</div><div class="code_line">&nbsp;&nbsp;http.OnWork:=IdHTTP1Work;</div><div class="code_line">&nbsp;&nbsp;http.OnWorkBegin:=IdHTTP1WorkBegin;</div><div class="code_line">&nbsp;&nbsp;http.OnWorkEnd:=IdHTTP1WorkEnd;</div><div class="code_line">&nbsp;&nbsp;//каталог, куда файл положить</div><div class="code_line">&nbsp;&nbsp;ForceDirectories(ExtractFileDir(ToFolder));</div><div class="code_line">&nbsp;&nbsp;//Поток для сохранения</div><div class="code_line">&nbsp;&nbsp;str:=TFileStream.Create(ToFolder, fmCreate);</div><div class="code_line">&nbsp;&nbsp;try</div><div class="code_line">&nbsp;&nbsp; &nbsp;//Качаем</div><div class="code_line">&nbsp;&nbsp; &nbsp;http.Get(url,str);</div><div class="code_line">&nbsp;&nbsp;finally</div><div class="code_line">&nbsp;&nbsp; &nbsp;//Нас учили чистить за собой</div><div class="code_line">&nbsp;&nbsp; &nbsp;http.Free;</div><div class="code_line">&nbsp;&nbsp; &nbsp;str.Free;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">procedure TForm1.Button2Click(Sender: TObject);</div><div class="code_line">&nbsp;&nbsp; var d:TDownLoader;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;//Создадим класс потока.</div><div class="code_line">&nbsp;&nbsp;//Поток для начала будет остановлен</div><div class="code_line">&nbsp;&nbsp;d:=TDownLoader.Create(true);</div><div class="code_line">&nbsp;&nbsp;//Передадим параметры потоку</div><div class="code_line">&nbsp;&nbsp;d.URL:=Edit1.Text;</div><div class="code_line">&nbsp;&nbsp;d.ToFolder:=Edit2.Text;</div><div class="code_line">&nbsp;&nbsp;//Поток должен удалить себя по завершению своей работы</div><div class="code_line">&nbsp;&nbsp;d.FreeOnTerminate:=true;</div><div class="code_line">&nbsp;&nbsp;d.OnTerminate:=thrTerminate;</div><div class="code_line">&nbsp;&nbsp;//И запустим его на закачку.</div><div class="code_line">&nbsp;&nbsp;d.Resume;</div><div class="code_line">&nbsp;&nbsp;//Теперь с процедуры мы выйдем, но поток работает</div><div class="code_line">&nbsp;&nbsp;//и живёт своей жизней</div><div class="code_line">end;</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">procedure TForm1.MyProgress(var msg: TMessage);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;case msg.WParam of</div><div class="code_line">&nbsp;&nbsp;0:begin ProgressBar1.Max:=msg.LParam;ProgressBar1.Position:=0; end;</div><div class="code_line">&nbsp;&nbsp;1:ProgressBar1.Position:=msg.LParam;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">procedure TForm1.thrTerminate(Sender: TObject);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;ShowMessage(&#39;Готово&#39;);</div><div class="code_line">end;</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">procedure TDownLoader.IdHTTP1Work(ASender: TObject; AWorkMode: TWorkMode;</div><div class="code_line">&nbsp;&nbsp;AWorkCount: Int64);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;PostMessage(Application.MainForm.Handle,MY_MESS,1,AWorkCount);</div><div class="code_line">end;</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">procedure TDownLoader.IdHTTP1WorkBegin(ASender: TObject; AWorkMode: TWorkMode;</div><div class="code_line">&nbsp;&nbsp;AWorkCountMax: Int64);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;PostMessage(Application.MainForm.Handle,MY_MESS,0,AWorkCountMax);</div><div class="code_line">end;</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">procedure TDownLoader.IdHTTP1WorkEnd(ASender: TObject; AWorkMode: TWorkMode);</div><div class="code_line">begin</div><div class="code_line">//</div><div class="code_line">end;</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">end.</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
...но у меня он не робит - прогресс показывает скачивание, только никакого скачанного файла нету после завершения. В чём может быть проблема?<br>
<br>
Ps: Delphi XE 8 sp1<br>
<br>
Весь проект этого кода:<br>
<span class="b-attach" data-size="8681" data-hits="486" data-attach-id="59475" data-attach-post-id="3783016">
			<span class="b-attach__title"></span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=3783016&amp;attach_id=59475' title='Скачать файл' target='_blank'>____________________.zip</a> (, : 486)
		</span>]]></description>
        <author>Aqel</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      </channel>
      </rss>
	