Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi TFont überschreiben? (https://www.delphipraxis.net/24470-tfont-ueberschreiben.html)

Pseudemys Nelsoni 21. Jun 2004 16:26


TFont überschreiben?
 
moin,

ich schreibe gerade eine komponente (immernoch :mrgreen:), diese ist von TLabel abgeleitet. Ich möchte die Font property meines "eigenen labels" überschreiben, nur wie mache ich das? muss ich eine klasse schreiben die von tfont abgeleitet ist? wenn ja, wie spreche ich die felder von TMyFont aus TMyLabel aus an?

Jens Schumann 21. Jun 2004 18:08

Re: TFont überschreiben?
 
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;

Pseudemys Nelsoni 22. Jun 2004 14:10

Re: TFont überschreiben?
 
danke das du extra das beispiel geschrieben hast :]

ich werds gleichmal testen, habe aber noch 2 fragen dazu...

was bewirkt Assign? Und wieso wird hier gerade TPersistent verwendet?

Jens Schumann 22. Jun 2004 21:11

Re: TFont überschreiben?
 
Zitat:

Zitat von Pseudemys Nelsoni
was bewirkt Assign? Und wieso wird hier gerade TPersistent verwendet?

Schau mal in der OH unter TFont.Assign nach.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:28 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz