我有一个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;
如果是的话,该怎么写这个程序?
谢谢你, 恩佐
答案 0 :(得分:0)
这取决于你的课程的使用方式。 Notification
方法不会自动调用,只能由您自己的代码(或您的类用户编写的代码)调用。因此,如果永远不会调用Notification
,则不需要它。
答案 1 :(得分:0)
TPersistent
不支持Notification()
系统。你需要TComponent
。如果您在TGlyph
内部使用了TComponent
,那么您可以让TComponent
处理通知,并在需要时更新TGlyph
。否则,您必须更改TGlyph
以从TComponent
派生,在这种情况下如果在TGlyph
内使用TComponent
,那么请确保TGlyph
在自身上调用SetSubComponent(True)
以避免任何Object Inspector和DFM流问题。