Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.08.2008, 17:23   #1
JRcoker
Форумчанин
 
Аватар для JRcoker
 
Регистрация: 18.07.2008
Сообщений: 119
По умолчанию Зависание

Вобщем модуль Wininet собственно функция...
Код:
function GetInetFile(const fileURL, FileName: String): boolean;
const BufferSize = 1024;
var hSession, hURL: HInternet;
Buffer: array[1..BufferSize] of Byte;
BufferLen: DWORD;
f: File;
sAppName: string;
begin
   Result:=False;
   sAppName := ExtractFileName(Application.ExeName);
   hSession := InternetOpen(PChar(sAppName), INTERNET_OPEN_TYPE_PRECONFIG,
         nil, nil, 0);
   try
      hURL := InternetOpenURL(hSession,
      PChar(fileURL),nil,0,0,0);
      try
         AssignFile(f, FileName);
         Rewrite(f,1);
         repeat
            InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen);
            BlockWrite(f, Buffer, BufferLen)
         until BufferLen = 0;
         CloseFile(f);
         Result:=True;
      finally
      InternetCloseHandle(hURL)
      end
   finally
   InternetCloseHandle(hSession)
   end
end;
Ну и сама процедура...
Код:
procedure TForm2.Button1Click(Sender: TObject);
var FileOnNet, LocalFileName: string;
begin
   FileOnNet:='http://localhost/11.png'';
   LocalFileName:='1.png';
   if GetInetFile(FileOnNet,LocalFileName)=True then
   begin
   Image1.Picture.LoadFromFile('1.png');
   end
   else
   ShowMessage('Произашел облом!:(')
end;
Работает все нормально но не пойму как убрать зависание во время закачки...
Улыбайся...Люди любят идиотов...
JRcoker вне форума Ответить с цитированием
Старый 05.08.2008, 18:11   #2
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию

используй application.processmessages
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer
Ozerich вне форума Ответить с цитированием
Старый 05.08.2008, 22:11   #3
JRcoker
Форумчанин
 
Аватар для JRcoker
 
Регистрация: 18.07.2008
Сообщений: 119
По умолчанию

Приведи пример...
Улыбайся...Люди любят идиотов...
JRcoker вне форума Ответить с цитированием
Старый 05.08.2008, 23:09   #4
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,547
По умолчанию

Цитата:
Приведи пример...
Ставте Application.ProcessMessages в том месте, где идет долгий цикл, что бы прога не висела.
Arigato вне форума Ответить с цитированием
Старый 05.08.2008, 23:35   #5
JRcoker
Форумчанин
 
Аватар для JRcoker
 
Регистрация: 18.07.2008
Сообщений: 119
По умолчанию

Ставлю...Всеровно виснет...
Улыбайся...Люди любят идиотов...
JRcoker вне форума Ответить с цитированием
Старый 06.08.2008, 00:14   #6
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию

repeat
InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen);
BlockWrite(f, Buffer, BufferLen)
application.processmessages
until BufferLen = 0;
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer
Ozerich вне форума Ответить с цитированием
Старый 06.08.2008, 00:36   #7
JRcoker
Форумчанин
 
Аватар для JRcoker
 
Регистрация: 18.07.2008
Сообщений: 119
По умолчанию

По проще можно?..
Улыбайся...Люди любят идиотов...
JRcoker вне форума Ответить с цитированием
Старый 06.08.2008, 08:14   #8
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

Выноси функцию в поток и всё будет нормально.
FaTaL вне форума Ответить с цитированием
Старый 06.08.2008, 08:29   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
По проще можно?..
Куда уж проще? Можно конечно отдельным потоком закачивать файл, но вариант выше самый простой.
Кстати прошелся бы отладчиком на предмет зависающих мест проги...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
"Зависание" программы. no. Общие вопросы Delphi 2 19.02.2007 08:44