С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi: Сети
Войти
Регистрация
Восстановить пароль
 
Dryg
71 / 66 / 35
Регистрация: 09.04.2009
Сообщений: 359
Записей в блоге: 1
1

как добавить паузу и догрузку файлов

07.10.2012, 00:20. Просмотров 463. Ответов 0
Метки нет (Все метки)

Всем привет!! использую старый код, который лежит на просторах инета загрузка файла из интернета. Доработал и сделал кнопку стоп, а вот кнопку паузы или догрузки не получается. может даст, кто пример или совет


Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
  IdTCPClient, IdHTTP, XPMan;
const
MY_MESS = WM_USER + 100;
type
  TForm1 = class(TForm)
    ProgressBar1: TProgressBar;
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Button1: TButton;
    SaveDialog1: TSaveDialog;
    Button2: TButton;
    IdHTTP1: TIdHTTP;
    XPManifest1: TXPManifest;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure thrTerminate(Sender:TObject);
    procedure MyProgress(var msg:TMessage);message MY_MESS;
  end;
 
var
  Form1: TForm1;
 stdow:Boolean;
implementation
 
{$R *.dfm}
type
  TDownLoader = class(TThread)
  private
    FToFolder: string;
    FURL: string;
    protected
      procedure Execute;override;
    public
      property URL:string read FURL write FURL;
      property ToFolder:string read FToFolder write FToFolder;
      procedure IdHTTP1Work(ASender: TObject; AWorkMode: TWorkMode;
      AWorkCount: Int64);
      procedure IdHTTP1WorkBegin(ASender: TObject; AWorkMode: TWorkMode;
      AWorkCountMax: Int64);
    procedure IdHTTP1WorkEnd(ASender: TObject; AWorkMode: TWorkMode);
  end;
procedure TForm1.Button1Click(Sender: TObject);
begin
  SaveDialog1.FileName:=copy(Edit1.Text,LastDelimiter('\/',Edit1.Text)+1,maxint);
  if SaveDialog1.Execute then
     Edit2.Text:=SaveDialog1.FileName;
end;
 
{ TDownLoader }
 
procedure TDownLoader.Execute;
  var http:TIdHTTP;
      str:TFileStream;
begin
  //Создим класс для закачки
  http:=TIdHTTP.Create(nil);
  http.OnWork:=IdHTTP1Work;
  http.OnWorkBegin:=IdHTTP1WorkBegin;
  http.OnWorkEnd:=IdHTTP1WorkEnd;
  //каталог, куда файл положить
  ForceDirectories(ExtractFileDir(ToFolder));
  //Поток для сохранения
  str:=TFileStream.Create(ToFolder, fmCreate);
  try
    //Качаем
    http.Get(url,str);
  finally
    //Нас учили чистить за собой
    http.Free;
    str.Free;
  end;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
   var d:TDownLoader;
begin
  //Создадим класс потока.
  //Поток для начала будет остановлен
  d:=TDownLoader.Create(true);
  //Передадим параметры потоку
  d.URL:=Edit1.Text;
  d.ToFolder:=Edit2.Text;
  //Поток должен удалить себя по завершению своей работы
  d.FreeOnTerminate:=true;
  d.OnTerminate:=thrTerminate;
  //И запустим его на закачку.
  d.Resume;
  //Теперь с процедуры мы выйдем, но поток работает
  //и живёт своей жизней
end;
 
  function RoundEx(chislo: double; Precision: Integer): string;
var
  ChisloInStr: string;
  ChisloInCurr: currency;
begin
  ChisloInCurr := chislo;
  Str(ChisloInCurr: 20: Precision, ChisloInStr);
  ChisloInStr[Pos('.', ChisloInStr)] := ',';
  RoundEx := Trim(ChisloInStr);
end;
 
procedure TForm1.MyProgress(var msg: TMessage);
begin
   case msg.WParam of
  0:begin ProgressBar1.Max:=msg.LParam;TaskBar1.ProgressMax:=msg.LParam;ProgressBar1.Position:=0; end;
  1:ProgressBar1.Position:=msg.LParam;
  end;
  TaskBar1.ProgressValue:=msg.LParam;
  label1.Caption:=RoundEx((msg.LParam / 1048576),2)+'  Мб из '+RoundEx((strp.Size/1048576),2)+' Мб';
end;
 
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
 
stdow:=false;
http.Free;
strp.Free;
end;
 
procedure TForm1.thrTerminate(Sender: TObject);
begin
  ShowMessage('Готово');
end;
 
procedure TDownLoader.IdHTTP1Work(ASender: TObject; AWorkMode: TWorkMode;
  AWorkCount: Int64);
begin
  if not stdow = true then exit;
  PostMessage(Application.MainForm.Handle,MY_MESS,1,AWorkCount);
end;
 
procedure TDownLoader.IdHTTP1WorkBegin(ASender: TObject; AWorkMode: TWorkMode;
  AWorkCountMax: Int64);
begin
  PostMessage(Application.MainForm.Handle,MY_MESS,0,AWorkCountMax);
end;
 
procedure TDownLoader.IdHTTP1WorkEnd(ASender: TObject; AWorkMode: TWorkMode);
begin
//
end;
 
end.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.10.2012, 00:20
Ответы с готовыми решениями:

Sleep(1000): Как сделать паузу и в тоже время иметь контроль над формой?
Как в Delphi сделать паузу и в тоже время иметь контроль над программой? Допустим, я ставлю в...

Сделать паузу в игре
Здравствуйте! Подскажите каким способом можно сделать паузу в игре (тетрис)! с помощью цикла ?

FTP: получение списка файлов из потока. Как вывести список файлов из директории?
доброго времени суток. пытаюсь написать свой FTP-клиент. отправил серверу команду LIST, и в...

Как добавить паузу перед завершением программы?
#include "stdafx.h" #include <stdio.h> /* печать таблицы температур по Фаренгейту и Цельсию для...

Змейка: добавить паузу и лучший результат
Написал тут змейку на паскале и хочется добавить паузу и лучший результат, а с файлами не очень...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.10.2012, 00:20

Как добавить обработку файлов нескольких определённых типов в код BAT-файла для архивации файлов?
Спасибо большое за полезную информацию! Отличный код. Подскажите как к нему прикрутить обработку...

Ставим программу поиска файлов на паузу и снимаем с нее
Всем здравствуйте и приятного денечка. Есть код: Imports System.Windows.Forms Imports...

Как добавить в таблицу имена файлов
Добрый вечер! Есть БД с таблицей и есть папка с кучей файлов. Вопрос: Как добавить имена...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru