2Pascal-新时代的Pascal

 找回密码
 立即注册
搜索
热搜: fastreport
查看: 1492|回复: 4
打印 上一主题 下一主题

[求助]如何高效动态的创建Form?

[复制链接]

1

主题

6

帖子

62

积分

注册会员

Rank: 2

积分
62
跳转到指定楼层
楼主
发表于 2015-6-14 10:13:04 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
京东数码购物支持本站
为方面描述,我们假设应用程序里面有两个Form:Form_Login、Form_Main

1. 我在登录界面的Button事件中创建主界面,OK
[mw_shl_code=delphi,true]
Application.CreateForm(TForm_Main, Form_Main);
  Application.MainForm := Form_Main;
  Application.Title := Form_Main.Caption;
  Form_Main.Show;
[/mw_shl_code]


但是,由于Form_Main“内容丰富”,所以从登录界面切换到主界面的执行时间过长,导致用户体验较差,于是有了下面的2

2. 我在登录界面的OnCreate事件中使用多线程技术创建主Form
(1) 线程函数CreateMainForm:
[mw_shl_code=delphi,true]
procedure CreateMainForm();
begin
  Sleep(1000);//延时1秒.
  Application.CreateForm(TForm_Main, Form_Main);
end;
[/mw_shl_code]


(2) 登录Form的调用代码
[mw_shl_code=c,true]
procedure TForm_Login.FormCreate(Sender: TObject);
begin
  Form_Main := nil;
  TThread.CreateAnonymousThread(CreateMainForm).Start;
end;
[/mw_shl_code]


(3) 然后在登录界面的Button事件中直接使用主界面
[mw_shl_code=delphi,true]
procedure TForm_Login.ButtonLoginClick(Sender: TObject);
begin
  // do something here.

  Application.MainForm := Form_Main;
  Application.Title := Form_Main.Caption;
  Form_Main.Show;
  Close();
end;
[/mw_shl_code]



其结果是登录界面消失了,但是主界面没有出来,应用程序还在,感觉已经无界面了。

问题:这种做法是否可行,具体操作问题在哪里?
回复

使用道具 举报

1

主题

6

帖子

62

积分

注册会员

Rank: 2

积分
62
沙发
 楼主| 发表于 2015-6-14 10:49:24 | 显示全部楼层
京东数码购物支持本站
红鱼儿 发表于 2015-6-14 10:32
我这样实现的
1.MainForm自动创建
2.MainForm.OnActive事件中建立LoginForm并显示

参考了一下你的blog:http://blog.sina.com.cn/s/blog_44fa172f0102v3yt.html
感觉这应该是个可行的办法
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|新时代Pascal论坛

GMT+8, 2024-5-16 17:56 , Processed in 0.075508 second(s), 23 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表