如何响应Delphi中对象属性字段的变化

时间:2016-05-18 21:27:37

标签: delphi delphi-7

在Delphi 7中,从TGraphicControl下载一个新组件,并添加一个TFont属性,实现paint方法以使用TFont属性编写一些字符串。安装组件。

在设计时,使用属性对话框更改TFont属性时,它将立即反映在您的组件中。但是,当您更改TFontColorSize的各个属性时,只有将鼠标悬停在其上时才会重新绘制该组件。

如何正确处理对象属性字段的更改?

1 个答案:

答案 0 :(得分:4)

TFont.OnChange事件分配事件处理程序。在处理程序中,Invalidate()您的控件触发重绘。例如:

type
  TMyControl = class(TGraphicControl)
  private
    FMyFont: TFont;
    procedure MyFontChanged(Sender: TObject);
    procedure SetMyFont(Value: TFont);
  protected
    procedure Paint; override;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    property MyFont: TFont read FMyFont write SetMyFont;
  end;

constructor TMyControl.Create(AOwner: TComponent);
begin
  inherited;
  FMyFont := TFont.Create;
  FMyFont.OnChange := MyFontChanged;
end;

destructor TMyControl.Destroy;
begin
  FMyFont.Free;
  inherited;
end;

procedure TMyControl.MyFontChanged(Sender: TObject);
begin
  Invalidate;
end;

procedure TMyControl.SetMyFont(Value: TFont);
begin
  FMyFont.Assign(Value);
end;

procedure TMyControl.Paint;
begin
  // use MyFont as needed...
end;