Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Скачивание файла из Интернета, как бы красиво отобразить 
:(
    Опции темы
MacTep
  Дата 29.12.2008, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

Репутация: нет
Всего: 4



Скачиваю файлик следующим образом:

Код

unit Main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP,
  IdBaseComponent, IdAntiFreezeBase, IdAntiFreeze, ComCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    IdAntiFreeze1: TIdAntiFreeze;
    http: TIdHTTP;
    Edit1: TEdit;
    Label1: TLabel;
    pb: TProgressBar;
    Label2: TLabel;
    Label3: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure httpWork(Sender: TObject; AWorkMode: TWorkMode;
      const AWorkCount: Integer);
    procedure httpWorkBegin(Sender: TObject; AWorkMode: TWorkMode;
      const AWorkCountMax: Integer);
  private
  public
    max: string;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var fs: TFileStream;
begin
   pb.Position := 0;
   pb.Min := 0;

   fs := TFileStream.Create('c:\ooo_setup.zip', fmCreate);

   try
     http.Head(Edit1.Text);
     max := IntToStr(http.Response.ContentLength);

     http.Get(Edit1.Text, fs);
   except
     on e: exception do
       ShowMessage('Âî âðåìÿ çàãðóçêè ôàéëà ïðîèçîøëà îøèáêà');
   end;
   fs.Free;

   ShowMessage('Çàãðóçêà óñïåøíî çàâåðøåíà');
end;

procedure TForm1.httpWork(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCount: Integer);
begin
  if AWorkMode = wmRead then
  begin
    pb.Position := AWorkCount;
    label3.Caption := IntToStr(AWorkCount) + ' èç ' + max;
  end;
end;

procedure TForm1.httpWorkBegin(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCountMax: Integer);
begin
  if AWorkMode = wmRead then pb.Max := AWorkCountMax;
end;

end.

Но вот незадача... Во-первых, хочу теперь отражать кол-во скачанного в килобайтах. Во-вторых, хочу обновлять счетчик скачанного (label3) каждую секунду а не постоянно... Что сделать?


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
SneG0K
Дата 30.12.2008, 01:33 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: 2
Всего: 54



Цитата(MacTep @  29.12.2008,  22:52 Найти цитируемый пост)
каждую секунду а не постоянно

ты хоть сам понял?
Цитата(MacTep @  29.12.2008,  22:52 Найти цитируемый пост)
хочу теперь отражать кол-во скачанного в килобайтах

sizeOf()
PM WWW Skype   Вверх
MacTep
Дата 30.12.2008, 06:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

Репутация: нет
Всего: 4



Цитата(SneG0K @  30.12.2008,  01:33 Найти цитируемый пост)
Цитата(MacTep @  29.12.2008,  22:52 Найти цитируемый пост)
каждую секунду а не постоянно

ты хоть сам понял?

Все я понял. А ты примерчик посмотрел? Там же явно видно, что обновление label3 происходит очень часто, а мне надо раз в секунду.

Цитата(SneG0K @  30.12.2008,  01:33 Найти цитируемый пост)
sizeOf() 
СайзОф что именно???



--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
SneG0K
Дата 30.12.2008, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: 2
Всего: 54



MacTep, вот смотри... У TFileStream есть такой полезный метод seek(). Установи указатель вначало. А потом перемести вконец. Число, которое она вернет и будет размером файла в байтах.

А по поводу секунды. Создай переменную и каждый раз проверяй, не прошла ли секунда с момента последнего вызова.
PM WWW Skype   Вверх
MacTep
Дата 30.12.2008, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

Репутация: нет
Всего: 4



Размер файла я узнаю легко и без seek. Тут дело не в том, как узнать, тут дело в том, как отобразить данную информацию именно раз в секунду скажем или чуть чаще, в общем с периодичностью, которую задаю я. И не так, чтобы все зависло нафиг при этом, а чтобы постоянно обновлялось окошечко...


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
THandle
Дата 30.12.2008, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: нет
Всего: 372



MacTep, ну... Я тут конечно совершенно случайно оказался, но можно попробовать так:

1) Используем TTimer с интарвалов в 1000 мс.
Код


procedure TForm1.httpWork(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCount: Integer);
begin
  Timer1.Enabled := AWorkMode = wmRead;
end;



Ну в OnTimer выполнять это:

Код

    pb.Position := AWorkCount;
    label3.Caption := IntToStr(AWorkCount) + ' èç ' + max;


Я не проерял. Просто мысли по этому поводу smile
PM   Вверх
MacTep
Дата 30.12.2008, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

Репутация: нет
Всего: 4



Замечательно!
Спасибо! Пришлось чуток кое-что изменить, но общий смысл передан верно! ;)

А некрасиво будет, если я спрошу, как можно прервать в любой момент выполнение загрузки файла?

Это сообщение отредактировал(а) MacTep - 30.12.2008, 23:20


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
MacTep
Дата 8.1.2009, 00:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

Репутация: нет
Всего: 4



Ау, ребят. Так как прервать процесс скачивания файла из инета моим способом?


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
SneG0K
Дата 8.1.2009, 02:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: 2
Всего: 54



Цитата(MacTep @  7.1.2009,  23:29 Найти цитируемый пост)
Так как прервать процесс скачивания файла из инета моим способом? 

Запихнуть твой способ в поток. Или делать проверку какую нить. Типа если переменная равна false , то выйти их процедуры
PM WWW Skype   Вверх
MacTep
Дата 10.1.2009, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

Репутация: нет
Всего: 4



Жаль, что придется возиться с потоками. Но... Раз надо, то надо. ;)


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
MetalFan
Дата 11.1.2009, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 14
Всего: 128



Можно в онворк аборт вызывать... и поймать его снаружи


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
MacTep
Дата 12.1.2009, 08:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

Репутация: нет
Всего: 4



Цитата(MetalFan @  11.1.2009,  14:48 Найти цитируемый пост)
Можно в онворк аборт вызывать... и поймать его снаружи 

А можно вот об этом подробнее? Немного не понял как это поймать его снаружи. И как именно в онворке вызывать аборт.


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
MacTep
Дата 16.1.2009, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

Репутация: нет
Всего: 4



Ау... Так и остался вопрос открытым. Прервать не удается закачку... А без этого как-то кривовато выглядит.
Мне интересен сам процеcc idhttp.get... как именно его прервать... то есть вот грузится у меня файл большой. и тут я нажимаю кнопку - стоять - как убить эту загрузку?

Это сообщение отредактировал(а) MacTep - 16.1.2009, 14:56


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
SneG0K
Дата 16.1.2009, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: 2
Всего: 54



Цитата(MacTep @  16.1.2009,  12:30 Найти цитируемый пост)
как убить эту загрузку?

Вынеси в поток.
PM WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0548 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.