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://2pascal.com/)
Powered by Discuz! X3