2Pascal-新时代的Pascal

标题: [求助]如何高效动态的创建Form? [打印本页]

作者: 凤栖梧    时间: 2015-6-14 10:13
标题: [求助]如何高效动态的创建Form?
为方面描述,我们假设应用程序里面有两个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]



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

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

作者: 红鱼儿    时间: 2015-6-14 10:32
我这样实现的
1.MainForm自动创建
2.MainForm.OnActive事件中建立LoginForm并显示

作者: 凤栖梧    时间: 2015-6-14 10:49
红鱼儿 发表于 2015-6-14 10:32
我这样实现的
1.MainForm自动创建
2.MainForm.OnActive事件中建立LoginForm并显示

参考了一下你的blog:http://blog.sina.com.cn/s/blog_44fa172f0102v3yt.html
感觉这应该是个可行的办法
作者: 红鱼儿    时间: 2015-6-15 08:39
那个方法,当时我测试是可行的。
现在看来不合理,因为xe8建立一个Form的速度够快。
所以,我让Application自动建立mainForm.

作者: weii    时间: 2015-6-18 10:06
个人愚见:
对于主窗体内容丰富的处理,我觉得可以参考一下其它App的处理方式。
例如:腾迅的全民飞机大战,这个里面元素和内容都相当多,那它是怎么做的呢?
-> 运行App
-> 显示启动画面(腾迅游戏)
-> 显示启动动画(光速工作室)
-> 显示预载页面(黑底,只有一个菊花和一行文本,文本内容只有一行:亲,请稍等,努力加载中...xx%)
-> 显示登录界面,登录验证时用一个很炫的速度标作为进度条, 减少用户的等待焦虑。
-> 显示通知界面,获取内容(你没看错,它是先显示出来,再转菊花获取内容)
-> 显示登录奖励界面
-> 登录成功后显示''主''窗体
-------------------------------------
虽然它肯定不是用Delphi写的,但很显示,我们可以参考人家的思路。
另外,不应该用PC上的开发模式来写App,不要硬性规定哪个是主窗,在App中只有Activity这个概念,谁主谁副是不重要的,因为你不能、也不应该同时显示2个窗体(虽然有同胎这样做了)




欢迎光临 2Pascal-新时代的Pascal (http://www.2pascal.com/) Powered by Discuz! X3