可以使用delphi在运行时创建(注册)一个新类。使用Delphi在运行时注册一个新类
我有一个名为TMyForm的类,可以创建一个从TMyForm派生的新表格,但是可以使用新的类类型。
我想是这样的
var
Myform : TMyForm;
MyFormClassBase : TFormClass;
begin
MyFormClassBase := TFormClass(RegisterMyNewClass('TMyNewClass'));//obviously RegisterMyNewClass does not exist
Myform := MyFormClassBase.Create(Application);
Myform.Show;
end;
我使用德尔福7
更新1
我不看创建相同的基类的新实例,我需要创建一个新类类型在运行时从另一个类派生。
更新2
非常感谢您的关注。但目的有点复杂(因为我的英语不好)。我有一个表单,允许您编辑多个主数据表,所有这些表具有相同的字段代码(一个整数主键)和描述(一个varchar字段),它们用于定义货币,国家,项目,组等。
由于所有这些表的逻辑是相同的,所以只需要通过传递参数作为表名的标题来管理这些表。像这样
FormCurrency:= TMyForm.Create('Define currencys', 'CURRENCYTABLE')
if ValidateAccess(FormCurrency) then
FormCurrency.Show
else
FormCurrency.Close;
FormGroups:= TMyForm.Create('Define Groups', 'GROUPSTABLE')
if ValidateAccess(FormGroups) then
FormGroups.Show
else
FormGroups.Close;
,另一方面我有一个验证方法(称为ValidateAccess),用于验证的用户可以访问使用窗体类的形式。因为这个,如果你使用相同类型的表单是限制访问像“定义组”,“定义currencys”,“定义国家”(我不希望这种情况发生)的所有选项,因为我需要通过到ValidateAccess方法是一个不同的类。
我不能重写ValidateAccess方法,因为在系统中已存在许多不同的表单。
我不想创建一个新的表单类型和一个新的单位反复只是改变标题和表使用。
在此先感谢。
WHY?你的“新课堂”在*每个方面都是相同的(除了有一些名字)在没有编译代码可以知道并能够使用)到“原始”类。你可能希望通过这样做来达到什么目的? – Deltics 2010-02-18 05:32:42
ValidateAccess如何检查提供的表单的类型?如果它检查了TObject.ClassType,那么你运气不好,你需要用一个新的类名创建一个自定义的RTTI记录。我不知道这是否可能。 – Ozan 2010-02-18 06:39:51