Function 将继承的帧作为参数传递给过程

Function 将继承的帧作为参数传递给过程,function,oop,delphi,inheritance,procedure,Function,Oop,Delphi,Inheritance,Procedure,我有一个TPageControl,在我的主窗体中有N个TTabSheets,用于嵌入几个TFrame子体。 对于我创建的“TBaseFrame”框架,我从中派生出要在选项卡中显示的各个框架,大致如下所示 procedure CreateNewTabSheetAndFrame( What do I put here to accept any of my TBaseFrameDescendants? ) var TabSheet: TTabSheet; begin TabSheet :=

我有一个TPageControl,在我的主窗体中有N个TTabSheets,用于嵌入几个TFrame子体。 对于我创建的“TBaseFrame”框架,我从中派生出要在选项卡中显示的各个框架,大致如下所示

procedure CreateNewTabSheetAndFrame( What do I put here to accept any of my TBaseFrameDescendants? )
var
  TabSheet: TTabSheet;

begin
  TabSheet := TTabSheet.Create(MainPageControl);
  TabSheet.Caption := 'abc';
  TabSheet.PageControl := MainPageControl;

// Here I want to create the given TBaseFrameDescendant, set the Parent to the above TabSheet and so on   
end;
TBaseFrame=类(TFrame)

  • TBASEFRAMENDERNANT1=类(TBaseFrame)
  • TBASEFrameDegenant2=类(TBaseFrame)
  • TBASEFrameDegenantn=类(TBaseFrame)
我要做的是:我想创建一个过程,该过程将我的任何TBaseFrameDescents作为参数,创建给定的框架并将其显示在新的选项卡页中。我从这样的事情开始

procedure CreateNewTabSheetAndFrame( What do I put here to accept any of my TBaseFrameDescendants? )
var
  TabSheet: TTabSheet;

begin
  TabSheet := TTabSheet.Create(MainPageControl);
  TabSheet.Caption := 'abc';
  TabSheet.PageControl := MainPageControl;

// Here I want to create the given TBaseFrameDescendant, set the Parent to the above TabSheet and so on   
end;

我想我这里的主要问题是如何设置我的过程,这样我就可以传入从TBaseFrame派生的任何框架,这样我就可以在过程中使用它,或者我在这里的方向是错误的?

您需要使用所谓的元类

type
  TBaseFrameClass = class of TBaseFrame;

procedure TMainForm.CreateNewTabSheetAndFrame(FrameClass: TBaseFrameClass)
var
  TabSheet: TTabSheet;
  Frame: TBaseFrame;
begin
  TabSheet := TTabSheet.Create(Self);
  TabSheet.PageControl := MainPageControl;
  Frame := FrameClass.Create(Self);
  Frame.Parent := TabSheet;
end;

如果在任何框架类中声明了任何构造函数,请确保它们派生自
TComponent
中引入的虚拟构造函数。这是必要的,以便通过元类实例化调用相应的派生构造函数。

为David干杯,几秒钟后就可以工作了,非常感谢!)