加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

您可以从delphi组件中删除已发布的属性,并且不会在使用该组件的

发布时间:2020-12-15 10:15:00 所属栏目:大数据 来源:网络整理
导读:我有一个由我公司开发的组件,并希望删除一个不再需要的已发布属性,并且与组件的工作方式冲突。 有没有办法删除属性,并且不会导致在运行时或设计时的属性未找到的错误,使用组件的表单加载? 即有没有办法使Delphi默认删除组件属性? 解决方法 根据属性,
我有一个由我公司开发的组件,并希望删除一个不再需要的已发布属性,并且与组件的工作方式冲突。

有没有办法删除属性,并且不会导致在运行时或设计时的属性未找到的错误,使用组件的表单加载?
即有没有办法使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 *功能。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读