我如何对对象实例创建新方法,例如VCL TPanel

时间:2019-01-20 10:55:50

标签: delphi

我希望能够执行Panel1.Update(param),其中Panel1是Form1上的对象,而Update(param)是我的方法-我想将TPanel的这个实例添加到所有VCL方法中天生。

新手。自从我与Delphi合作以来已有25年了。我猜我在面向对象概念上挣扎。

没有代码

Panel1.Update(param);

1 个答案:

答案 0 :(得分:3)

以下是使用插入器类添加新方法的最小示例 到TPanel。

type
  TPanel = class(ExtCtrls.TPanel)
    protected
    procedure Update(Param : String);
  end;

  TForm1 = class(TForm)
    Panel1: TPanel;
    procedure FormCreate(Sender: TObject);
  public
  end;

[...]

    { TPanel }

procedure TPanel.Update(Param: String);
begin
  Caption := 'ParamValue: ' + Param;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Panel1.Update('abc');
end;

请注意,您必须将方法添加到ExtCtrls.TPanel派生的中。 您不能将方法添加到TPanel的实例,因为这不是Delphi的方法 工作时,Delphi会为类的方法生成代码,而不是为该类的特定实例生成代码。

还请注意,没有什么可以阻止您为插入器类提供相同的名称 作为其所属的类(单元限定符“ ExtCtrls”消除了两者的歧义)。

还请注意,插入器类可以与表单分开放置;在那里面 内插器类单位必须出现在表单的Uses列表中,在 ExtCtrls之后之后。