[我再作一个程序,现在碰到了麻烦,我自己实在无力解决,请高手帮忙指点,不胜感激!!
我举个例子来说明我的问题。
比如我动态生成一个组件,就比如是ob_t:Tbutton吧 ob_t:=Tbotton.Create(self);然后关联一个CLICK事件,通过这个事件在程序运行时候实现ob_t.free,把这个动态生成的组件删除掉。为了实现历史回步,我就想制作实现撤销的功能。我的方法是在建立动态组件的时候用自定义数据结构来保留这个组件(ob:TObject;ob:=ob_t),而在删除前用一个自定义数据结构保存这个动态生成的组件的特征(大小,位置,名称),一旦删除后,我就通过再次建立一个和被删除组件类似的组件来达到反删除的目的,而建立的时候也可以同OB.free释放。初看起来可以,但我发现了我这样作存在一个致命的错误。如果我先建立一个组件,再删除整个组件,那么我第一次撤销的时候,可以实现,但是第二次撤销的时候就出错了,找不到对象!!很明显我虽然在第一次建立组件的时候用保留了这个组件对象,但是后来我用ob_t.free删除了这个对象,这样第一次撤销的时候我可以通过自定义数据结构来建立一个类似的组件,但是第二次撤销我想自定义结构中保持的OB对象就不行了,因为它已经不存在了
我想了很久也没有想到解决的办法。我提出以下的疑问:
1、删除一个动态组件的时候一般是不是用free,但是这样一来,如果要反删除就必须要重建对象了。
2、如果删除对象不用FREE而用VISBLE:=FALSE,那么可以保存整个对象,反删除的时候也不必重建对象。但是这种方法应该是不行的。
我的基础浅薄,实在是不知道从何入手,谁能指导我一下,不胜感激