![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Ребята подскажите пожалуйста, почему не работает поток в отдельном модуле, я с потоками не дружу если честно вообще...
камнями не кидайте, делал чисто для себя. так как озадачили на работе, и что бы пользователям постоянно не сообщать что нужно обновиться, решил написать модуль самообновления. Форма с прогресс баром то вроде открывается, но мало того что прогресс бар стоит на месте, так еще и файл даже не качается, пока не закроешь эту форму .... Помогите... Код:
procedure TForm1.FormCreate(Sender: TObject); begin Check_Update; end; Сам модуль авто обновления Код:
unit Autoupdate;
type
TUpdate = class(TThread)
protected
procedure Execute; override;
end;
var
Server:string;
FVersion:string;
FSize:string;
HTTP:TIdHTTP;
HTTP2:TIdHTTP;
UpdateForm:TForm;
Update:TUpdate;
UpdateList:TStringList;
TotalSize:integer;
i,n:Integer;
ProgressBar: TProgressBar;
Log:Tmemo;
Stream:TMemoryStream;
FCount:integer;
procedure Check_Update;
implementation
uses MainForm;
//Поток обновления приложения
procedure TUpdate.Execute;
begin
HTTP2:=TIdHTTP.Create(nil);
try
Stream:=TMemoryStream.Create;
for FCount:=0 to UpdateList.Count - 1 do
begin
if FCount mod 2 = 0 then
begin
Log.Lines.Add('Загрузка файла: '+UpdateList.Strings[FCount]);
Log.Lines.Add('Размер загружаемого файла: '+UpdateList.Strings[FCount+1]);
HTTP2.Get(Server+UpdateList.Strings[FCount],Stream);
Stream.SaveToFile(ExtractFilePath(ParamStr(0))+'\'+UpdateList.Strings[FCount]+'_');
Stream.Free;
end;
end;
except
on E: Exception do
ShowMessage (E.Message);
end;
end;
procedure HTTP2WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCountMax: Integer);
begin
ProgressBar.Max:=AWorkCountMax;
end;
procedure HTTP2Work(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer);
begin
ProgressBar.Position:=ProgressBar.Position+AWorkCount;
end;
procedure Check_Update;
begin
try
HTTP:=TIdHTTP.Create(nil);
Server:='http://************.ru/soft/' ;
//получаем версию файла на сервере
FVersion:=HTTP.Get(Server+'ver.txt');
if Form1.Vers = FVersion then
begin
ShowMEssage ('Вы используете актуальную версию программы!');
exit;
end;
if Form1.Vers < FVersion then
begin
//Получаем список файлов для обновления
UpdateList:=TStringList.Create;
UpdateList.Text:=HTTP.Get(Server+'FileList.txt');
//Подсчитаем общий объем файлов для скачивания
for I := 0 to UpdateList.Count-1 do
begin
if i mod 2 = 1 then
begin
TotalSize:=TotalSize + StrToInt (UpdateList.Strings[i]) ;
end;
end;
UpdateForm:=TForm.Create(nil);
UpdateForm.Position:=poDesktopCenter;
UpdateForm.Caption:='Обновление ...';
UpdateForm.Height:=205;
UpdateForm.Width:=300;
UpdateForm.BorderStyle:=bsToolWindow;
ProgressBar:=TProgressBar.Create(nil);
ProgressBar.Parent:=UpdateForm;
ProgressBar.Height:=30;
ProgressBar.Width:=295;
ProgressBar.Visible:=True;
Log:=TMemo.Create(nil);
Log.Parent:=UpdateForm;
log.Top:=40;
Log.Width:=295;
Log.Height:=200;
Log.ScrollBars:=ssVertical;
Log.ReadOnly:=True;
Log.Lines.Add('Количество файлов для обновления: '+IntToStr (UpdateList.Count-1));
UpdateForm.ShowModal;
//Создадим поток
Update:= TUpdate.Create(false);
Update.Priority:= tpNormal;
Update.FreeOnTerminate:= true;
end;
except
on E: Exception do ShowMessage (E.Message);
end;
end;
end.Последний раз редактировалось ApxaHGe1, 15.04.2017 в 16:38. |
|
#2
|
|||
|
|||
|
А ниче так, что форма модальная?
Код:
UpdateForm.ShowModal; |
| Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
ApxaHGe1 (15.04.2017)
| ||
|
#3
|
|||
|
|||
|
Так как бы на ней и хотелось бы отобразить процесс обновления в ProgressBar'е
т.е. я правильно понял, если форма была бы не модальная, то все обновлялось бы? Думаю что нет, и поэтому прошу помощи, в понедельник нужно сдать скомпилированный проект на работе.. что бы пользователи могли использовать готовое приложение, но как я говорил выше, без модуля автообновления будет трудно, каждый раз просить пользователей обновить приложение, т.к. будет допиливаться данное приложения, будут добавляться новые функции... Последний раз редактировалось ApxaHGe1, 15.04.2017 в 16:18. |
|
#4
|
|||
|
|||
|
Действительно, если изменить
Код:
UpdateForm.ShowModal; Код:
UpdateForm.Show; Код:
Количество файлов для обновления: 1 Загрузка файла: BAGIRA.exe Размер загружаемого файла: 7762944 НО, прогресс бар стоит на месте как его заставить шевелиться то ) |
|
#5
|
|||
|
|||
|
кидай таймер
|
|
#6
|
|||
|
|||
|
Цитата:
Код:
procedure TimerTimer(Sender: TObject); begin ProgressBar.Position:=Stream.Position; end; Ни какого результата прогрессс бар стоит на месте ) в логе через определнное время просто получаю "Обновление завершено" |