Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Notificación a la clase padre.. (https://www.clubdelphi.com/foros/showthread.php?t=65089)

yapt 19-11-2009 12:18:18

Notificación a la clase padre..
 
Hola a todos,

necesito (y voy un poco perdido) una clase X que puede contener (ser padre) de ninguna, una o varias clases Y. Algo así como un LISTBOX que contiene (en su Tobject), varias otras clases (todas iguales).

Donde reside el problema es en que necesito que un cambio en la clase Y, notifique a la clase X (padre) de este cambio, para aplicar un cambio a todas las clases Y hijas.

No sé si me explico pero creo que no.

:-(

Creo que debo usar una Abstract Factory.... aunque no lo tengo claro.

Bueno, si no se me entiende.... me extiendo más.

Saludos.

Crandel 19-11-2009 12:46:04

No se entiende :confused: Creo que tienes un poco enredado los conceptos de herencia y contención.

Intenta explicar un poco mas tu problema.

yapt 19-11-2009 13:21:09

Hola Crandel, pues si, tienes razón. Tengo un poco enredado todo eso.

Me explico.

Quiero hacer lo siguiente:
- Un componente X (ya lo tengo hecho) que es un reloj/cronometro.
- Una clase que alberga 0,1 o varios ComponentesX (podría ser un Form si el componente fuese visual).

Pero solo uno de los ComponentesX puede estar acumulando tiempo. Es decir, es una especie de reloj de ajedrez, donde un solo reloj funciona a la vez. Pero en lugar de haber 2 relojes siempre, el número es variable.

La estructura sería así:
TCronometro....

TConjuntodeCronometros: (0, 1 o varios TCronometro)

El "evento" que debe "propagarse" al resto de ComponentesX activos, es que cuando se activa un TCronometro (componenteX) para que empiece/continue acumulando tiempo, el resto deben pararse.

Realmente es un poco más complicado, pero creo que solucionando esto, puedo solucionar el resto.

Creo que ahora me habré explicado un poco mejor. Eso espero.

Saludos.

Crandel 19-11-2009 14:18:40

Si, ahora se entiende mucho mejor ;)

En tu caso tendrías una clase TCronometro que es la que debe avisar cuando se ha iniciado. Por lo que debes implementar un evento utilizando la clase TNotifyEvent.

Código Delphi [-]
TCronometro = class
private
  FStartEvent: TNotifyEvent;
  ...
public
  procedure Start;
  procedure Stop;
  ... 
  property OnStart: TNotifyEvent read FStartEvent write FStartEvent;
end;

y lo implementas asi:

Código Delphi [-]

procedure TCronometro.Start;
begin
...
if Assigned(FStartEvent) then FStartEvent(self);
end;


por otro lado tendrías tu clase contenedora

Código Delphi [-]
TManjejadorHorarios = class
private
  ...
public
  Cronometros: Array of TCronometro;
  procedure InicioCronometro(Sender: TObject);
end;

donde debes asignar a un método propio la llamada del evento, algo como:
Código Delphi [-]
Cronometros[0].OnStart := InicioCronometro;

Espero no haberte enredado mucho. Cualquier duda volve a preguntar

yapt 19-11-2009 16:42:47

Muchas gracias Crandel... Creo que ya tengo "tajo" para un par de días.

Es para un programa "free", así que cuando lo acabe os aviso para que lo podais ver. Aunque no sé si admitiré opiniones.

Seguro que vuelvo con mas cuestiones. Es todo un alivio saber que estais por aquí. :-)

Saludos.


La franja horaria es GMT +2. Ahora son las 18:35:31.

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