TFont属性控制子类控件的字体

时间:2015-07-27 20:55:31

标签: delphi

我创建了一个来自TPanel的组件。在组件的构造函数中,我创建了几个TButton组件。我创建并浮出了TFont类型的 ButtonFont 属性。此属性控制组件上所有按钮的字体。例如:

TMyPanel = Class(TPanel)
private
    FButtonFont      : TFont;
    FExampleButton   : TButton;
    procedure SetButtonFont(Value: TFont);    
public
    property ButtonFont: TFont read FButtonFont write SetButtonFont;
    constructor Create (AOwner: TComponent); override;
end;        

constructor TMyPanel.Create (AOwner: TComponent);
begin
  FButtonFont := TFont.Create;
  FExampleButton := TButton.Create(self);
  FExampleButton.Parent := self;
  .......
  inherited;
end;

procedure TMyPanel.SetButtonFont(Value: TFont);

begin
  FButtonFont.Assign(Value);
  FExampleButton.Font := Value;
end;

以下将导致所有子类按钮的按钮字体都改变了:

MyLabel.Font.Size := 22; 
MyPanel.ButtonFont := label1.font;

我可以看到正在调用 SetButtonFont 方法。

如何让这样的东西导致所有子类按钮改变它们的字体大小:

MyPanel.ButtonFont.Size := 22;

1 个答案:

答案 0 :(得分:3)

为字体的OnChange事件分配处理程序并更新所有子控件'该处理程序中的字体:

constructor TMyPanel.Create(AOwner: TComponent);
begin
  inherited;
  FButtonFont := TFont.Create;
  FButtonFont.OnChange := ButtonFontChanged; // <-- here
  FExampleButton := TButton.Create(Self);
  FExampleButton.Parent := Self;
  ...
end;

destructor TMyPanel.Destroy;
begin
  ...
  FButtonFont.Free;
  inherited;
end;


procedure TMyPanel.ButtonFontChanged(Sender: TObject);
begin
  FExampleButton.Font := FButtonFont;
  ...
end;