Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 22.08.2010, 22:13
kardinal94 kardinal94 вне форума
Прохожий
 
Регистрация: 25.04.2010
Сообщения: 15
Репутация: 10
По умолчанию Зависание программы

Существует такая ситуация:
У меня есть программа, она автоматически обновляется через интернет. Обновление происходить с помощью другого EXE файла. то есть главная закрывается и открывается апдейтер, который удаляет страрую версию основной программы и скачивает новую.
Загрузка происходит с помощью:
Код:
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;
Ну при нажатии на кнопку эта часть:
Код:
var FileOnNet, LocalFileName: string;
verin:tinifile;
begin
   FileOnNet:='...';
   LocalFileName:='project2.exe';
          application.ProcessMessages;
   if GetInetFile(FileOnNet,LocalFileName)=True then
      begin
      ShowMessage('Обновление завершено!');
      verin:=tinifile.Create('VerIn.ini');
      verin.WriteString('Ver','Ver', edit1.Text);
      end
   else
      ShowMessage('Ошибка! Проверьте ваши настройки интернета. При необходимости обратитесь в тех службу.'); 
Так теперь собстенно проблема в другом. Мне надо получать размеры файлов на сервере и на компе. На компе я получаю с помощью:
Код:
function GetFileSize(FileName: String): Integer;
var
  FS: TFileStream;
begin
  try
    FS := TFileStream.Create(Filename, fmOpenRead);
  except
    Result := -1;
  end;
  if Result <> -1 then Result := FS.Size;
  FS.Free;
end;
А на сервере:
Код:
HTTP := TIdHTTP.Create(nil);

 HTTP.Head('http://promous.ru/Project2.exe');
 Razmer := HTTP.Response.ContentLength; //размер файла
 HTTP.Free;
 Razmer := Round (Razmer / 1024);
Edit3.text:=IntToStr (Razmer) + ' KB';
Проблема в том, что при загрузке значение размера файла на компе должно меняться каждое мгновение, но это не происходит, программа на время загрузки просто подвисает, а потом выдает, что успешно обновился. Как можно решить данную проблему
Ответить с цитированием
  #2  
Старый 22.08.2010, 23:34
Asinkrit Asinkrit вне форума
Местный
 
Регистрация: 29.10.2009
Сообщения: 446
Репутация: 271
По умолчанию

Напиши так:
Код:
 ...
  Edit3.text:=IntToStr (Razmer) + ' KB';
  Application.ProcessMessages;
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:29.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter