|
Вопрос # 185/ вопрос открыт / |
|
у моей программы не работает докачка, может кто-нибудь знает где ошибка?
Вот код которым я пользуюсь.
Приложение: Переключить в обычный режим- interface
-
- uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- WinInet, XPMan, StdCtrls, ComCtrls, Menus, ExtCtrls;
-
- Type
- TForm1 = Class(TForm)
- Edit1: TEdit;
- ProgressBar1: TProgressBar;
- Button: TButton;
- StatusBar1: TStatusBar;
- Timer1: TTimer;
- Button1: TButton;
- Button2: TButton;
- procedure FormCreate(Sender: TObject);
- procedure Edit1DblClick(Sender: TObject);
- procedure ButtonClick(Sender: TObject);
- procedure Timer1Timer(Sender: TObject);
- procedure Button1Click(Sender: TObject);
- procedure Button2Click(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
-
- Var
- Form1: TForm1;
- Stop: Boolean;
- cop1:string;
- FSize, RestartPos: Cardinal;
-
- Implementation
-
- {$R *.DFM}
-
- function GetInetFileSize(Const AURL: String): Integer;
- var
- HSession, HFile: HInternet;
- Buffer: array [1..20] of Char;
- BufferLen, Index: Cardinal;
- begin
- Result := 0;
- HSession := InternetOpen(NIL, INTERNET_OPEN_TYPE_PRECONFIG, NIL, NIL, 0);
- If Assigned(HSession) Then Begin
- HFile := InternetOpenURL(HSession, PChar(AURL), NIL, 0, INTERNET_FLAG_RELOAD, 0);
- Index := 0;
- BufferLen := 20;
- If HttpQueryInfo(HFile, HTTP_QUERY_CONTENT_LENGTH, @Buffer, BufferLen, Index) Then
- Result := StrToInt(StrPas(@Buffer));
- InternetCloseHandle(HFile);
- InternetCloseHandle(Hsession);
- End;
- End;
-
- Procedure TForm1.FormCreate(Sender: TObject);
- Begin
- Stop := False;
- Button2.Enabled := False;
- End;
-
- procedure TForm1.Edit1DblClick(Sender: TObject);
- begin
- edit1.SelectAll;
- end;
-
- procedure TForm1.ButtonClick(Sender: TObject);
- var ild1:integer;
- lt1:string;
- begin
- lt1:=edit1.text;
- ild1:=LastDelimiter('/', lt1);
- cop1:=copy(lt1, ild1+1, ild1);
- Statusbar1.Panels[0].Text:=cop1;
- end;
-
- procedure TForm1.Button1Click(Sender: TObject);
- var
- HInet, hURL: HINTERNET;
- ReadLen, GlobRead: Cardinal;
- FBuf: array[1..1024] of Byte;
- F: File;
- lt, Header, cop:string;
- err:boolean;
- ild, ild1:integer;
-
- speed:double;
- tmp: integer;
- Begin
- Stop := false;
- timer1.Enabled:=true;
-
- RestartPos := 0;
- FSize := GetInetFileSize(Edit1.Text);
- Statusbar1.Panels[2].Text:=IntToStr(FSize)+'b';
- Button1.Enabled := False;
- Button2.Enabled := True;
-
- lt:=edit1.text;
- ild:=LastDelimiter('/', lt);
- ild1:=LastDelimiter('.', lt);
- cop:=copy(lt, ild, ild1+3);
-
- If FileExists('C:temp'+cop ) Then Begin
- AssignFile(f, 'C:temp'+cop );
- Reset(F, 1);
- RestartPos := FileSize(F);
- Seek(F, FileSize(F));
- End Else begin
- AssignFile(f, 'C:temp'+cop );
- ReWrite(f, 1);
- End;
- HInet := InternetOpen(NIL, PRE_CONFIG_INTERNET_ACCESS, NIL, NIL, 0);
- Header := 'Accept: */*';
- HURL := InternetOpenURL(HInet,
- PChar(Edit1.Text), PChar(Header), StrLen(PChar(Header)), 0, 0);
- If RestartPos > 0 Then Begin
- InternetSetFilePointer(HURL, RestartPos, NIL, 0, 0);
- ProgressBar1.Min := 0;
- ProgressBar1.Max := FSize;
- ProgressBar1.Position := RestartPos;
- End Else Begin
- ProgressBar1.Min := 0;
- ProgressBar1.Max := FSize;
- End;
- repeat
- err:= InternetReadFile(HURL, @FBuf, SizeOf(FBuf), ReadLen);
- IF err= false then begin
//Îøèáêà
÷òåíèÿ
- ShowMessage
('Ïðîèçîøåë
îáëîì :(');
//Ñîîáùèì
è
âûõîäèì
- exit;
- end;
- BlockWrite(F, FBuf, ReadLen);
- GlobRead:=GlobRead+ReadLen;
- RestartPos := FileSize(F);
- Statusbar1.Panels[1].Text:=IntToStr(RestartPos)+'b';
- ProgressBar1.Position := RestartPos;
- Application.ProcessMessages;
- until (ReadLen < 1) or (Stop = true);
- Stop := False;
- Button1.Enabled := True;
- Button2.Enabled := False;
- InternetCloseHandle(HURL);
- InternetCloseHandle(HInet);
- CloseFile(F);
- end;
-
- procedure TForm1.Button2Click(Sender: TObject);
- begin
- Stop := True;
- Progressbar1.Position:=0;
- Button1.Enabled := True;
- Button2.Enabled := False;
- end;
-
- procedure TForm1.Timer1Timer(Sender: TObject);
- var
- ii:real;
- s:string;
- begin
- ii:=RestartPos/(FSize/100);
- s:=floattostr(ii);
- s:=copy(s, 1, 4);
-
- if statusbar1.Panels[1].Text=statusbar1.Panels[2].Text then begin
- statusbar1.Panels[3].Text:='Ready';
- timer1.Enabled:=false;
- end else statusbar1.Panels[3].Text:=s+'%';
- end;
 |
Вопрос задал: Evghenusi (статус: Посетитель)
Вопрос отправлен: 1 декабря 2006, 23:00
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Alex Van Glukhman
Здравствуйте, Evghenusi!
В коде отсутствует метод Append. А вообще это лучше делать через TFileStream
 |
Ответ отправил: Alex Van Glukhman (статус: 7-ой класс)
Время отправки: 2 декабря 2006, 00:20
|
Мини-форум вопроса
Всего сообщений: 4; последнее сообщение — 26 декабря 2008, 02:14; участников в обсуждении: 3.
|
Alex Van Glukhman (статус: 7-ой класс), 2 декабря 2006, 00:08 [#1]:
Ваш код настолько удобочитаем, что изначально хочется уйти с данной страницы. Если вы не хотите получить ответ в такой же форме как и вопрос, то переформатируйте текст или выложите ссылку на файлы исходника
|
|
Alex Van Glukhman (статус: 7-ой класс), 2 декабря 2006, 00:09 [#2]:
Прошу прощения но по почте мне прислали какие-то крякозябры - видимо предыдущий вопрос к админу
|
|
Ерёмин А.А. (статус: *Администратор), 2 декабря 2006, 08:28 [#3]:
Всё дело в том, что автор вопроса, видимо, не заметил поля "Приложения" которое специально для исходных кодов и создано... Вопрос был откорректирован, с разосланными письмами ничего не сделать.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|