这是一个类型完全不一样的问题。 application.createform(Tform1,form1) 中的TForm1是个类别,form1是个对象指针;而你从数据库中得到的只是一个字符串,它们之间没有转化的可能。
你在工程中有没有定义一个TForm1这样的类,或者在数据库中保存了该类的所有资源?如果只有这么一个名字,是没办法转换的;如果在工程中有这个船口类别的定义,你可以通过比较该类别的类别名称或者窗口对象名称与数据库中的字段值来操作createform函数。
你在工程中有没有定义一个TForm1这样的类,或者在数据库中保存了该类的所有资源?如果只有这么一个名字,是没办法转换的;如果在工程中有这个船口类别的定义,你可以通过比较该类别的类别名称或者窗口对象名称与数据库中的字段值来操作createform函数。
解决方案 »
- 关于FASTREPORT 的问题
- 急求答案 LoadFromStream(const Stream: IUnknown); 如何调用?
- 如何消除Twebbrowser的两个滚动条??
- 简单问题,大哥大姐请帮忙,怎么把2得10次方得结果1024保存到一个整型变量i里面???
- dxdbgrid问题
- 如何同步更新SQL SERVER数据问题
- 谁有quantumgrd控件 for delphi6的,及其使用帮助啊?50分相求
- 怎么编写象XP类型的窗体和按钮啊!给50分!
- delphi 6与DElphi 5的不同?在delphi5行的delphi 6就不行了 ,(回车健代替tab的)
- 如何接收窗体最小化的事件问题?
- 请个位朋友帮忙关注一下!
- 求教一个小问题,关于tstrings的
1,將你想要創建的Form註冊
...
initialization
RegisterClass(TOrderForm, TSalaryForm,...)
...
2,通過字段的内容得到類
var
AClass1: TObject;
AForm: TForm;
pro_name: string;
begin
pro_name:='T'+Table1.FieldByName('pro_name').asString;
AClass1 := GetClass(pro_name);
application.createform(AClass1, AForm);
...
end;
http://www.csdn.net/expert/topic/697/697439.xml?temp=.5595819回复人: cxz9(一网情深) ( ) 信誉:100 2002-05-07 09:28:00 得分:0
把楼上的改一下就可以了呀!procedure TMainForm.execute(const agnbh:string);
var
exename: array[0..79] of char;
fldname:string; classname:string; //add by cxz
begin
with qsel_runexe do
begin
if active then close;
parambyname('name').asstring:=agnbh;
open; //根据菜单名字提取FORM名字
if (recordcount=1) and (fieldbyname('frmname').asstring<>'') then
begin
fldname:=trim(fieldbyname('frmname').asstring);
classname:='T'+fldname;//add by cxz if not checkMDIChildform(fldname) then
//查找此子窗体是否存生的函数!
begin
application.createform(classname,fldname);//by cxz
end else Tform(fldname).Show; //by cxz end;
end;
end;
Top
回复人: cxz9(一网情深) ( ) 信誉:97 2002-05-12 18:14:00 得分:0
怎么这么久了还不结??
Top
回复人: yyfhz(火山) ( ) 信誉:100 2002-05-12 20:03:00 得分:0
Delphi提供以下函数:Getclass(ClassName) 获取某个名称的类型,不过那些类型必须要经过注册才可以被找到(否则返回空).
RegisterClass(Class) 注册一个类。
下面举一个例子:再FormUnit里有一个TmyForm窗体类,可以这么处理。
1. 在FormUnit的最后加上
Initialization
//注册TmyForm
RegisterClass(TmyForm) ;
end ;2. 在需要的地方(比如在函数CreateFormByClassname(sClassName: String))
function CreateFormByClassname(sClassName: String): TForm ;
var
rClass: TClass ;
begin
rClass := GetClass(sClassName) ;
if rClass <> nil then
//我不知道原因,但是TComponentClass(rClass).Create(nil)
//好象会返回已经存在的对象,而application.CreateForm则不会
application.CreateForm(TComponentClass(rClass),Result) ;
end ;
//查找此子窗体是否存生的函数!
这不是我写的。你也可以先把全部窗体创建后要用时再显示就是了。
动态创建时要自己用RegisterClass(TmyForm);注册一下。回复人: yyfhz(火山) ( ) 信誉:100 2002-05-12 20:03:00 得分:0
Delphi提供以下函数:Getclass(ClassName) 获取某个名称的类型,不过那些类型必须要经过注册才可以被找到(否则返回空).
RegisterClass(Class) 注册一个类。
下面举一个例子:再FormUnit里有一个TmyForm窗体类,可以这么处理。
1. 在FormUnit的最后加上
Initialization
//注册TmyForm
RegisterClass(TmyForm) ;
end ;2. 在需要的地方(比如在函数CreateFormByClassname(sClassName: String))
function CreateFormByClassname(sClassName: String): TForm ;
var
rClass: TClass ;
begin
rClass := GetClass(sClassName) ;
if rClass <> nil then
//我不知道原因,但是TComponentClass(rClass).Create(nil)
//好象会返回已经存在的对象,而application.CreateForm则不会
application.CreateForm(TComponentClass(rClass),Result) ;
end ;