Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Application Updater помогите разобраться


Автор: Yuranick 6.4.2010, 12:43
Здравствуйте, 

Есть пример http://www.delphisources.ru/pages/sources/internet/2007_year/application_updater.html

Помогите переделать под Delphi 2009

Автор: Alexeis 6.4.2010, 13:39
Цитата(Yuranick @  6.4.2010,  11:43 Найти цитируемый пост)
Помогите переделать под Delphi 2009 

   Новые версии делфи поддерживают все старые фичи. В чем сложности?

Автор: Yuranick 6.4.2010, 14:04
Код

{$I Directives.inc}
unit UDownloadThread;

interface

uses
  SysUtils, Classes, Forms, IdComponent, IdHTTP;

type
{>> Compatibilitй Indy9 <-> Indy10 }
{-$DEFINE Indy10}

  TDownloadThread = class(TThread)
  private
    FHTTP: TIdHTTP;
    FFileNum: Integer;
    FWorkCount: Integer;
    FWorkCountMax: Integer;
  protected
    procedure Execute; override;
    procedure WorkBegin(ASender: TObject; AWorkMode: TWorkMode;
     {$IFNDEF Indy10}const{$ENDIF} AWorkCountMax: Integer);
    procedure WorkEnd(ASender: TObject; AWorkMode: TWorkMode);
    procedure Work(ASender: TObject; AWorkMode: TWorkMode;
     {$IFNDEF Indy10}const{$ENDIF} AWorkCount: Integer);
    procedure DoUpdateForm;
    procedure DoFinish;
    procedure DoFail;
  public
    constructor Create;
    procedure Terminate; reintroduce;
  end;

implementation

uses
  UFrmMAJ;

constructor TDownloadThread.Create;
begin
  inherited Create(False);
  FreeOnTerminate := True;
end;

procedure TDownloadThread.Terminate;
begin
  inherited Terminate;
  if Assigned(FHTTP) and FHTTP.Connected then
{$IFDEF Indy10}
  // Ceci йvite sous Indy10 d'avoir une exception "normale" 
  FHTTP.DisconnectNotifyPeer;
{$ELSE}
  FHTTP.Disconnect;
{$ENDIF}
end;

procedure TDownloadThread.Execute;
var
  Stream: TFileStream;
  I: Integer;
begin
  FHTTP := TIdHTTP.Create(nil);
  try
    FHTTP.OnWorkBegin := WorkBegin;
    FHTTP.OnWorkEnd := WorkEnd;
    FHTTP.OnWork := Work;
    {>> Tйlйchargement des fichiers }
    for I := 0 to FrmMAJ.FInternetFiles.Count - 1 do
    begin
      { Arrиte si demandй }
      if Terminated then
        Exit;

      { Retient l'indice de boucle en global }
      FFileNum := I;

      { Crйe le flux }
      Stream := TFileStream.Create(GetTempFileName(FrmMAJ.FInternetFiles[I]),
       fmCreate);
      try
        try
          FHTTP.Get(FrmMAJ.FInternetFiles[I], Stream);
        except
          Synchronize(DoFail);
        end;
      finally
        Stream.Free;
      end;
    end;
    { Si tous les tйlйchargements ont fini normalement, on notifie }
    if not Terminated then
      Synchronize(DoFinish);
  finally
    FHTTP.Free;
  end;
end;

procedure TDownloadThread.WorkBegin(ASender: TObject; AWorkMode: TWorkMode;
 {$IFNDEF Indy10}const{$ENDIF} AWorkCountMax: Integer);
begin
  FWorkCount := 0;
  FWorkCountMax := AWorkCountMax;
  Synchronize(DoUpdateForm);
end;

procedure TDownloadThread.WorkEnd(ASender: TObject; AWorkMode: TWorkMode);
begin
  FWorkCount := 0;
  Synchronize(DoUpdateForm);
end;

procedure TDownloadThread.Work(ASender: TObject; AWorkMode: TWorkMode;
 {$IFNDEF Indy10}const{$ENDIF} AWorkCount: Integer);
begin
  FWorkCount := AWorkCount;
  Synchronize(DoUpdateForm);
end;

procedure TDownloadThread.DoUpdateForm;
begin
  if Terminated then
    Exit;
  with FrmMAJ do
  begin
    PB.Min := 0;
    PB.Max := 1000;
    PB.Position := FWorkCount * 1000 div FWorkCountMax;
    PB2.Min := 0;
    PB2.Max := FrmMAJ.FInternetFiles.Count;
    PB2.Position := FFileNum;
    LblInfo2.Caption := Format('Downloading file (%d of %d)'+
     sLineBreak + '%s (%.1f%%)', [FFileNum + 1, FrmMAJ.FInternetFiles.Count,
     FrmMAJ.FInternetFiles[FFileNum], FrmMAJ.PB.Position / 10]);
    LblInfo2.Visible := True;
  end;
end;

procedure TDownloadThread.DoFinish;
begin
  with FrmMAJ do
  begin
    PB.Position := 0;
    PB2.Position := 0;
    LblInfo2.Caption := '';
    NextState;
  end;
end;

procedure TDownloadThread.DoFail;
begin
  with FrmMAJ do
  begin
    FFrmState := fmsCancelled;
    ShowState;
    LblInfo2.Visible := True;
    LblInfo2.Caption := 'Error info: impossible download a ' +
                        'file "' + FrmMAJ.FInternetFiles[FFileNum] + '".';
  end;
end;

end.



компилятор не пропускает 
FHTTP.OnWorkBegin := WorkBegin;
...
FHTTP.OnWork := Work;

Автор: Snowy 6.4.2010, 14:12
{-$DEFINE Indy10}
замени на
{$DEFINE Indy10}
В комплекте 2010 идёт 10-я

Автор: Yuranick 7.4.2010, 09:59
Цитата(Snowy @ 6.4.2010,  14:12)
{-$DEFINE Indy10}
замени на
{$DEFINE Indy10}
В комплекте 2010 идёт 10-я

не помогло :(

Автор: Alexeis 7.4.2010, 12:03
Цитата(Yuranick @  7.4.2010,  08:59 Найти цитируемый пост)
не помогло :( 

Больше информации. Текст ошибки в студию.

Автор: Yuranick 7.4.2010, 22:55
Цитата(Snowy @ 6.4.2010,  14:12)
{-$DEFINE Indy10}
замени на
{$DEFINE Indy10}
В комплекте 2010 идёт 10-я

таки помогло - проглядел несоответствие типов
было
Код

procedure WorkBegin(ASender: TObject; AWorkMode: TWorkMode;
     {$IFNDEF Indy10}const{$ENDIF} AWorkCountMax: Integer);

надо
Код

procedure WorkBegin(ASender: TObject; AWorkMode: TWorkMode;
     {$IFNDEF Indy10}const{$ENDIF} AWorkCountMax: Int64);


можно закрывать - спасибо за помощь !

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)