Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 185

/ вопрос открыт /

у моей программы не работает докачка, может кто-нибудь знает где ошибка?
Вот код которым я пользуюсь.

Приложение:
  1. interface
  2.  
  3. uses
  4. Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  5. WinInet, XPMan, StdCtrls, ComCtrls, Menus, ExtCtrls;
  6.  
  7. Type
  8. TForm1 = Class(TForm)
  9. Edit1: TEdit;
  10. ProgressBar1: TProgressBar;
  11. Button: TButton;
  12. StatusBar1: TStatusBar;
  13. Timer1: TTimer;
  14. Button1: TButton;
  15. Button2: TButton;
  16. procedure FormCreate(Sender: TObject);
  17. procedure Edit1DblClick(Sender: TObject);
  18. procedure ButtonClick(Sender: TObject);
  19. procedure Timer1Timer(Sender: TObject);
  20. procedure Button1Click(Sender: TObject);
  21. procedure Button2Click(Sender: TObject);
  22. private
  23. { Private declarations }
  24. public
  25. { Public declarations }
  26. end;
  27.  
  28. Var
  29. Form1: TForm1;
  30. Stop: Boolean;
  31. cop1:string;
  32. FSize, RestartPos: Cardinal;
  33.  
  34. Implementation
  35.  
  36. {$R *.DFM}
  37.  
  38. function GetInetFileSize(Const AURL: String): Integer;
  39. var
  40. HSession, HFile: HInternet;
  41. Buffer: array [1..20] of Char;
  42. BufferLen, Index: Cardinal;
  43. begin
  44. Result := 0;
  45. HSession := InternetOpen(NIL, INTERNET_OPEN_TYPE_PRECONFIG, NIL, NIL, 0);
  46. If Assigned(HSession) Then Begin
  47. HFile := InternetOpenURL(HSession, PChar(AURL), NIL, 0, INTERNET_FLAG_RELOAD, 0);
  48. Index := 0;
  49. BufferLen := 20;
  50. If HttpQueryInfo(HFile, HTTP_QUERY_CONTENT_LENGTH, @Buffer, BufferLen, Index) Then
  51. Result := StrToInt(StrPas(@Buffer));
  52. InternetCloseHandle(HFile);
  53. InternetCloseHandle(Hsession);
  54. End;
  55. End;
  56.  
  57. Procedure TForm1.FormCreate(Sender: TObject);
  58. Begin
  59. Stop := False;
  60. Button2.Enabled := False;
  61. End;
  62.  
  63. procedure TForm1.Edit1DblClick(Sender: TObject);
  64. begin
  65. edit1.SelectAll;
  66. end;
  67.  
  68. procedure TForm1.ButtonClick(Sender: TObject);
  69. var ild1:integer;
  70. lt1:string;
  71. begin
  72. lt1:=edit1.text;
  73. ild1:=LastDelimiter('/', lt1);
  74. cop1:=copy(lt1, ild1+1, ild1);
  75. Statusbar1.Panels[0].Text:=cop1;
  76. end;
  77.  
  78. procedure TForm1.Button1Click(Sender: TObject);
  79. var
  80. HInet, hURL: HINTERNET;
  81. ReadLen, GlobRead: Cardinal;
  82. FBuf: array[1..1024] of Byte;
  83. F: File;
  84. lt, Header, cop:string;
  85. err:boolean;
  86. ild, ild1:integer;
  87.  
  88. speed:double;
  89. tmp: integer;
  90. Begin
  91. Stop := false;
  92. timer1.Enabled:=true;
  93.  
  94. RestartPos := 0;
  95. FSize := GetInetFileSize(Edit1.Text);
  96. Statusbar1.Panels[2].Text:=IntToStr(FSize)+'b';
  97. Button1.Enabled := False;
  98. Button2.Enabled := True;
  99.  
  100. lt:=edit1.text;
  101. ild:=LastDelimiter('/', lt);
  102. ild1:=LastDelimiter('.', lt);
  103. cop:=copy(lt, ild, ild1+3);
  104.  
  105. If FileExists('C:temp'+cop ) Then Begin
  106. AssignFile(f, 'C:temp'+cop );
  107. Reset(F, 1);
  108. RestartPos := FileSize(F);
  109. Seek(F, FileSize(F));
  110. End Else begin
  111. AssignFile(f, 'C:temp'+cop );
  112. ReWrite(f, 1);
  113. End;
  114. HInet := InternetOpen(NIL, PRE_CONFIG_INTERNET_ACCESS, NIL, NIL, 0);
  115. Header := 'Accept: */*';
  116. HURL := InternetOpenURL(HInet,
  117. PChar(Edit1.Text), PChar(Header), StrLen(PChar(Header)), 0, 0);
  118. If RestartPos > 0 Then Begin
  119. InternetSetFilePointer(HURL, RestartPos, NIL, 0, 0);
  120. ProgressBar1.Min := 0;
  121. ProgressBar1.Max := FSize;
  122. ProgressBar1.Position := RestartPos;
  123. End Else Begin
  124. ProgressBar1.Min := 0;
  125. ProgressBar1.Max := FSize;
  126. End;
  127. repeat
  128. err:= InternetReadFile(HURL, @FBuf, SizeOf(FBuf), ReadLen);
  129. IF err= false then begin //Îøèáêà ÷òåíèÿ
  130. ShowMessage ('Ïðîèçîøåë îáëîì :('); //Ñîîáùèì è âûõîäèì
  131. exit;
  132. end;
  133. BlockWrite(F, FBuf, ReadLen);
  134. GlobRead:=GlobRead+ReadLen;
  135. RestartPos := FileSize(F);
  136. Statusbar1.Panels[1].Text:=IntToStr(RestartPos)+'b';
  137. ProgressBar1.Position := RestartPos;
  138. Application.ProcessMessages;
  139. until (ReadLen < 1) or (Stop = true);
  140. Stop := False;
  141. Button1.Enabled := True;
  142. Button2.Enabled := False;
  143. InternetCloseHandle(HURL);
  144. InternetCloseHandle(HInet);
  145. CloseFile(F);
  146. end;
  147.  
  148. procedure TForm1.Button2Click(Sender: TObject);
  149. begin
  150. Stop := True;
  151. Progressbar1.Position:=0;
  152. Button1.Enabled := True;
  153. Button2.Enabled := False;
  154. end;
  155.  
  156. procedure TForm1.Timer1Timer(Sender: TObject);
  157. var
  158. ii:real;
  159. s:string;
  160. begin
  161. ii:=RestartPos/(FSize/100);
  162. s:=floattostr(ii);
  163. s:=copy(s, 1, 4);
  164.  
  165. if statusbar1.Panels[1].Text=statusbar1.Panels[2].Text then begin
  166. statusbar1.Panels[3].Text:='Ready';
  167. timer1.Enabled:=false;
  168. end else statusbar1.Panels[3].Text:=s+'%';
  169. end;


Evghenusi Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: 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

Alex Van Glukhman (статус: 7-ой класс), 2 декабря 2006, 00:08 [#1]:

Ваш код настолько удобочитаем, что изначально хочется уйти с данной страницы. Если вы не хотите получить ответ в такой же форме как и вопрос, то переформатируйте текст или выложите ссылку на файлы исходника
Alex Van Glukhman

Alex Van Glukhman (статус: 7-ой класс), 2 декабря 2006, 00:09 [#2]:

Прошу прощения но по почте мне прислали какие-то крякозябры - видимо предыдущий вопрос к админу
Ерёмин А.А.

Ерёмин А.А. (статус: *Администратор), 2 декабря 2006, 08:28 [#3]:

Всё дело в том, что автор вопроса, видимо, не заметил поля "Приложения" которое специально для исходных кодов и создано... Вопрос был откорректирован, с разосланными письмами ничего не сделать.
Dixa

Dixa (статус: Посетитель), 26 декабря 2008, 02:14 [#4]:

InternetSetFilePointer не работает
всё намного проще http://www.softtelecom.ru/algreg.htm
и прощайте бессонные ночи ))

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:58
Выполнено за 0.03 сек.