Hallo,
ich habe Dir mal den Source zusammengestellt (ungetestet).
So soll es aber funktionieren
Delphi-Quellcode:
TMyFont =
class(TFont)
private
FMyFrontProp: Integer;
procedure SetMyFrontProp(
const Value: Integer);
protected
procedure Changed;
override;
public
procedure Assign(Source : TPersistent);
override;
published
// MyFrontProp wird im OI unter TLabel.MyFont angezeigt
property MyFrontProp : Integer
read FMyFrontProp
write SetMyFrontProp;
end;
TMyLabel =
class(TLabel)
private
FMyFont : TMyFont;
procedure FontChange(Sender : TObject);
procedure SetMyFont(
const Value: TMyFont);
public
constructor Create(AOwner : TComponent);
override;
destructor Destroy;
override;
published
property MyFont : TMyFont
read FMyFont
write SetMyFont;
end;
{ TMyFont }
procedure TMyFont.Assign(Source: TPersistent);
begin
If Source
is TMyFont
then
FMyFrontProp:=TMyFont(Source).MyFrontProp;
inherited Assign(Source);
end;
procedure TMyFont.Changed;
begin
// hier kannst Du noch etwas machen bevor OnChange feuert
inherited Changed;
end;
procedure TMyFont.SetMyFrontProp(
const Value: Integer);
begin
If FMyFrontProp<>Value
then
begin
FMyFrontProp:=Value;
Changed;
end;
end;
{ TMyLabel }
constructor TMyLabel.Create(AOwner: TComponent);
begin
inherited Create(AOWner);
FMyFont:=TMyFont.Create;
FMyFont.OnChange:=FontChange;
end;
destructor TMyLabel.Destroy;
begin
FMyFont.Free;
inherited Destroy;
end;
procedure TMyLabel.FontChange(Sender: TObject);
begin
// Wird aufgerufen wenn sich an FMyFont etwas geändert hat.
// hier könnte z.B. Invalidate aufgerufen werden
end;
procedure TMyLabel.SetMyFont(
const Value: TMyFont);
begin
FMyFont.Assign(Value);
end;