Ver Mensaje Individual
  #3  
Antiguo 20-03-2007
papu24ar papu24ar is offline
Miembro
 
Registrado: abr 2006
Posts: 10
Reputación: 0
papu24ar Va por buen camino
si osea.. ya los habia visto pero keria hacerlo por ftp y descargar fila por fila.. no un solo zip.. pero ya lo solucione eso.. ahora lo que me gustaria que me dijeran es como hago para ponerle un progress bar a este codigo para saber cuando se completa la descarga y si se puede saber la velocidad de descarga. por que me vengo kemando la cabeza desde ayer mirando ejemplos y todo pero no entiendo :S (Sorry soy bastante nuevo)

Código:
Código Delphi [-]
procedure TfMenu.chk_nuevas_versionesClick(Sender: TObject);
// poner en uses:  WinInet, Registry, WinSock, StrUtils,  urlMon;
var
 vInst:string;      // almacena la versión instalada en el PC
 dir_exe:String;    // carpeta desde la que se ejecuta el *.exe
 dir_tmp:String;    // carpeta temporal, utilizada para descargar los ficheros
 fic_web_txt:String;// ruta para descargar fichero txt con la versión
 fic_pc_txt:String; // ruta en el pc donde se ha descargado fichero txt con la versión
 fic_web_zip:String;// ruta para descargar fichero ZIP con la actualización
 fic_pc_zip:String; // ruta en el pc donde se ha descargado fichero ZIP con la actualización
 params:string;     // parametros utilizados para decir a WINZIP como descargar el fichero
 nom_apli:String;   // nombre de la aplicación
 msg:string;        // variable para almacenar los mensajes
 b:Boolean;
 TS:TStrings;       // TStringList creada para leer el fichero
 Str:String;        // versión instalada en el Servidor
 fec:String;        // fecha de la nueva versión
 titulo:String;
 //----------------------------------------------------------------------------
 function DownloadFile(Source, Dest: string): Boolean;// función para descargar
  begin
    try
      Source := AnsiReplaceStr(Source, '/', '\');
      Result := UrlDownloadToFile(nil, PChar(Source), PChar(Dest), 0, nil) = 0;
    except
      Result := False;
    end;
  end;
 //----------------------------------------------------------------------------
 function  GetAppVersion:string; // función para obtener la versión instalada
   var
    Size, Size2: DWord;
    Pt, Pt2: Pointer;
   begin
     Size := GetFileVersionInfoSize(PChar (ParamStr (0)), Size2);
     if Size > 0 then
     begin
       GetMem (Pt, Size);
       try
          GetFileVersionInfo (PChar (ParamStr (0)), 0, Size, Pt);
          VerQueryValue (Pt, '\', Pt2, Size2);
          with TVSFixedFileInfo (Pt2^) do
          begin
            Result:= IntToStr (HiWord (dwFileVersionMS)) + '.' +
                     IntToStr (LoWord (dwFileVersionMS)) + '.' +
                     IntToStr (HiWord (dwFileVersionLS)) + '.' +
                     IntToStr (LoWord (dwFileVersionLS));
         end;
       finally
         FreeMem (Pt);
       end;
     end;
   end;
  //----------------------------------------------------------------------------
begin


// ini: Solo se deben modificar estas variables para adaptarlas a nuestra aplicación
  nom_apli   := 'VISOR';
  dir_tmp    := 'c:\temp';
  fic_web_txt:= 'http://www.paginaweb.es/ficheros/version_visor.txt';
  fic_pc_txt := 'c:\temp\version_visor.txt';
  fic_web_zip:= 'http://www.paginaweb.es/ficheros/visor_act.zip';
  fic_pc_zip := 'c:\temp\visor_act.zip';
  params     := '-e -o '+fic_pc_zip;  // -e = extract -o = sobreescribir
// fin: 

//    notas sobre parametros pasados al Winzip
//    -a add/replace files
//    -e extract /descomprimir ficheros
//    -f actualiza ficheros en destino
//    -t test archive
//    -o  no pregunta si queremos sobreecribir el fichero

  vInst:= GetAppVersion;                 // obtener la versión instalada
  dir_exe:=ExtractFilePath(paramstr(0)); // el directorio del ejecutable a actualizar

  If not DirectoryExists(dir_tmp) then
   if not createdir(dir_tmp) then
    begin
    raise exception.create('Proceso cancelado al no poder creárse la carpeta '+dir_tmp);
    exit;
    end;
  // descargamos el fichero de texto con información de la última versión
  b := DownloadFile(fic_web_txt,fic_pc_txt);

  if (b) then begin
    TS := TStringList.Create();
    TS.LoadFromFile(fic_pc_txt);
    Str := TS[0];// 1º linea del fichero, poner la versión del programa, ejem. 6.1.0.2
    fec := TS[1];// 2º linea del fichero, poner la fecha de la versión,  ejem. 14-11-2006
    TS.Free;
    DeleteFile(fic_pc_txt);
    msg:= 'Versión en este ordenador: '+ vInst+#13+
          'Versión en el Servidor____: ' + Str+' de '+fec;

          if vInst<>Str then  // si las versiones son distintas
          begin
          msg:=msg+#13+#13+'Quieres descargar la nueva versión';

         titulo:='Descargar actualización '+nom_apli;
         if application.MessageBox (pchar(msg),
         PCHAR(titulo),
         (MB_YESNO + MB_DEFBUTTON2 + MB_ICONQUESTION)) <> IDYES then exit;

          DownloadFile(fic_web_zip,fic_pc_zip);

          msg:=  'Ha descargado la nueva actualización, '+#13+
                 'al directorio '+dir_tmp+', para instalarla'+#13+
                 'en su ordenador no debe haber ningún'+#13+
                 'usuario conectado a la aplicación.'+#13+#13+
                 'Quiere instalar la nueva versión';

          titulo:='Actualizar '+nom_apli;
          if application.MessageBox (pchar(msg),
             PCHAR(titulo),
             (MB_YESNO + MB_DEFBUTTON2 + MB_ICONQUESTION)) <> IDYES then exit;
                 begin
                 ShellExecute(Handle, 'Open', 'WinZip32.exe', PCHAR(params), PCHAR(dir_exe), SW_NORMAL);
                 Application.Terminate;
                 end;
          end
          else
  Application.MessageBox((pChar(msg+#13+#13+'NO HAY NUEVAS ACTUALIZACIONES')) , 'Comprobación versiones', MB_ICONEXCLAMATION) ;
end
else
  ShowMessage('Esta comprobación solo se puede hacer'+#13+
              'en ordenadores conectados a Internet.'+#13+
              'Su equipo no tiene esta conexión'+#13+
              '- Proceso Cancelado -');
end;
Muchas Gracias por toda su ayuda
Responder Con Cita