您可以从delphi组件中删除已发布的属性,并且不会在使用该组件的
发布时间:2020-12-15 10:15:00 所属栏目:大数据 来源:网络整理
导读:我有一个由我公司开发的组件,并希望删除一个不再需要的已发布属性,并且与组件的工作方式冲突。 有没有办法删除属性,并且不会导致在运行时或设计时的属性未找到的错误,使用组件的表单加载? 即有没有办法使Delphi默认删除组件属性? 解决方法 根据属性,
我有一个由我公司开发的组件,并希望删除一个不再需要的已发布属性,并且与组件的工作方式冲突。
有没有办法删除属性,并且不会导致在运行时或设计时的属性未找到的错误,使用组件的表单加载? 解决方法
根据属性,最简单的方法是离开属性,但将其标记为已弃用,只需将读/写位指向一个从未使用的字段。
或者,您可以覆盖DefineProperties并调用Filer.DefineProperty(‘PropertyName’,ReadProc);其中PropertyName是您删除的属性,ReadProc是一个调用各种TReader Read *函数的函数。这具有的优点是属性不在你的界面了。 例如,您已删除此属性: property Center: TPoint read FPoint write SetPoint; 以下是您将添加到您的组件中: TMyComponent = class... private procedure SkipReadPoint(Reader: TReader); protected procedure DefineProperties(Filer: TFiler); override; end; procedure TMyComponent.DefineProperties(Filer: TFiler); begin inherited; Filer.DefineProperty('Center',SkipReadPoint,nil,False); end; procedure TMyComponent.SkipReadPoint(Reader: TReader); begin Reader.ReadListBegin; Reader.ReadInteger; Reader.ReadInteger; Reader.ReadListEnd; end; 跳过类似布尔或整数的简单类型更容易,因为您只需调用ReadBoolean或ReadInteger即可,而不会影响ReadList函数。 在我们的例子中,我们有很多类似的属性(CLX兼容性),所以我们有这样的全局“虚拟”函数: procedure DummyReadBool(Self: Pointer; Reader: TReader); begin Reader.ReadBoolean; end; const SkipReadBool: TMethod = (Code: @DummyReadBool; Data: nil); 然后DefineProperty调用如下所示: Filer.DefineProperty('PropName',TReaderProc(SkipReadBool),False); 这样每个类都不必具有重复的Skip *功能。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |