要改foxmail的话,比较复杂
要是自己写程序
对一个Form来讲
Form.ShowModal;
不就能实现Modal方式显示吗?

解决方案 »

  1.   

    如果我要让他一进入modal就运行某个procedure怎么办?
      

  2.   

    在timer里
    findwindw('标题',null)
    监视其他窗体
      

  3.   

    Zig,可以实现
    进入modal后,在ONPaint事件里写代码
    如果只要运行一次,加一个private变量控制一下就行
      

  4.   

    加个时钟也行,create的时候打开时钟
    时钟到时运行程序
      

  5.   

    我faint,都不可行,那可是发送邮件啊,这样会吃掉所有的资源
      

  6.   

    不是,是让它一show就发送,发送结束后返回。
      

  7.   

    procedure TfrmMain.FormCreate(Sender: TObject);
    begin
      Application.OnIdle:= MyIdleHandler;
    end;procedure TfrmMain.MyIdleHandler(Sender: TObject; var Done: Boolean);
    begin
      if blStartMark then Exit;
      blStartMark := true;
      
    //  ...主要任务
    end;声明如下  
    private
        { Private declarations }
        blStartMark: Boolean;
        procedure MyIdleHandler(Sender: TObject; var Done: Boolean);
    end;
      

  8.   

    如果我一直收不到信,它会不会就idle住什么也不干了?
      

  9.   

    你试试不就知道了
    我已经试过了,我用这种办法来实现软件自动过程升级的,没问题
    也没影响别的应用程序运行
    这里的OnIdle是指这个程序本身,并非独占系统资源
    整个系统对每个应用程序还是采用原先的资源分配方法实现的
      

  10.   

    这就看你自己处理程序的能力了
    OnIdle目前这种方法只会被运行一次,也就是说,你只会运行收信动作一次
    其它都被过滤了
    当然,你的收信动作不能总占着系统资源,在OnIdle里仅做启动工作
    真正的收信处理要用事件或消息来处理,
    这样,你的应用程序才会在适当的时候才运行相应的事件处理,
    而不会长时间占用资源当然,为了OnIdle更安全,你可以在MyIdleHandler过程里加上一句
    Application.OnIdle := nil;
    这样,OnIdle永远只会运行一次了
      

  11.   

    没有更好的方法?
    这个方法不好。我试了,把我另一个form中的timer都挤掉了。
    如果定义新消息又太复杂了。
    好像disabletaskwindows之类的可以用,不过它把paint都disable了....
      

  12.   

    一个Form的创建和显示过程就那些
    Form显示完成并看见的更少
    你在Onpaint里试试吧,原理一样
    其它事件,Form都还不能看见呢
      

  13.   

    那么那些dialogs的execute是怎么办的?
      

  14.   

    好像必须要用disabletaskwindows和enabletaskwindows,有人可以让form继续响应事件又接着运行程序的吗?
      

  15.   

    建议是对的,不过我不想那么做。
    而且我是临时调用procedure create的,如果把sendmail放在procedure中比较麻烦。
    我先去睡觉,看看明天能不能有什么好办法。
      

  16.   

    经过我的反复试验,用disabletaskwindows大概可以,不过效果还是一般。
    多谢steps的多次回复。