Ver Mensaje Individual
  #7  
Antiguo 18-09-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Reputación: 28
jachguate Va por buen camino
Cool

Hola.

Como ya te ha dicho miguel, lo que te hace falta es leer un buen manual, libro o tutorial de creación de componentes.

Basta con que uses una de las técnicas ya descritas por mi, por ejemplo los apuntadores.

Te diré de manera rápida una forma general de solucionarlo, sin pretender que esto se vuelva un curso de POO o de componentes.

Código Delphi [-]
Type
  TmiClase = class(TComponent)
  private
    FLabel : TLabel;  //este es un apuntador a un label, donde podremos
                 // publicar algun dato.  Este label normalmente será parte de
                 // la forma que use el componente.
    Procedure SetLabel(value : TLabel);
    Procedure Notification(AComponent : TComponent; Operation : TOperation); override;
  public
    Procedure HacerAlgo;
    Property Label : TLabel read FLabel write SetLabel;  
  // Publicación de la propiedad. Si queres que se vea en el inspector de 
  // objetos, pasala a la seccion published.  En este hipotetico caso, 
  // el componente no se usará en tiempo de diseño, por lo que no hace 
  // falta.
  end;

implementation

Procedure TMiClase.SetLabel(value : TLabel);

Begin
  FLabel := value;
  if assigned(FLabel) Then
    FLabel.FreeNotification(Self);
  // esto es para que el componente notifique si se destruye, a manera de no
  // conservar referencias a objetos que no existen, lo que provocaria un GPF
end;

Procedure TMiClase.Notification(AComponent : TComponent; Operation : TOperation); 

Begin
  if (operation = opRemove) and (AComponent = FLabel) Then
    FLabel := nil;
  // liberamos la referencia
end;

Procedure TMiClase.HacerAlgo;

Begin
  if assigned(FLabel) Then
    FLabel.Caption := 'Hola';
  // mostramos algo en el label, que estará en la forma que use el
  // componente, e incluso en otra forma.
end;

// ahora el componente se crearia algo asi:

Procedure TForm1.Button1Click(sender : TObject);

Var
  newComponent : TMiComponente;

Begin
  newComponent := TMiComponente.Create;
  newComponent.Label := Label1;
  newComponent.HacerAlgo;
end;

Lamento que las explicaciones sean escuetas, espero que el código se explique por si mismo. He tratado de aclarar con comentarios los puntos que pueden parecerte cripticos.

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