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

在delphi中替换一个组件类

发布时间:2020-12-15 10:09:23 所属栏目:大数据 来源:网络整理
导读:我知道我已经看到一个例子,在一个黑客的地方定义一个现有的VCL组件的定制版本,如TButton或TEdit,具有相同的类名,并做一些事情,使DFM流光镜将实例化您的版本,而不是原本的.不幸的是,我处于这样的情况,我需要能够做到这一点,我找不到写作.有人知道在哪里找到关
我知道我已经看到一个例子,在一个黑客的地方定义一个现有的VCL组件的定制版本,如TButton或TEdit,具有相同的类名,并做一些事情,使DFM流光镜将实例化您的版本,而不是原本的.不幸的是,我处于这样的情况,我需要能够做到这一点,我找不到写作.有人知道在哪里找到关于如何完成这个的信息?

解决方法

在您的表单中,您可以覆盖ReadState方法,如下所示:
type
  TMyForm = class(TForm)
  protected
    procedure ReadState(Reader: TReader); override;
  end;

procedure TMyForm.ReadState(Reader: TReader);
begin
  Reader.OnFindComponentClass := FindComponentClass;
  inherited;
end;

procedure TMyForm.FindComponentClass(Reader: TReader; const ClassName: string;
  var ComponentClass: TComponentClass);
begin
  if ComponentClass=TButton then begin
    ComponentClass := TMySuperDuperButton;
  end else if ComponentClass=TEdit then begin
    ComponentClass := TMyTotallyAwesomeEdit;
  end;
end;

可能还有许多其他方法可以做到这一点,但这是我如何做的!

编辑:检查TReader.GetFieldClass(实例:TObject; const ClassName:string)建议Mason回忆的破解.第一行设置ClassType:= Instance.ClassType.所以我怀疑通过将pas文件中的声明从Button1:TButton更改为Button1:MyUnit.TButton将导致您的按钮被创建.或者也许黑客是在最后添加MyUnit到uses子句,以便你的版本的TButton是范围内的.然而,这些都不是很实际的.

(编辑:李大同)

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

    推荐文章
      热点阅读