在delphi中替换一个组件类

前端之家收集整理的这篇文章主要介绍了在delphi中替换一个组件类前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我知道我已经看到一个例子,在一个黑客的地方定义一个现有的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是范围内的.然而,这些都不是很实际的.

猜你在找的Delphi相关文章