TPersistent:通知

时间:2012-12-31 05:22:02

标签: delphi components delphi-xe3

我有一个TPersistent定义如下:

  TGlyph = class(TPersistent)
  private
    FOwner: TControl;
    FLayout: TGlyphAlignment;
    FVisible: Boolean;
    FImageIndex: Integer;
    FImages: TImageList;
    ..............
  protected
    procedure Invalidate;
  public
    constructor Create(AOwner: TControl);
    destructor Destroy; override;
    .............
  published
    property ImageIndex: Integer read FImageIndex write SetImageIndex default -1;
    property Images: TImageList read FImages write SetImages;
    .............
  end;

是否必须有一个通知程序为FImages字段指定nil值,例如您用于TComponent的那种?

procedure TGlyph.Notification(AComponent: TComponent; Operation: TOperation);
begin
  inherited;
  if (Operation = opRemove) and (AComponent = FImages) then
  begin
    FImages.OnChange := nil;
    FImages := nil;
    Invalidate;
  end;
end; 

如果是的话,该怎么写这个程序?

谢谢你, 恩佐

2 个答案:

答案 0 :(得分:0)

这取决于你的课程的使用方式。 Notification方法不会自动调用,只能由您自己的代码(或您的类用户编写的代码)调用。因此,如果永远不会调用Notification,则不需要它。

答案 1 :(得分:0)

TPersistent不支持Notification()系统。你需要TComponent。如果您在TGlyph内部使用了TComponent,那么您可以让TComponent处理通知,并在需要时更新TGlyph。否则,您必须更改TGlyph以从TComponent派生,在这种情况下如果在TGlyph内使用TComponent,那么请确保TGlyph在自身上调用SetSubComponent(True)以避免任何Object Inspector和DFM流问题。