各位:有一控件属性设计难题,伴你度过腊月28! (100分)

  • 主题发起人 主题发起人 zzzworm
  • 开始时间 开始时间
Z

zzzworm

Unregistered / Unconfirmed
GUEST, unregistred user!
我自己编写了一个控件AddBoxLine,有一个HotButton属性,是一个Tbutton类型的指针,可指向表单任一button按钮,
功能是为这个按钮加发亮边框。
问题出在: 在设计时刻,当你将该按钮delete时,Delphi立即出错。表单几乎崩溃,无法编辑。
原因是AddBoxLine中的指针此时无效引起的。

这个问题是深层问题。当你删除datasource时,dbgrid并不出错,因为datasource在destroy时,会通知dbgrid“我被删了”,
但我现在没法让button通知addboxline“我被删了”,让addboxline做善后处理。
我企图在addboxline中该属性read方法 GetHotbutton中加 assigned(), <>Nil 等工作来避免出错,都不行。
后来,用了try 结构,删是能删了,表单却无法保存! (估计 属性的读写保存还是问题)

各位先行的高手,可碰到过此问题,指教一二。 我入道不久,可用分很穷,只能给您30 。多谢!


 
这个问题不是很难,你看一下TMenu的源代码,
他也会引用ImageList对象的指针,对象删除时,引用的指针置空
是通过覆盖方法
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
来实现的
其内容如下
inherited Notification(AComponent, Operation);
if (AComponent = Images) and (Operation = opRemove) then Images := nil;

这个方法是TComponent类的方法,覆盖之即可
 
谢了,我试一下。我正需要此类方法来控制。
 
后退
顶部