procedure TForm1.Button1Click(Sender: TObject);
var
fRm:TForm;// Form2: TForm2;
begin
frm:=(self.FindComponent('Form2') as TForm).Create(application);
try
frm.ShowModal;
finally
frm.Free;
end;
end;如上方法老是报错,
望高手指点一下
谢谢
var
fRm:TForm;// Form2: TForm2;
begin
frm:=(self.FindComponent('Form2') as TForm).Create(application);
try
frm.ShowModal;
finally
frm.Free;
end;
end;如上方法老是报错,
望高手指点一下
谢谢
解决方案 »
- DBGrid焦点的问题
- 各位好,初学delphi诚恳请教。openProcessToken如何获得其他进程的token。非常感谢
- 如何将C/S结构改成B/S结构
- 用adoquery查询表的分组,然后分别打印每组数据,fastreport 如何实现?抱歉只有20分
- WORD型的如何转成STRING型的?
- 请问,怎样画Label的各种效果?
- 急!请问有没有类似于DBGrid这样的多条件查询控件下载??
- 如何引用另一个 .pas 单元?
- 怎样在Delphi中取系统时间?
- fastreport 预览窗体关闭后 怎么连程序窗体也一起关掉?
- 即时输入即时打印,保存了再打印?还是打印了再保存?
- 请教一个删除菜单的问题!
作者: 轻舞肥羊
标题: 根据类名(字符串)建立类实例
关键字: RTTI
分类: 开发技巧
密级: 公开
(评分: , 回复: 2, 阅读: 752) »»
有时候需要根据类名来建立类的实例,比如把类名存于数据库,然后在程序中根据数据库中的
内容建立不同的窗体,下面的例子可以实现这个需求.unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Controls, StdCtrls,Forms;type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
public
procedure CreateForm(AClassName:string);
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
//调用建立本身
CreateForm('TForm1');
end;procedure TForm1.CreateForm(AClassName: string);
//如果查找到类类型(有的书叫类引用),则建立实例
begin
if GetClass(AClassName)<>nil then
TFormClass(FindClass(AClassName)).Create(self).Show;
end;////下面的代码注册窗体类,你要注册才能用FindClass找到(以前记得好象不用注册?)
initialization
RegisterClass(TForm1);end. 2003-5-12 1:45:00
修改笔记 发表评语»»» 2003-10-28 14:26:18 GetClass与FindClass的区别GetClass不会引发错误,如果没有找到类,它会返回nil
FindClass如果找不到类,它会引发一个错误
2003-10-28 15:46:31 可以注册并在运行期生成非窗体类,条件是该类必须TPersistentClass的子类
for I := 0 to self.components.Count - 1 do
begin
if components[i] is TForm then
if sametext(Tform(components[i]).name, 'form2') then
begin
frm := TForm.create(application);
frm.showmodal;
end;
的方法应该是目前最好的办法,我就是这么用的提请加精