我创建了一个来自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;
答案 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;