Einzelnen Beitrag anzeigen

FaNIX

Registriert seit: 8. Okt 2007
36 Beiträge
 
#3

Re: Application non responsive with Progress Bar

  Alt 1. Feb 2008, 07:53
Sure...

Button code that creates an instance of the class, and calls the Update_Appl_Libraries method that connects to the ftp, transfers the files, and updates the progress bar on the main form.


Delphi-Quellcode:
type
  TForm3 = class(TForm)
    Button1: TButton;
    MainProgress: TProgressBar;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
      fo_Conn : TADOConnection;
  public
    { Public declarations }
  end;

var
  Form3: TForm3;

Button code that creates the instance of the class
Delphi-Quellcode:
procedure TForm3.Button1Click(Sender: TObject);
var
  oUpdateLib : Tdte_Update_Library_DB;
begin

   oUpdateLib := Tdte_Update_Library_DB.Create(Fo_Conn);

   //Set the Progress Bar on the main form to a class reference
   oUpdateLib.Set_Progress_Bar := MainProgress;

   if oUpdateLib.Update_Appl_Libraries then
   begin
      ShowMessage('Updates was installed, application will now restart.');
   end;

end;
Delphi-Quellcode:


Class Method:


  private
    Fo_ProgressBar : TProgressBar;

  public
    property Set_Progress_Bar : TProgressBar READ Fo_ProgressBar WRITE Fo_ProgressBar;


{==============================================================================}
function Tdte_Update_Library_DB.Update_Appl_Libraries : Boolean;
var
  oQry : TADOQuery;
  sResult : String;
  oFile_Version : Assembly;
  oDBFile_Version : System.Version;
  iPosInc : Integer;
  iPos : Integer;
begin

  if Flst_Libraries.Count = 0 then
  begin
    //Calculate the Directory structure of the source Directory.
    CalcDirStructure(Flst_Libraries,sExePath,'*.dll');
    CalcDirStructure(Flst_Libraries,sExePath,'*.exe');
  end;

  try

    oQry := TADOQuery.Create(nil);
    oQry.Connection := Fo_Connection;
    oQry.SQL.Add('select * from lvr_Lib_Version_Ref');
    oQry.Open;

    Fo_ProgressBar.Position := 0;
    iPosInc := Round(100 / oQry.RecordCount);
    iPos := iPosInc;

    while not oQry.Eof do
    begin
      Fo_ProgressBar.Position := iPos;

      if FileExists(sExePath + oQry.FieldByName('lvr_Library').AsString) then
      begin

        oDBFile_Version := System.Version.Create(oQry.FieldByName('lvr_Version').AsString);
        oFile_Version := Assembly.LoadFrom(sExePath + oQry.FieldByName('lvr_Library').AsString);

        if oDBFile_Version.CompareTo(oFile_Version.GetName.Version) > 0 then
        begin
          Move_Old_Lib(oQry.FieldByName('lvr_Library').AsString);

          f_fdn_b_FTP_File(Fs_FTP_Host,
                           Fs_FTP_User,
                           Fs_FTP_Pass,
                           Fs_FTP_Folder_Get + oQry.FieldByName('lvr_Library').AsString,
                           sExePath + oQry.FieldByName('lvr_Library').AsString,
                           sResult,21,'GET');
          Result := True;
        end;

      end
      else
      begin //File does not exist on local machine,so just copy it.

        f_fdn_b_FTP_File(Fs_FTP_Host,
                         Fs_FTP_User,
                         Fs_FTP_Pass,
                         Fs_FTP_Folder_Get + oQry.FieldByName('lvr_Library').AsString,
                         sExePath + oQry.FieldByName('lvr_Library').AsString,
                         sResult,21,'GET');
        Result := True;

      end;

      FreeAndNil(oDBFile_Version);
      FreeAndNil(oFile_Version);

      oQry.Next;
      iPos := iPos + iPosInc;
    end;
    
  finally
    FreeAndNil(oQry);
    Fo_ProgressBar.Position := 0;
  end;

end;
  Mit Zitat antworten Zitat