各位老师,消息循环(Application.Run)之前,显示的Form也能相应消息该如何解释?(50)

  • 主题发起人 主题发起人 lyshw
  • 开始时间 开始时间
L

lyshw

Unregistered / Unconfirmed
GUEST, unregistred user!
各位老师,消息循环(Application.Run)之前,显示的Form也能相应消息该如何解释?工程文件代码:begin Application.Initialize; SplashForm := TSplashForm.Create(Application); SplashForm.Show; if SplashForm.StartProgram then begin Application.CreateForm(TMainForm, MainForm); Application.ShowMainForm := False; SplashForm.Close; MainForm.Login; //这里显示登录窗口 Application.Run; end; SplashForm.CloseProgram;end.在登陆窗口里也可以相应各种消息,这是为什么呢?是不是我有哪个地方概念不清?
 
我也不太懂,但应该是可以执行一些初始化的消息吧。
 
关键在 TApplication.CreateForm看看原码便知
 
我想是程序的预加载把。如果有例程,还可以选择退出,大家说那
 
有消息响应函数就可以响应了。。。你是在IDE里拖的FORM,又不是用CreateWindow函数没有给消息响应回调函数。application.run这里是消息队列,也就是消息循环。一般来说消息队列并不响应消息的。他只是取出、翻译并分发消息而已。一个线程只要有消息队列就可以保证该线程的所有窗口都可以接到消息,单个窗口是否可以响应消息,要看窗口自身的响应函数的
 
因为在Forms单元的initialization部分已经初始化Application了,他是在Begin处开始执行的,也就是说其实在run前application对象已经存在,并且消息循环也已经开始。
 
【red】你没有概念不清只是没有去看代码而已【red】MainForm.Login; //这里显示登录窗口关键是否你在这里是怎么显示的你窗口! 是 ShowModal 还是 Show;如果是ShowModal 那就很正常了! 看一下ShowModal的源代码有一行:Application.HandleMessage;其实Application.Run 也就是执行这个过程的, 也就是消息循环处理了! 这样楼主就明白了吧! Show 显示我就不多说了! 是Show最终都要执行到这个Application.Run的! 楼主 散分结贴吧!
 
能响应消息吗?是楼主眼花了吧。ShowModal的时候是自己处理消息的,但Show的时候是Application来处理,所以Show的时候,在Run之前是不能响应消息的。
 
ShowModal 堵塞就没有消息了 可以看下 ShowModal代码
 
showmodal的源代码里有processmessage的
 
后退
顶部