各位大侠们,你们好,问题是这个样子的,我有一个单元UUser,里面的类是TfrmUser,我在这个单元里面注册了这个类,
initialization
RegisterClass(TfrmUser);
然后我在我的主程序里面GetClass('TfrmUser')总是返回一个nil值,不知道什么原因,到网上找了些资料,说是把porject ->Build with Runtime packages选上,我选上也不行,但是我重新建立一个application,就两个窗体,用上面的方法是可以得到这个类的。不知道我的是什么原因。
我程序是这个样子做的,首先我的主程序是frmMain,启动时的程序是frmWelcome,登入界面是frmLogin,DataModule:UPt_DM 然后就有一个frmUser窗体,运行的基本代码是:
{工程文件}
program....
begin
Application.Initialize;
Application.CreateForm(TDM_PT, DM_PT);
Application.CreateForm(TfrmMain, frmMain);
Application.Run;
end.{Data Module}
procedure TDM_PT.DataModuleCreate(Sender: TObject);
begin
Application.CreateForm(TfrmWelcome, frmWelcome);
frmWelcome.ShowModal;
end;{主程序}
procedure TfrmMain.FormCreate(Sender: TObject);
begin
Application.CreateForm(TfrmLogin, frmLogin);
frmLogin.ShowModal;
end;{登入窗口的登入按钮}
procedure TfrmLogin.Spb_OkClick(Sender: TObject);
begin
frmLogin.Close;
frmMain.Show;
frmMain.WindowState := wsMaximized;
end;
{UUser中的注册类代码}
unit UfrmUser;
...
initialization
RegisterClass(TfrmUser);{主程序中的找类过程}
{FormName是窗体名字}
procedure ShowForm(FormName: String);
var
FormClass: TFormClass;
Form: TForm;
FormClassName: String;
begin
FormClassName := 'T' + FormName;
FormClass := TFormClass(GetClass(FormClassName));//为什么这里总是返回nil,???
if FormClass = nil then Exit;
begin
Application.CreateForm(FormClass,Form);
try
Form.Show;
finally
end;
end;
end;麻烦大侠指点一下,谢谢
initialization
RegisterClass(TfrmUser);
然后我在我的主程序里面GetClass('TfrmUser')总是返回一个nil值,不知道什么原因,到网上找了些资料,说是把porject ->Build with Runtime packages选上,我选上也不行,但是我重新建立一个application,就两个窗体,用上面的方法是可以得到这个类的。不知道我的是什么原因。
我程序是这个样子做的,首先我的主程序是frmMain,启动时的程序是frmWelcome,登入界面是frmLogin,DataModule:UPt_DM 然后就有一个frmUser窗体,运行的基本代码是:
{工程文件}
program....
begin
Application.Initialize;
Application.CreateForm(TDM_PT, DM_PT);
Application.CreateForm(TfrmMain, frmMain);
Application.Run;
end.{Data Module}
procedure TDM_PT.DataModuleCreate(Sender: TObject);
begin
Application.CreateForm(TfrmWelcome, frmWelcome);
frmWelcome.ShowModal;
end;{主程序}
procedure TfrmMain.FormCreate(Sender: TObject);
begin
Application.CreateForm(TfrmLogin, frmLogin);
frmLogin.ShowModal;
end;{登入窗口的登入按钮}
procedure TfrmLogin.Spb_OkClick(Sender: TObject);
begin
frmLogin.Close;
frmMain.Show;
frmMain.WindowState := wsMaximized;
end;
{UUser中的注册类代码}
unit UfrmUser;
...
initialization
RegisterClass(TfrmUser);{主程序中的找类过程}
{FormName是窗体名字}
procedure ShowForm(FormName: String);
var
FormClass: TFormClass;
Form: TForm;
FormClassName: String;
begin
FormClassName := 'T' + FormName;
FormClass := TFormClass(GetClass(FormClassName));//为什么这里总是返回nil,???
if FormClass = nil then Exit;
begin
Application.CreateForm(FormClass,Form);
try
Form.Show;
finally
end;
end;
end;麻烦大侠指点一下,谢谢
解决方案 »
- 关于定义函数的方法问题!
- 如何更改rich edit中选定文字的字体
- 求救:shockwaveflash播放flash,内存越来越大?
- 高分求助Delphi2005正式版本的下载 (50)
- 关于telnet的IdTelnet的问题!
- 有用过dxdbtreelist的吗?设置一列为选择列(checkcolum)的时候,选择怎么用代码控制?
- query.sql.add('insert into buy_sales(id,buy_sale,merchant,state,'+
- 怎样将数字的年月日转换成文字的年月日?????
- 我受够了!!!
- 一个小小的问题
- 请帮我检查错误在哪里,谢谢!
- 请问 怎样得到 一个窗体里面有很多richedit的句柄,意思是我要分别列出他们各自的句柄,该怎样操作?
以下是我的例子.//Unit1相当你的主程序
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
btn1: TButton;
btn2: TButton;
procedure btn1Click(Sender: TObject);
procedure btn2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;procedure ShowForm(FormName: String);
var
Form1: TForm1;implementationuses Unit2;{$R *.dfm}procedure ShowForm(FormName: String);
var
FormClass: TFormClass;
Form: TForm;
FormClassName: String;
begin
FormClassName :='T'+ FormName;
FormClass := TFormClass(GetClass(FormClassName)) ;//为什么这里总是返回nil,???
if FormClass = nil then Exit;
begin
Application.CreateForm(FormClass,Form);
try
Form.Show;
finally
end;
end;
end;procedure TForm1.btn1Click(Sender: TObject);
begin
ShowForm(Form2.Name);
end;procedure TForm1.btn2Click(Sender: TObject);
begin
RegisterClass(TForm2);
end;end.//Unit2相当于你的UfrmUser
unit Unit2;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;type
TForm2 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;var
Form2: TForm2;implementation{$R *.dfm}
initialization
RegisterClass(TForm2);
end.
procedure CreateFormFromName(const FormName: string);//=TFirstForm
var
fc: TFormClass;
f: TForm;
begin
// TFormClass(FindClass(FormName)).Create(Application).Show;
fc := TFormClass(FindClass(FormName));
f := fc.Create(Application);
f.Show;
end;procedure TMainForm.FormCreate(Sender: TObject);
begin
RegisterClass(TFirstForm);
end;
aiirii(ari-淘金坑) 能不能讲详细一点,具体怎么做,我的这个frmUser窗体是继承的另外一个窗体。谢谢,指点一下
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, Unit3;type
TfrmMain = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
frmMain: TfrmMain;implementation
{$R *.dfm}
procedure ShowForm(FormClassName: String);
var
FormClass: TFormClass;
Form: TForm;
FormName: String;
begin
FormName := 'T' + FormClassName;
FormClass := TFormClass(GetClass(FormName));
if FormClass = nil then Exit;
begin
Application.CreateForm(FormClass,Form);
try
Form.Show;
finally
end;
end;
end;procedure TfrmMain.Button1Click(Sender: TObject);
begin
ShowForm('frmSingle');
end;end.----------------------------------------
unit Unit2;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TfrmSingle = class(TForm)
Label1: TLabel;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
frmSingle: TfrmSingle;implementation{$R *.dfm}initialization
RegisterClass(TfrmSingle);end.