Club Delphi  
    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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-06-2007
chelox chelox is offline
Miembro
 
Registrado: sep 2006
Posts: 13
Poder: 0
chelox Va por buen camino
crear un evento en una clase?

hola,
mi problema es que no logro comprenderlo y no puedo hacer que funcione, parece que es muy simple, pero bueno... espero de su ayuda.

esto está dentro de una unidad que la utilizo en un form.
cada vez que presiono un boton, se ejecuta en un thread para enviar una archivo.
Luego de que termina de enviar el archivo necesito saber que el archivo fue enviado.
Código Delphi [-]
 
type
  TonFinish = procedure(Sender: TObject) of object;
 EnviarFila = class(TThread)
  private
    FonFinish : TonFinish;
  protected
    procedure Execute(); override;
  public
    constructor Create(dire:String;file1:String);
    procedure pushfile(dire,file1:String);
  published
    property onFinish: TonFinish read FonFinish write FonFinish;
  end;
 
{la funcion que envia el archivo:}
 
procedure EnviarFila.pushfile();
begin
... envia el archivo....
 if Assigned(FonFinish) then FonFinish(Self);
End;

 
 
{Aca el problema, en la unidad unit1 del form1:
 
Esto es lo único que se me ocurrió, pero no pasa nada:
} 
type
  TEnviarFila = class(EnviarFila)
    procedure onFinish(Sender: TObject);
  end;
 
{el procedimiento:}
procedure TEnviarFila.onFinish(Sender: TObject);
begin
... termino ....
end;
Gracias

Última edición por marcoszorrilla fecha: 06-06-2007 a las 20:12:25.
Responder Con Cita
  #2  
Antiguo 06-06-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Por favor utiliza TAG's cuando añadas código Delphi a los mensajes.

¿Has ejecutado paso a paso el código? ¿Se lanza el evento? ¿Lo has asignado a la instancia del objeto (sea en diseño o en ejecución)?
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 06-06-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
No estas creando una instancia de EnviarFila, sino heredando de ella.
Código Delphi [-]
type
TEnviarFila = class(EnviarFila)

La definición de EnviarFila está bien, lo que tienes que cambiar es el uso en el Form1.

Tienes que instanciar EnviarFila y asignar ese evento:
Código Delphi [-]
type
TForm1 = class(Tform)
private
procedure AlTerminar(Sender: TObject);
end;

procedure TForm1.FormCreate(Sender: TObject);
var x :EnviarFila;
begin
  x := EnviarFila.Create(false);
  x.OnFinish := AlTerminar;
  x.PushFile;
end;

procedure TForm1.AlTerminar(Sender: TObject);
begin
Showmessage('termino');
end;

la asignación "x.OnFinish := AlTerminar;" es idéntico a cuando tú en el inspector de objetos, das un doble clic en un evento para "rellenarlo con código".

En principio, para ejecutar un TThread, se debe usar su método Execute, tú usas PushFile, ya eso no es cuestión de eventos, sino de TThreads. Si no funciona como esperas, pon el código completo del TThread.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #4  
Antiguo 06-06-2007
chelox chelox is offline
Miembro
 
Registrado: sep 2006
Posts: 13
Poder: 0
chelox Va por buen camino
Hola,

eso mas o menos quise hacer en un momento pero no se que problema de diferentes tipo me salia.
Puede ser que esto cuando es en un componente lo hace en la extensión dfm?
Buego, ahora lo voy a probar y veremos.

muchas Gracias.
Responder Con Cita
  #5  
Antiguo 06-06-2007
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Comentarios adicionales:

Si la firma de tu evento va a ser (Sender: TObject), no veo razón para declarar un nuevo tipo. Podes usar el tipo TNotifyEvent, que parece el adecuado para tu caso.

Luego, si existe la posibilidad de enviar varios archivos concurrentemente, debes realizar algún tipo de sincronización para hacer el código "Thread Safe", sobre todo si en la implementación del método AlTerminar vas a interactuar con la VCL. En ese caso, es mejor que este método se ejecute dentro del hilo principal de la aplicación. Recordá que la VCL no es Thread Safe y esta responsabilidad recae en vos (para mi, tiene sentido).

Si no tenes idea de lo que estoy hablando, mirá la ayuda del método Synchronize de la clase TThread, creo que te aclarará las cosas.

Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
Respuesta


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
Crear una clase y asignar objetos como propiedades leanfreue OOP 4 13-04-2007 01:08:33
Crear eventos para una clase DarkByte OOP 10 07-12-2005 21:02:28
Crear clase. Basico de POO. DarkByte OOP 17 24-08-2005 18:37:21
Ayuda para crear una clase estebanx OOP 0 10-03-2005 17:36:49
Error al crear una instancia de clase jplj OOP 2 15-02-2005 12:52:07


La franja horaria es GMT +2. Ahora son las 13:06:03.


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