弹出对话框的问题(100分)

  • 主题发起人 主题发起人 zhoulingj
  • 开始时间 开始时间
Z

zhoulingj

Unregistered / Unconfirmed
GUEST, unregistred user!
ShowMessage出来一个对话框后,程序就会被暂停,直到点确定后才会继续响应.<br>可是我现在又需要用这种弹出对话框,可是又需要程序可以响应其它的命令,至少不至于像死了一样,应该怎么办?
 
你自己写一个对话框是最直接的办法
 
把主执行代码放在线程或定时器当中,就不会因为弹出对话框而停止。<br>比如一个简单的例子:<br>unit Unit1;<br><br>interface<br><br>uses<br> &nbsp;Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,<br> &nbsp;Dialogs, ExtCtrls;<br><br>type<br> &nbsp;TForm1 = class(TForm)<br> &nbsp; &nbsp;Timer1: TTimer;<br> &nbsp; &nbsp;procedure FormActivate(Sender: TObject);<br> &nbsp; &nbsp;procedure Timer1Timer(Sender: TObject);<br> &nbsp;private<br> &nbsp; &nbsp;{ Private declarations }<br> &nbsp;public<br> &nbsp; &nbsp;{ Public declarations }<br> &nbsp;end;<br><br>var<br> &nbsp;Form1: TForm1;<br> &nbsp;i:integer;<br>implementation<br><br>{$R *.dfm}<br><br>procedure TForm1.FormActivate(Sender: TObject);<br>begin<br> &nbsp;application.ProcessMessages;<br> &nbsp;i:=0;<br> &nbsp;showmessage('aaa');<br>end;<br><br>procedure TForm1.Timer1Timer(Sender: TObject);<br>begin<br> &nbsp;i:=i+1;<br> &nbsp;application.ProcessMessages;<br> &nbsp;caption:=inttostr(i);<br><br>end;<br><br>end.
 
呵呵,<br>1,开辟线程(程序员一定要学会用)<br>2,自己使用新窗体自定义对话框<br>3,改进WEILIU代码(我感觉改了更能说明问题,侵犯版权莫怪哈)<br>procedure TForm1.FormActivate(Sender: TObject);<br>begin<br> &nbsp;application.ProcessMessages;<br> &nbsp;i:=0;<br>end;<br><br>procedure TForm1.Timer1Timer(Sender: TObject);<br>begin<br> &nbsp;i:=i+1;<br> &nbsp;application.ProcessMessages;<br> &nbsp;caption:=inttostr(i);<br> &nbsp;if i mod 5 = 0 then<br> &nbsp; &nbsp;showmessage('aaa');<br>end;
 
放在定时器里不知道.不过放在线程里我当然知道不会像死掉一样.<br>但我看QQ,它开一个个人设置的窗体,然后应用后会弹出一个对话框,此时个人设置窗体不可用,可是主窗体还可以用,难道它把主窗体把在一个线程里在?应该不会吧...<br>如果自己写一个对话框也可以,用模式的就和showmessage一个样了,不用模式的吧.那对话框的作用就仅仅是个提示,不符合要求嘛!
 
不是把主窗体放在一个线程里<br>而是把一个线程放在主窗体里
 
楼主有没有发现QQ等软件采取的模式和我们一般的程序不一样。<br>每个聊天窗体或者设置窗体,都会在任务栏生成一个按钮(或者叫图标),而我们一般的程序 ,一般整个程序只有一个图标。
 
一般有你这种需求时,不用对话框<br>而用statusbar、edit类的控件,在上面现实提示文本
 
自己做一个msgform,需要显示的时候调用自己的msgform<br>如msgform.showmsg('xxxxx')
 
去这里看看,有相关文章<br>http://blog.csdn.net/jzj_jony
 
自己写个对话框, show到最外面, 然后程序继续执行.
 
to happycyp:<br>QQ的模式跟一般的基本一个样,无非就是把其它的窗体都放在任务栏里显示嘛!我们也是这样做的.<br><br>to dey-999:<br>怎么把一个线程放在主窗体里?你的意思是在线程里SHOW一个窗体出来吗?
 
to zhoulingj:<br>建一个线程(建议用createthread),在该线程中显示对话框(用messagebox函数显示,不用showmessage)。要显示的内容通过参数传递给线程。
 
不是,很多线程例子是直接放在窗体中的,窗体创建后就马上创建线程了
 
好吧.我会试一下的.但是我还想问下.SHOW出来的窗体,我如何把他指定给另一个窗体,就是说如果SHOW出来的窗体不关闭的话另一个窗体根本无法获得焦点...
 
当然也就无法关闭了喽.以前自己写的一个对话框,哪个窗体SHOW这个对话框就直接把这个窗体禁用,然后等对话框关了然后再打开这个窗体.不过这个办法不好用,很多不利的地方
 
QQ那个对话框的父窗口是设置窗口,不是QQ的主窗体,并且QQ面板窗口也不是QQ的主窗口。。。。。。
 
to apacheii:<br>嗯~QQ面板窗口是不是QQ的主窗体我的确不知道...<br>我就是想知道应该如何实现呢?
 
昏.谁能不能介绍几本好的讲即时通讯的书呀?
 
最好自已做一个messagebox窗口,就算是创建新的线程中使用showmessage还是一样
 
后退
顶部