急问,如何实现dialog的execute? 要改foxmail的话,比较复杂要是自己写程序对一个Form来讲Form.ShowModal;不就能实现Modal方式显示吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果我要让他一进入modal就运行某个procedure怎么办? 在timer里findwindw('标题',null)监视其他窗体 Zig,可以实现进入modal后,在ONPaint事件里写代码如果只要运行一次,加一个private变量控制一下就行 加个时钟也行,create的时候打开时钟时钟到时运行程序 我faint,都不可行,那可是发送邮件啊,这样会吃掉所有的资源 不是,是让它一show就发送,发送结束后返回。 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; 如果我一直收不到信,它会不会就idle住什么也不干了? 你试试不就知道了我已经试过了,我用这种办法来实现软件自动过程升级的,没问题也没影响别的应用程序运行这里的OnIdle是指这个程序本身,并非独占系统资源整个系统对每个应用程序还是采用原先的资源分配方法实现的 这就看你自己处理程序的能力了OnIdle目前这种方法只会被运行一次,也就是说,你只会运行收信动作一次其它都被过滤了当然,你的收信动作不能总占着系统资源,在OnIdle里仅做启动工作真正的收信处理要用事件或消息来处理,这样,你的应用程序才会在适当的时候才运行相应的事件处理,而不会长时间占用资源当然,为了OnIdle更安全,你可以在MyIdleHandler过程里加上一句Application.OnIdle := nil;这样,OnIdle永远只会运行一次了 没有更好的方法?这个方法不好。我试了,把我另一个form中的timer都挤掉了。如果定义新消息又太复杂了。好像disabletaskwindows之类的可以用,不过它把paint都disable了.... 一个Form的创建和显示过程就那些Form显示完成并看见的更少你在Onpaint里试试吧,原理一样其它事件,Form都还不能看见呢 那么那些dialogs的execute是怎么办的? 好像必须要用disabletaskwindows和enabletaskwindows,有人可以让form继续响应事件又接着运行程序的吗? 建议是对的,不过我不想那么做。而且我是临时调用procedure create的,如果把sendmail放在procedure中比较麻烦。我先去睡觉,看看明天能不能有什么好办法。 经过我的反复试验,用disabletaskwindows大概可以,不过效果还是一般。多谢steps的多次回复。 多字符串全文匹配替换算法 怎么做 delphi的强制转换是什么 哥发的不是分,是烦恼 刚学DLL,请指教 小菜一碟——几个硬件端口控制效果较好的VCL,介绍给大家。(有示例代码) 问题得不到解答,散分? 帮菜鸟我一个忙吧!!!怎样获得应用程序所在文件夹?多少up一下吧!!! 系统是ghost的,excel安装不完全,ole导出就出错,改如何解决? 关于Delphi访问数据库的问题 请教delphi使用控件Chromium如何实现全网页截屏? convert(varchar(5),sdate,11)='' 如何上传文件?
findwindw('标题',null)
监视其他窗体
进入modal后,在ONPaint事件里写代码
如果只要运行一次,加一个private变量控制一下就行
时钟到时运行程序
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;
我已经试过了,我用这种办法来实现软件自动过程升级的,没问题
也没影响别的应用程序运行
这里的OnIdle是指这个程序本身,并非独占系统资源
整个系统对每个应用程序还是采用原先的资源分配方法实现的
OnIdle目前这种方法只会被运行一次,也就是说,你只会运行收信动作一次
其它都被过滤了
当然,你的收信动作不能总占着系统资源,在OnIdle里仅做启动工作
真正的收信处理要用事件或消息来处理,
这样,你的应用程序才会在适当的时候才运行相应的事件处理,
而不会长时间占用资源当然,为了OnIdle更安全,你可以在MyIdleHandler过程里加上一句
Application.OnIdle := nil;
这样,OnIdle永远只会运行一次了
这个方法不好。我试了,把我另一个form中的timer都挤掉了。
如果定义新消息又太复杂了。
好像disabletaskwindows之类的可以用,不过它把paint都disable了....
Form显示完成并看见的更少
你在Onpaint里试试吧,原理一样
其它事件,Form都还不能看见呢
而且我是临时调用procedure create的,如果把sendmail放在procedure中比较麻烦。
我先去睡觉,看看明天能不能有什么好办法。
多谢steps的多次回复。