Ver Mensaje Individual
  #3  
Antiguo 29-06-2018
_CALI _CALI is offline
Miembro
 
Registrado: mar 2008
Posts: 99
Reputación: 17
_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