Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #6  
Antiguo 10-02-2011
Avatar de eflosten
eflosten eflosten is offline
Miembro
 
Registrado: abr 2010
Posts: 24
Poder: 0
eflosten Va por buen camino
Lo que me llama la atención es que si pongo este código en el lugar donde creo el hilo, funciona perfectamente:

Código Delphi [-]
// HiloFTP:=THiloFTP.CreateLista(SlVersionesDescargables,lblProgDescarga);// HiloFTP.execute;
 FTP:=TIdFTP.Create(nil);
  FTP.Username := '******';
  FTP.Password := '******';
  FTP.Host := '*********';

  FTP.Connect;
  FTP.List(SlVersionesDescargables,'',false);

Vamos, que es alguna historia dentro del hilo. Voy a poneros el código del TThread completo, a ver si es alguna metedura de pata que no consigo ver en la propia creación del hilo (repito que es el 2º hilo que programo, estoy muy pez aún en ese tema).

Código Delphi [-]
unit unitHiloFTP;
interface
uses IdFTP, IdBaseComponent, IdComponent, IdTCPConnection,
 IdTCPClient, IdExplicitTLSClientServerBase, Variants, Classes, messages, dialogs,StdCtrls, ComCtrls, Sysutils;
 type THiloFtp = class(TThread)
  private
    modo:string;
    Barra:TProgressBar;
    lblProgreso:TLabel;
    procedure FTPWork(ASender: TObject; AWorkMode: TWorkMode;
   AWorkCount: Integer);
    procedure BajarArchivo;
    procedure ListarArchivos;
    procedure InicializarFTP;
  protected
   procedure Sincronizar;
  public
   FTP: TIdFTP;
   listaArchivos:TStringList;
   RutaRemota: String;
   ArchOrigen,ArchDestino: string;
   tamArchivo,Progreso:integer;
      Terminated: boolean;
   constructor CreateDescarga(CarpetaRemota,ArchRemoto,ArchLocal:string;labelProceso:Tlabel;barraProceso: TProgressBar);overload;
   constructor CreateLista(lista: TStringList;carpeta:string;labelProceso:TLabel);overload;
   procedure Execute; override;
end;
implementation
constructor THiloFTP.CreateDescarga(CarpetaRemota,ArchRemoto,ArchLocal:string;labelProceso:Tlabel;barraProceso: TProgressBar);
begin
 inherited Create(False);
  Terminated := false;
 InicializarFTP;
 Barra:=barraProceso;
 RutaRemota:=carpetaRemota;
 ArchOrigen:=ArchRemoto;
 ArchDestino:=ArchLocal;
 lblProgreso:=labelProceso;
 modo:='DESCARGA';
end;
constructor THiloFTP.CreateLista(lista: TStringList;Carpeta: string;labelProceso: Tlabel);
begin
 inherited Create(false);
 Terminated := false;
 InicializarFTP;
 lblProgreso:=labelProceso;
 listaArchivos:= lista;
 RutaRemota:=carpeta;
 modo:='LISTA';
end;
Procedure THiloFTP.InicializarFTP();
begin
 FTP:=TIdFTP.Create(nil);
 FTP.OnWork :=FTPWork;
 FTP.Username := '******';
 FTP.Password := '******';
 FTP.Host := 'ftp.mihost.es';
end;
procedure THiloFTP.Sincronizar();
begin
 Barra.Position := Progreso div 1024;
 if lblProgreso <> nil then lblProgreso.Caption:=intToStr(Progreso div 1024) + ' / '+IntToStr(tamArchivo)+' KB';
end;
procedure THiloFTP.FTPWork(ASender: TObject; AWorkMode: TWorkMode;
 AWorkCount: Integer);
begin
 Progreso:=AWorkCount;
 Synchronize(Sincronizar);
end;
procedure THiloFTP.Execute;
begin
 if modo = 'DESCARGA' then BajarArchivo
 else if modo = 'LISTA' then ListarArchivos;
 Terminated:=true;
 Terminate;
end;
procedure THiloFTP.BajarArchivo;
var FS: TFileStream;
begin
 try
   if lblProgreso <> nil then lblProgreso.caption:='Abriendo archivo local...';
   FS:=TFileStream.Create(archDestino,FmOpenWrite);
   if lblProgreso <> nil then lblProgreso.caption:='Conectando...';
   FTP.Connect;
   FTP.ChangeDir(rutaRemota);
   if lblProgreso <> nil then lblProgreso.caption:='Descargando...';
   tamArchivo:=FTP.Size( ExtractFileName( archOrigen ) ) div 1024;
   FTP.Get( archOrigen, fs, False );
   if lblProgreso <> nil then lblProgreso.caption:='Desconectando...';
   FTP.Disconnect;
   if lblProgreso <> nil then lblProgreso.caption:='Desconectado.';
   fs.free;
  except
   on e: exception do Showmessage( 'No se ha podido descargar el archivo:'+#13#10+e.Message);
  end;
end;
procedure THiloFTP.ListarArchivos;
begin
 try
  listaArchivos.Clear;
  if lblProgreso <> nil then lblProgreso.caption:='Conectando...';
  FTP.Connect;
  if lblProgreso <> nil then lblProgreso.caption:='Conectado';
  //FTP.ChangeDir(rutaRemota);
  if lblProgreso <> nil then lblProgreso.caption:='Buscando archivos';
  FTP.List(ListaArchivos,'',false);
  if lblProgreso <> nil then lblProgreso.caption:='Desconectando...';
  FTP.Disconnect;
  if lblProgreso <> nil then lblProgreso.caption:='Desconectado';
 finally
  if FTP.connected then FTP.Disconnect;
    Terminated := True;
  end;
end;
end.


Edit:

Neftali, el problema no es con la variable en sí, porque puedo acceder a ella desde el hilo sin problemas, e incluso FTP.List sin parámetros tambien me falla.
Edit 2:
He probado a tratarlo directamente sobre un TSTringList local a la función, y me da el mismo error. Me llama la atención que SIEMPRE el access violation es a la misma direccion de memoria: 00000250

Última edición por eflosten fecha: 10-02-2011 a las 18:22:24.
Responder Con Cita
 


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Llamada a Procedimiento Almacenado desde dentro de un Thread MontarazAE MS SQL Server 2 29-05-2007 17:46:34
Mover posiciones dentro de un list Box creus Varios 13 04-11-2006 18:03:44
Thread bendito thread...se me pierde la ventana Seba.F1 API de Windows 5 02-02-2006 00:16:30
Conocer la posición de un Thread dentro del Listado de ActiveThreads del IdTCPServer R_Richards Internet 2 05-02-2005 23:07:38
TidFTP MaGNa Internet 0 10-01-2005 14:00:10


La franja horaria es GMT +2. Ahora son las 09:01:38.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi