0

我有一个 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;

是否必须有一个将 nil 值分配给 FImages 字段的通知程序,例如您用于 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; 

如果可以,这个程序应该怎么写?

谢谢你,恩佐

4

2 回答 2

0

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

于 2012-12-31T06:40:56.307 回答
0

TPersistent不支持Notification()系统。你需要TComponent那个。如果在您也编写TGlyph的 a 中使用,那么您可以让它处理通知并在需要时进行更新。否则,您将不得不更改为从 派生,在这种情况下,如果在 a 中使用,则只需确保调用自身以避免任何 Object Inspector 和 DFM 流问题。TComponentTComponentTGlyphTGlyphTComponentTGlyphTComponentTGlyphSetSubComponent(True)

于 2012-12-31T07:55:07.533 回答