Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-06-2018
_CALI _CALI is offline
Miembro
 
Registrado: Mar 2008
Posts: 99
Poder: 11
_CALI Va por buen camino
acceder a propiedades desde propiedades agrupadas Tpersistent

Buenas, estoy creando un control personalizado que deriva de la clase TEdit, he incluido propiedades agrupadas que estan en otra
clase del tipo TPersistent, dichas propiedades necesitan acceder a las propiedades de la clase "host" que deriva del TEDit

Código Delphi [-]
type
 TProperties = class(TPersistent)
 private
     FDisabledColor: TColor;
     ...
 procedure SetDisabledColor(const Value: TColor);
 public
 published
   property DisabledColor: TColor read FDisabledColor write SetDisabledColor default clGray;
   ...
 end;


type
 TMiEdit = class(TEdit)
  private
    FProperties : TProperties;
  
 protected
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    property Properties: TProperties read FProperties write FProperties;
  end;


procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('MisControles', [TMiEdit]);
end;

{ TProperties }

procedure TProperties.SetDisabledColor(const Value: TColor);
begin
 if Value <> FDisabledColor then
    begin
    if not enabled then //<----aqui quiero acceder a la propiedad ENABLED de mi clase TMiEdit.
       FDisabledColor := Value
    end;

end;




{ TMiEdit }

constructor TMiEdit.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FProperties := TProperties.Create;
  FProperties.FDisabledColor := clGray;
end;

destructor TMiEdit.Destroy;
begin
  FProperties.Free;
  inherited Destroy;
end;



end;

end;

Gracias de Antemano!!

Última edición por _CALI fecha: 28-06-2018 a las 16:07:20.
Responder Con Cita
  #2  
Antiguo 28-06-2018
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: Dec 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.099
Poder: 30
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.
Cita:
Empezado por _CALI Ver Mensaje
Código Delphi [-]
...
procedure TProperties.SetDisabledColor(const Value: TColor);
begin
 if Value <> FDisabledColor then
    begin
    if not enabled then //<----aqui quiero acceder a la propiedad ENABLED de mi clase TMiEdit.
       FDisabledColor := Value
    end;
end;
...
Es que la clase TProperties no hereda de TMiEdit ni compone ninguna instancia de ella. No está enterada de la existencia de la clase TMiEdit y por tanto no puede hacer referencia a ningún método o atributo de ella.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 29-06-2018
_CALI _CALI is offline
Miembro
 
Registrado: Mar 2008
Posts: 99
Poder: 11
_CALI Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola.

Es que la clase TProperties no hereda de TMiEdit ni compone ninguna instancia de ella. No está enterada de la existencia de la clase TMiEdit y por tanto no puede hacer referencia a ningún método o atributo de ella.

Saludos
Gracias por responder ecfisa, mas o menos suponía lo que indicas, la mejor opción solución que busque por la web fue crear un evento en la clase TPersistent donde notifica los cambios
de las propiedades de TPeristent a la clase contenedora ( TMiEdit ) para hacer las acciones correspondientes. Funciona bien!

Muchas Gracias !!

Código Delphi [-]
{TProperties}
TProperties = class(TPersistent)
  private
    FDisabledColor: TColor;
    ...

    FOnChange: TNotifyEvent;
    procedure Changed;
    procedure SetDisabledColor(Value: TColor);
   
   ...
end;

procedure TProperties.Changed;
begin
  if Assigned(FOnChange) then
    FOnChange(Self);
end;

procedure TProperties.SetDisabledColor(Value: TColor);
begin
  if FDisabledColor <> Value then
  begin
    FDisabledColor := Value;
    Changed; <<---notifico a la clase contenedora que se ha cambiado el color
  end;
end;



{TMiEdit}

constructor TMiEdit.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FProperties := TProperties.Create;
  FProperties.OnChange := PropertiesChanged; <<---aqui se asigna el procedimiento local  al evento de Tpersistent
  ...
end;

procedure TMiEdit.PropertiesChanged(Sender: TObject);
begin
  if Enabled then <<---aqui por fin puedo hacer referencia a mi mismo objeto
  begin
    inherited Color := Color;
    Font.Color := FProperties.EnabledTextColor;
  end
  else
  begin
    inherited Color := FProperties.DisabledColor;
    Font.Color := FProperties.DisabledTextColor;
  end;
end;
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
Acceder modificar propiedades publicas de una clase desde otra unidad nsd OOP 1 08-08-2013 04:20:48
Acceder a propiedades componentes de un form José Luis Garcí OOP 15 20-03-2010 11:33:38
Acceso a las propiedades de un objeto desde el editor de propiedades Hugo OOP 0 24-11-2006 12:58:22
Acceder a las propiedades protegidas de un DBGrid gluglu Varios 16 12-11-2005 16:35:25
Acceder a las propiedades del componente LucasArgentino Varios 1 09-11-2004 15:53:35


La franja horaria es GMT +2. Ahora son las 05:36:41.


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