关于OnCreate(10分)

  • 主题发起人 主题发起人 Q_q
  • 开始时间 开始时间
Q

Q_q

Unregistered / Unconfirmed
GUEST, unregistred user!
我想在主窗口(froM1)执行前,先出让使用者输入名字及口令的窗口(from2),
于是在from1的OnCreate中加入from2.show,程序run时会出错,我用5.33版,
不知是不是5。33的问题,用5.37能行吗?还有其他什么简单的方法吗?
 
不要在OnCreate里显示其他窗体!
可以在application source里写!
先显示form2,后显示form1

 
form1.oncreate时form2还没建立, show当然出错
 
你可以参照如何做Splash Window的方法, 首先显示验证Form. 验证合法后再让
Application.run, 否则再给两次机会. 三次不对告诉她找系统管理员, halt.
 
splash windows的方法在哪能找到呢?
我在工程文件中先显示了from2,在from2中经确认后执行from1.show,
程序也会出错,执行from2.close不会出错,但from1只闪了一下,整个
程序就结束了,怎么让from2关闭,而from1能正常运行呢?
 
把FORM2从AUTO CREATION中移走,在FORM1 ONCREATE中写
FORM2 := APPLICATION.CREATEFORM(....);
FORM2.SHOWMODAL
 
Q_q可能有一些东西没搞清楚.

程序的执行顺序是这样的:

1 ,先执行各单元的初始化部分,调入DLL;
2 ,从主程序( project )的begin开始执行;
3 ,直到application.run时,开始按顺序create各个窗体;
如 form1,form2... ,顺序在project菜单里制定.
除了DataModule外的第一个form是主form,他关闭程序就关闭了.

你先在form1.oncreate里用到form2,由于form1比form2先create,会出错;
你后在2和3之间用到了create tform2,在里面调用form1,但是还没有form1,会出错.

解决方法是保持form2的独立性;
如果你是到远程去调数据库判断的,就比较麻烦,要小心保证DataModule在form2之前调入,
或者在form2里完全保持独立,把Tdatabase这类都在form2里做一遍.

一般来说,保持各个单元之间的联系是一个很有规划意识的事情,一定要想好层次,到最后
打补丁就难了.

你又说form1只闪了一下,检查你的程序,看看主form设对了没有,再开始trace吧.
不要意外form1.close了.
 
我估计 form1 是主窗体,在form1的onactive中建form2,
然后显示form2,这时把form1.enable:=false;
等口令通过后,在关掉form2,然后form1.enable:=true;
这样不就ok了吗。我就是这么干的。
 
接受答案了,想不到这问题能得到这么多的帮助,觉得10分太少,
请版主给Another eYes-5,cj-10,delphi2 fn2-10,huizhang-10,yaojiaqing-10,
曹晓钢-15,超过的分数从我的积分中拿吧.
 
接受答案了.
 
后退
顶部