如何动态生成一个类(类型)(200分)

  • 主题发起人 主题发起人 borlandor
  • 开始时间 开始时间
B

borlandor

Unregistered / Unconfirmed
GUEST, unregistred user!
我想定义一个类类型(类似 TClass),但这个类是在程序中动态生成的。
比如下面一个函数:
function CreateRectangle(Name:String; TopLeft,BottomRight:PTypeInfo):TClass;
{
// ????
}
怎么实现?我有如下应用:
MyClass: TClass;
MyRect: TObject;

MyClass := CreateRectangle("TRect",TypeInfo(TPoint),TypeInfo(TPoint));
MyRect := MyClass.Create;
MyRect.TopLeft := Point(10,10);
MyRect.BottomRight := Point(100,100);
。。。。。。
 
type TControlClass = class of TControl;
function CreateControl(ControlClass: TControlClass;

const ControlName: string; X, Y, W, H: Integer): TControl;
begin
Result := ControlClass.Create(MainForm);
with Result do
begin
Parent := MainForm;
Name := ControlName;
SetBounds(X, Y, W, H);
Visible := True;
end;
end;
 
[:D]sorry , 好像不和题意[:D]
 
谢谢!
我是想根据一些属性描述,如整型,浮点型,字符型等,动态生成一个类类型(class of TObject)。
 
看看这两个贴子,应该有一定启发:
LID=375317,506986
Object Pascal 栏目下面有很多好帖子,值得细细品味。
 
可以动态生成一个类, 但动态生成一些基本类型的方法还不知道, 有知道的通知一下.

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

function CreateAClass(const aClassName: string): TObject;
var
C : TFormClass;
begin
C := TFormClass(FindClass(aClassName));
result := C.Create(Form1);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
O: TObject;
begin
O := CreateAClass('TButton');
with O as TButton do
begin
Parent := Self;
Left := (Sender as TButton).Left;
Top := (Sender as TButton).Top + (Sender as TButton).Height + 20;
Width := (Sender as TButton).Width;
Height := (Sender as TButton).Height;
Caption := 'Hello';
Visible := True;
OnClick := Button1.OnClick;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
RegisterClasses([TApplication, TButton, TForm, TListBox, TPaintBox,
TFindDialog, TOpenDialog, TTimer, TComponent, TGraphicControl]);

end;

end.



 
tseug老兄
你的程序并没有什么错,不过要生成一个类的实例
你必须先注册该类
好像是使用RegisterClass函数
 
呵呵, 仔细看看, 我在FormCreate注册的.
 
接受答案了.
 
后退
顶部