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;

TComponentに使用する種類など、FImagesフィールドにnil値を割り当てる通知手順が不可欠ですか?

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

TPersistentシステムをサポートしていませんNotification()。あなたはそれが必要TComponentです。も作成しTGlyphたの中で使用されている場合は、通知を処理し、必要に応じて更新することができます。それ以外の場合は、から派生するように変更する必要があります。その場合、が内部で使用されている場合は、オブジェクトインスペクターとDFMストリーミングの問題を回避するために、必ずそれ自体を呼び出す必要があります。TComponentTComponentTGlyphTGlyphTComponentTGlyphTComponentTGlyphSetSubComponent(True)

于 2012-12-31T07:55:07.533 に答える
0

それはあなたのクラスがどのように使われるかに依存します。メソッドは自動的に呼び出されるのNotificationではなく、独自のコード(またはクラスのユーザーによって作成されたコード)によってのみ呼び出されます。したがって、Notification呼び出されない場合は、その必要はありません。

于 2012-12-31T06:40:56.307 に答える