Application.CreateForm中参数的问题

solomon81 2007-05-19 08:36:08
Application.CreateForm(TForm,form);

我想动态地创建不同的窗体,将里面的两个参数用变量传进去

比如,我知道了窗体的类名叫做 “Tfrm”,窗体名叫做“form”,现在都是字符串形式的变量,分别在字符串变量
a,b中 , a := "Tfrm" b := "form",请问在这种情况下,我怎样才能创建这个窗体。谢谢。
...全文
464 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
solomon81 2007-05-21
  • 打赏
  • 举报
回复
我在非技术区开了个帖子,你去顶一下吧,呵呵
lihuasoft 2007-05-21
  • 打赏
  • 举报
回复
寒...... ^_^ 那你就再开个贴让我去领分不就结了? 顺便散散分吧,反正留着那么多分也没啥用处...

不过无所谓的,心意有了就行,呵呵

^_^
solomon81 2007-05-21
  • 打赏
  • 举报
回复
lihuasoft(坐井观天) 实在不好意思,我结贴的时候把分数弄错了,
本来100分都想给你的,有什么办法可以补救的吗?
solomon81 2007-05-21
  • 打赏
  • 举报
回复
非常感谢,呵呵
lihuasoft 2007-05-19
  • 打赏
  • 举报
回复
把上面那个CreateMyForm重新改一下:

procedure CreateMyForm(const FormClassName, FormName : string);
begin
if Application.FindComponent(FormName)=nil then begin
if GetClass(FormClassName) <> nil then
with TForm(TComponentClass(FindClass(FormClassName)).Create(Application)) do begin
Name := FormName;
Show;
end
else ShowMessage(Format('类%s未注册',[FormClassName])); end
else begin
ShowMessage(Format('窗体%s已创建过',[FormName]));
TForm(Application.FindComponent(FormName)).Show;
end;
end;
lihuasoft 2007-05-19
  • 打赏
  • 举报
回复
Unit Unit1;
//.......

implementation
uses Unit2;
{$R *.dfm}

procedure CreateMyForm(const FormClassName, FormName : string);
begin
if GetClass(FormClassName) <> nil then
with TForm(TComponentClass(FindClass(FormClassName)).Create(Application)) do begin
if FindComponent(Name)<> nil then Name := FormName;
Show;
end
else
ShowMessage(Format('类%s未注册',[FormClassName]));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
CreateMyForm('TForm2', 'Form4');
end;

initialization
RegisterClass(TForm2);

finalization
UnregisterClass(TForm2);

end.
shadowstar 2007-05-19
  • 打赏
  • 举报
回复
Form 就应该是一个变量吧,不指哪个具体类型的TForm.

如果要创建一个TForm实例,就看a与的是哪个TFrom类名相同就行了。

var
Form: TForm;

procedure LoadFrom(const FormName: string);
begin
if TForm1.ClassNameIs(FormName) then
Form := TForm1.Create(nil)
else if TForm2.ClassNameIs(FormName) then
Form := TForm2.Create(nil)
...
else raise Exception.Create('Invalid FormName');
end;
ljyt 2007-05-19
  • 打赏
  • 举报
回复
使用GetClass试试看
代码跳动 2007-05-19
  • 打赏
  • 举报
回复
问题很模糊,为什么要动态创建,明白一点

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧