Thema: Delphi TFont überschreiben?

Einzelnen Beitrag anzeigen

Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#2

Re: TFont überschreiben?

  Alt 21. Jun 2004, 18:08
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;
I come from outer space to save the human race
  Mit Zitat antworten Zitat