Здравствуйте, Гость
Понедельник, 11.12.2017, 11:28
Главная Главная страница форума Регистрация Вход
Новые сообщения Участники форума Правила форума Поиск
Страница 1 из 11
Модератор форума: stalker, Ekz 
Форум » Все о Delphi » Начинающим » Отразить процесс закачки файла (Отразить весь процесс закачки файла на форме.)
Отразить процесс закачки файла
kyran29Дата: Вторник, 24.11.2009, 00:34 | Сообщение # 1
Ранг 1
Группа: Пользователи
Сообщений: 2
Награды: 0
Репутация: 0
Статус: Offline
crazy Подскажите, пожалуйста, как отразить весь процесс закачки файла, с помощью компонентов TProgressBar и TLabel.

Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,URLMon;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

TLoadThread = class(TThread)
protected
FResult:String;
procedure Execute; override;
procedure ShowResult;
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

function DownloadFile(SourceFile, DestFile: string): Boolean;
begin
try
Result := UrlDownloadToFile(nil, PChar(SourceFile), PChar(DestFile), 0, nil) = 0;
except
Result := False;
end;
end;

procedure TLoadThread.Execute;
const
//// Адресок
SourceFile = 'http://downloads.kaspersky-labs.com/trial/registered/8NGILSWTCHAPVSJ1NTX8/kav9.0.0.736ru.exe ';
// Куда качаем
DestFile = 'c:\kav9.0.0.736ru.exe ';
begin

if DownloadFile(SourceFile, DestFile) then
FResult:='Файл загружен!'
else
FResult:='Ошибка при загрузке - '+ SourceFile;
Synchronize(ShowResult);
end;

procedure TLoadThread.ShowResult;
begin
ShowMessage(FResult);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
lt:TLoadThread;
begin
lt:=TLoadThread.Create(False);
lt.FreeOnTerminate:=True;
lt.Resume;
end;

 
ZuByДата: Вторник, 24.11.2009, 15:16 | Сообщение # 2
Ранг 5
Группа: Проверенные
Сообщений: 118
Награды: 2
Репутация: 2
Статус: Offline
ну для этого нужно читать сколько байт уже передано.

http://www.zubymplayer.com
 
AdminДата: Вторник, 24.11.2009, 22:25 | Сообщение # 3
Ранг 10
Группа: Пользователи
Сообщений: 1268
Награды: 16
Репутация: 2
Статус: Offline
Функция UrlDownloadToFile не возвращает никакой информации о прогрессе. Функция возвращает только 2 кода: "все хорошо", "все плохо - произошла ошибка".

Попробуй этот кусок кода:

Code

uses wininet;
...
procedure TForm1.BitBtn1Click(Sender: TObject);
var F: File;
     ResumePos,BufferLen,SumSize: DWORD;
     hSession, hURL: HInternet;
     Buffer: array[1..1024] of Byte;
     err: boolean;

begin
SumSize:=0; ResumePos:=0;   //Инициализируемся
AssignFile (F,Edit2.Text);  //Свяжемся с файлом
IF FileExists (Edit2.Text) then //Есть ли на диске этот файл
   begin
    Reset(f,1); //Ах, есть? Откроем!
    ResumePos:=FileSize(F); //Откуда докачать
    Seek(F, FileSize(F)); //А писать бум в конец
   end else ReWrite(f,1);  //А раз нет, так создадим

NADO:= TRUE; //Надо качать...
//Открыли сессию
hSession:= InternetOpen('X-Kachalka',PRE_CONFIG_INTERNET_ACCESS,nil,nil,0);
//И наш УРЛ
hURL := InternetOpenURL(hSession,PChar(Edit1.Text),nil,0,0,0);
//Сколько там наш файл весит?
InternetQueryDataAvailable(hURL, SumSize,0,0);
label4.Caption:= IntToStr (SumSize); //Сообщим об этом
if ResumePos>0 then //Если докачиваем,
  begin
  InternetSetFilePointer(hURL,ResumePos,nil,0,0); //То сместимся
  end;

REPEAT //Качаем
  err:= InternetReadFile(hURL, @Buffer,SizeOf(Buffer),BufferLen); //Читаем буфер
  IF err= false then //Ошибка чтения
   begin
   ShowMessage ('Произошел облом :('); //Сообщим и выходим
   exit;
   end;
  BlockWrite(f, Buffer, BufferLen); //Пишем в файл
  Application.Processmessages;
UNTIL (BufferLen= 0) Or (NADO= FALSE); //Качаем, пока не все или надо
ShowMessage ('Успешно загружено!');
end;

Даже докачка поддерживается.


Не оказываю помощь через личные сообщения и ICQ
 
POGiMplayerДата: Среда, 02.12.2009, 01:16 | Сообщение # 4
Ранг 1
Группа: Проверенные
Сообщений: 17
Награды: 0
Репутация: 0
Статус: Offline
Обычно в такой ситуации сторониие компоненты типа Indy предоставляют либо CallBack либо ещё-что. Вообщем рыться хорошо надо.
 
Форум » Все о Delphi » Начинающим » Отразить процесс закачки файла (Отразить весь процесс закачки файла на форме.)
Страница 1 из 11
Поиск:

Copyright DelphiDevelop.ru © 2008-2017
Хостинг от uCoz