Form显示事件过程的问题!! 在运行的程序中加入Application.ProcessMessages 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Form_Logo.show; Form_Logo.Update;or Form_Logo.Show; Form_Logo.Invalidate; 你的要求是做一个启动屏幕吧!我的模具管理系统中这样做的.......... Application.Initialize; Frm_welcome:=TFrm_welcome.Create(application); //启动屏幕 Application.CreateForm(TFrm_main, Frm_main); Application.CreateForm(TFrm_dm, Frm_dm); Application.CreateForm(TFrm_P2, Frm_P2); Application.CreateForm(TFrm_P1, Frm_P1); Frm_welcome.Refresh; Frm_welcome.Show; Frm_Welcome.free; Application.Run; 谢谢大家的热心但有一点声明,我要做的不是启动封面程序不能写在Application.Run之前程序必须在主Form创建并完全显示出来以后自动执行 难道CSDN真是无高手吗???????唉要不,为什么每次都要我自己找到答案呢?!此题我已有答案,大家继续加油呵答对了有奖呵 那你写在主窗口的form.show事件中不行吗? 问题实际可以这样用一条Showmessage('hi');来测试要看到的是message窗口与form窗口同时看到,而不是先看到message窗口,点OK后才能看到Form窗口注意,不能使用OnPaint事件,此事件已经无效当然,message窗口也只能显示一次,不能多次显示由于目前CSDN的答题状况,除非有人答对,否则,我不会公开理想答案 好像OnActive可以(加个判断是否是第一次) 如果用OnActivate当你在里面放一个很占时间的函数时,如放一个驱动器映射函数你会发现,效果并非如你所想等你看到提示信息时,实际上整个过程已经执行结束了,并非看到界面后再执行 onpaint事件要执行两次,可不可以在第二次时执行,不过我不知道如何控制!请赐教! 如果让你用Onpaint事件,你会实现以上功能吗? 如果Onpaint有效,能实现者,我给10分,当然,我已经实现了,但用的不是Onpaint,但与paint有关 找了好久,找到了一个资料:不过根据这个资料和你的要求,恐怕还是不能达到你的要求,只有在OnResize中测试仪下了,不知道行不行。OnCreate->OnShow->OnActive->OnResize->OnPaint问题:我做了一个 MDI FORM,当MDI Form出现以後,如果判断出某些资料未设定,要再出现一个Form2.ShowModal设定资料的对话盒,应该写在那儿呢?我试过的OnActivate ,OnShow ,但MDI Form皆未出现就去执行这部份程式,就出现错误了。 要解决这个问题, 首先要了解从 Form 产生的""个过程中, 各事件发生与执行的次序.如果是一般的 SDI Form, 各事件的发生次序如下:OnCreateOnShow在萤幕上看到这个视窗OnActivateOnPaint如果是 MDI 视窗, 而 MdiChild 的第一个子视窗是在程式启动时, 就出现在MdiForm中的话,那麽,各事件的次序是主视窗的 OnCreate子视窗的 OnCreate子视窗的 OnShow子视窗的 OnActivate主视窗的 OnShow在萤幕上看到主视窗及第一个子视窗主视窗的 OnPaintok, 您发现了吗? OnShow 是在视窗被看到之前的事, 而 OnActivate 并没有发生,因此,您的问题中所采用的 '我试过的 OnActivate ,OnShow ....',当然不能在视窗於'被看到後'才出现设定资料的对话盒因此, 以您的状况, 检查与设定的程式可以写在主视窗的 OnPaint 中, 不过,OnPain是一个常发生的事件,所以应该要在主视窗的类别定义中额外加上一个 private 的逻辑成员资料变数,以控制不要每次视窗重画时都检查设定. kingron你的资料我看到过,流程我也清楚我试过了,对普通界面达到了理想的效果,但由于我用了一件控件,OnResize也失效了但你的推算没错,此问题结束,我会给你10分现在方法一已经出来了,在OnResize里写程序能实现简单功能,注意是简单功能,如果要处理占机时的功能的话,结果仍和OnActivate一样 可不可以这样:在主窗体创建之后,把焦点切换到别处(窗体上任意可视控件);然后在主窗体的ondeactivate中执行所要的程序。 在ondeactivate事件中实现。问题是如何切换焦点? 不知道你的答案是什么,可以在MouseMove中添加代码并设立一个标志。为了保证Mouse在这个窗体上面,可以使用SetCursorPos() API。 wanwangzhiwang切换焦点不可行,我要的效果就是看到立即执行的效果说白了,我这个软件是软件自动升级程序,每次运行自动查找升级版本,要升级就显示下载过程所以,看不到过程是不合理的kingron用setcursorpos(),问题是在什么地方运行它,升级时,机器在测试网络时是被独占的窗口得不到显示如果不用setcursorpos,用户不动鼠标,程序就得不到显示还是要感谢大家的答案,并不是故意为难大家只是想让大家真正的讨论一些技术问题 唉,看来CSDN的高手也就这点水平了,算了,给分 难道不可以拦截wm_paint消息吗? 难道不可以拦截wm_paint消息吗? delphi WaveAudio控件的使用 我用的是ADQuery控件。數據插入數據庫有錯。 如何打开windows自带的计算器 你了解delphi吗,今天发现一个很怪的问题.delphi7.0下. 问一个自己都觉得白痴的问题,关于菜单的 我在一个窗体中加入了30个edit,如何判断某一个edit的值发生了变化呢?? 有关数据库的问题!(SQLServer) 为什么程序员没有效率?up有份 给位高人,此问题困扰我多时,请帮忙看看我的QQ是63070398 为何报表预览总显示不出来query的动态查询结果? 小菜求援啦!分可不少! 小女子的三大问题。(可惜只能给20分……,对不起了)
Form_Logo.Update;or Form_Logo.Show;
Form_Logo.Invalidate;
我的模具管理系统中这样做的
.....
.....
Application.Initialize;
Frm_welcome:=TFrm_welcome.Create(application); //启动屏幕
Application.CreateForm(TFrm_main, Frm_main);
Application.CreateForm(TFrm_dm, Frm_dm);
Application.CreateForm(TFrm_P2, Frm_P2);
Application.CreateForm(TFrm_P1, Frm_P1);
Frm_welcome.Refresh;
Frm_welcome.Show;
Frm_Welcome.free;
Application.Run;
但有一点声明,我要做的不是启动封面
程序不能写在Application.Run之前
程序必须在主Form创建并完全显示出来以后自动执行
唉
要不,为什么每次都要我自己找到答案呢?!
此题我已有答案,大家继续加油呵
答对了有奖呵
用一条Showmessage('hi');来测试
要看到的是message窗口与form窗口同时看到,
而不是先看到message窗口,点OK后才能看到Form窗口
注意,不能使用OnPaint事件,此事件已经无效
当然,message窗口也只能显示一次,不能多次显示由于目前CSDN的答题状况,除非有人答对,否则,我不会公开理想答案
当你在里面放一个很占时间的函数时,如放一个驱动器映射函数
你会发现,效果并非如你所想
等你看到提示信息时,实际上整个过程已经执行结束了,并非看到界面后再执行
当然,我已经实现了,但用的不是Onpaint,但与paint有关
不过根据这个资料和你的要求,恐怕还是不能达到你的要求,只有在OnResize中测试仪下了,不知道行不行。OnCreate->OnShow->OnActive->OnResize->OnPaint问题:我做了一个 MDI FORM,当MDI Form出现以後,如果判断出某些资料未设定,
要再出现一个Form2.ShowModal设定资料的对话盒,应该写在那儿呢?我试过的
OnActivate ,OnShow ,但MDI Form皆未出现就去执行这部份程式,就出现错误了。
要解决这个问题, 首先要了解从 Form 产生的""个过程中, 各事件发生与执行的次序.如果是一般的 SDI Form, 各事件的发生次序如下:
OnCreate
OnShow
在萤幕上看到这个视窗
OnActivate
OnPaint
如果是 MDI 视窗, 而 MdiChild 的第一个子视窗是在程式启动时, 就出现在MdiForm中的话,
那麽,各事件的次序是
主视窗的 OnCreate
子视窗的 OnCreate
子视窗的 OnShow
子视窗的 OnActivate
主视窗的 OnShow
在萤幕上看到主视窗及第一个子视窗
主视窗的 OnPaint
ok, 您发现了吗? OnShow 是在视窗被看到之前的事, 而 OnActivate 并没有发生,因此,您的问题中所采用的 '我试过的 OnActivate ,OnShow ....',
当然不能在视窗於'被看到後'才出现设定资料的对话盒
因此, 以您的状况, 检查与设定的程式可以写在主视窗的 OnPaint 中, 不过,OnPain是一个常发生的事件,所以应该要在主视窗的类别定义中额外加上一个 private 的逻辑成员资料变数,以控制不要每次视窗重画时都检查设定.
你的资料我看到过,流程我也清楚
我试过了,对普通界面达到了理想的效果,
但由于我用了一件控件,OnResize也失效了
但你的推算没错,此问题结束,我会给你10分现在方法一已经出来了,在OnResize里写程序能实现简单功能,
注意是简单功能,如果要处理占机时的功能的话,结果仍和OnActivate一样
在主窗体创建之后,把焦点切换到别处(窗体上任意可视控件);然后在主窗体的ondeactivate中执行所要的程序。
切换焦点不可行,我要的效果就是看到立即执行的效果
说白了,我这个软件是软件自动升级程序,每次运行自动查找升级版本,要升级就显示下载过程
所以,看不到过程是不合理的kingron
用setcursorpos(),问题是在什么地方运行它,升级时,机器在测试网络时是被独占的
窗口得不到显示
如果不用setcursorpos,用户不动鼠标,程序就得不到显示还是要感谢大家的答案,并不是故意为难大家
只是想让大家真正的讨论一些技术问题