在运行的程序中加入Application.ProcessMessages

解决方案 »

  1.   

      Form_Logo.show;
      Form_Logo.Update;or  Form_Logo.Show; 
      Form_Logo.Invalidate;
      

  2.   

    你的要求是做一个启动屏幕吧!
    我的模具管理系统中这样做的
    .....
    .....
      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;
      

  3.   

    谢谢大家的热心
    但有一点声明,我要做的不是启动封面
    程序不能写在Application.Run之前
    程序必须在主Form创建并完全显示出来以后自动执行
      

  4.   

    难道CSDN真是无高手吗???????

    要不,为什么每次都要我自己找到答案呢?!
    此题我已有答案,大家继续加油呵
    答对了有奖呵
      

  5.   

    那你写在主窗口的form.show事件中不行吗?
      

  6.   

    问题实际可以这样
    用一条Showmessage('hi');来测试
    要看到的是message窗口与form窗口同时看到,
    而不是先看到message窗口,点OK后才能看到Form窗口
    注意,不能使用OnPaint事件,此事件已经无效
    当然,message窗口也只能显示一次,不能多次显示由于目前CSDN的答题状况,除非有人答对,否则,我不会公开理想答案
      

  7.   

    好像OnActive可以(加个判断是否是第一次)
      

  8.   

    如果用OnActivate
    当你在里面放一个很占时间的函数时,如放一个驱动器映射函数
    你会发现,效果并非如你所想
    等你看到提示信息时,实际上整个过程已经执行结束了,并非看到界面后再执行
      

  9.   

    onpaint事件要执行两次,可不可以在第二次时执行,不过我不知道如何控制!请赐教!
      

  10.   

    如果让你用Onpaint事件,你会实现以上功能吗?
      

  11.   

    如果Onpaint有效,能实现者,我给10分,
    当然,我已经实现了,但用的不是Onpaint,但与paint有关
      

  12.   

    找了好久,找到了一个资料:
    不过根据这个资料和你的要求,恐怕还是不能达到你的要求,只有在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 的逻辑成员资料变数,以控制不要每次视窗重画时都检查设定.
      

  13.   

    kingron
    你的资料我看到过,流程我也清楚
    我试过了,对普通界面达到了理想的效果,
    但由于我用了一件控件,OnResize也失效了
    但你的推算没错,此问题结束,我会给你10分现在方法一已经出来了,在OnResize里写程序能实现简单功能,
    注意是简单功能,如果要处理占机时的功能的话,结果仍和OnActivate一样
      

  14.   

    可不可以这样:
    在主窗体创建之后,把焦点切换到别处(窗体上任意可视控件);然后在主窗体的ondeactivate中执行所要的程序。
      

  15.   

    在ondeactivate事件中实现。问题是如何切换焦点?
      

  16.   

    不知道你的答案是什么,可以在MouseMove中添加代码并设立一个标志。为了保证Mouse在这个窗体上面,可以使用SetCursorPos() API。
      

  17.   

    wanwangzhiwang
    切换焦点不可行,我要的效果就是看到立即执行的效果
    说白了,我这个软件是软件自动升级程序,每次运行自动查找升级版本,要升级就显示下载过程
    所以,看不到过程是不合理的kingron
    用setcursorpos(),问题是在什么地方运行它,升级时,机器在测试网络时是被独占的
    窗口得不到显示
    如果不用setcursorpos,用户不动鼠标,程序就得不到显示还是要感谢大家的答案,并不是故意为难大家
    只是想让大家真正的讨论一些技术问题
     
      

  18.   

    唉,看来CSDN的高手也就这点水平了,算了,给分
      

  19.   

    难道不可以拦截wm_paint消息吗?
      

  20.   

    难道不可以拦截wm_paint消息吗?