|
|
Регистрация | << Правила форума >> | 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. |