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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.08.2010, 18:26   #1
AmbaQ
Пользователь
 
Аватар для AmbaQ
 
Регистрация: 23.12.2009
Сообщений: 47
По умолчанию Отображение загрузки в прогрессбаре

Здравствуйте! Пишу я обновлялку для своих программа, она будет унивесальная, настраивается из ини файла. Всё уже готово, но осталась одна деталь, она не даёт мне покоя...это отображение загрузки файла обновления. Хочу осуществить её при помощи Прогрессбара, пробовал много спосабов, но не получилось.

Способ, которым я хочу это осуществить:

Узнаю размер файла, присваиваю его значение максимальному прогрессбара, после чего начинаю узнавать текущий размер файла на компе, и это значение присваиваю позиции прогрессбара. Проблема в том, что когда я пытаюсь узнать текущий размер файла программа выдаёт ошибку, так как файл занят и не доступен....как это обойти? Загрузка выполняется в отельном потоке, выполняется функцией:

Код:
FileOnNet:=ini1.ReadString('ver','urlini','amab'); // читаю ссылку из ини файла
LocalFileName:='Amba.ini';
sGauge1.Progress:=10;
  if GetInetFile(FileOnNet,LocalFileName)=True then
P.S

Поиск юзал. Прошу помочь, кто сможет дайте пример.
AmbaQ вне форума Ответить с цитированием
Старый 14.08.2010, 18:32   #2
HotKey
Новичок
Джуниор
 
Регистрация: 01.05.2010
Сообщений: 1
По умолчанию

Может быть, стоит ввести переменную и считать получаемые пакеты? И присваивать значение PrgressBar'а этой переменной?
Я сам в этом мало понимаю, но первая мысль, пришедшая на ум, озвучена выше.
HotKey вне форума Ответить с цитированием
Старый 14.08.2010, 23:33   #3
r9m
₪₪₪₪₪₪₪₪
Форумчанин
 
Аватар для r9m
 
Регистрация: 16.04.2007
Сообщений: 471
По умолчанию

Первое - нужно получать размер файла-обновления. Самый простой вариант - поле Content Length. Другое дело - этого поля просто может не быть (редко, но бывает). Вот кстати живой пример.
r9m вне форума Ответить с цитированием
Старый 15.08.2010, 00:28   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

r9m это не совсем то что ему надо..

AmbaQ

а ты попробуй по другому..
на источнике обновлений (веб сервер) создавай ini файл с уже готовыми данными..
Имя файла
Размер exe в байтах
и идентификатор по которому сравниваешь, допустим хеш-суммма или версия exe.

в программе которую сопираешся обновлять, все проще..
Скачиваешь файл, и в переменные передаёшь данные из ini, ппотом значения этих переменных присвайваешь чему надо..
для прогресс бара максимум будет это размер exe в байтах.

вримерно это выглядит так:

на веб-сервере есть файл exe , рядом ini вот такого содержания:
Цитата:
[File]
Name=FRG.exe
Size=1805824
Version=1.1.3.1578
скачиваем этот файл..
и переменым из var присвайваем значения:
Код:
var
  ExeFileName: string; //тут храним имя файла
  ExeFileVersion: string; //тут идентификатор сравнения версия файла
  ExeFileSize: Integer; //размер файла в байтах

begin

 try
    ini := TIniFile.Create(myDir + FuUpdList); //файл уже скачан 
    ExeFileName := ini.ReadString('File', 'Name', '0'); //присвайваем имя
    ExeFileVersion := ini.ReadString('File', 'Version', '0');//присвайваем id
    ExeFileSize := StrToInt(ini.ReadString('File', 'Size', '0')); //присвайваем размер..
    ini.Free;
  except
    Translator_MessageToLog('Файл FuUpdates.lst не может быть  прочитан!', 'The file FuUpdates.lst can not be read!', UpdaterForm.Log);
    Ini.Free;
    Terminate; //у меня все в потоке да и это кусок кода=0 
  end;
  UpdaterForm.FileProgress.MaxValue := ExeFileSize; //максимальным значением для прогрессбара  будет наш размер в байтах
  ....
{дальше сравниваешь идентификатор...
и в соответствии с этим как-то замещаем старое , новым}
Человек_Борща вне форума Ответить с цитированием
Старый 15.08.2010, 07:08   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,716
По умолчанию

А еще красноглазые системные программисты говорят, что у многих ВинАПИ функций для скачивания файлов есть возможность использовать callback-функции прогресса.
p51x вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Файлы загрузки Яр|/||< (^_^) Операционные системы общие вопросы 6 03.07.2009 09:55
Отображение скрытых файлов и папок и отображение розширения всех файлов beegl Общие вопросы Delphi 10 14.12.2008 22:02