请问如何创建一个对话框,由这个对话框决定主窗口的一个长时间循环是否继续?(100分)

杨深

Unregistered / Unconfirmed
GUEST, unregistred user!
请问如何创建一个对话框,由这个对话框决定主窗口的一个长时间循环是否继续?
就是说这个对话框上有停止按扭,按了主窗口的程序就不再执行,我用一个
全局变量和模态窗口show,每次循环时进行检查全局变量决定是否返回,但是弹出的窗口
的按扭根本不让动有什么更好的办法?
 
用线程,
可是加入application.ProcessMessages
 
对,在循环内调用
application.ProcessMessages()。
用模态窗口,我想应该不行的。
 
请问
application.ProcessMessages();
用在线程中还是循环中
用非模态窗口怎样实现?
 
repeat
XXXXX;
//你的代码
Application.ProcessMessages();
until (StopFlag);
插在循环里
 
建议:
1、这个长时间循环写成一个线程。
2、对话框中用Timer启动这个线程。
procedure TThreadDlg.Timer1Timer(Sender:TObject);
begin
Timer1.Enabled := false;
FThread := TMyThread.Create(True);//FThread为一私有变量
FThread.OnTerminate := ThreadTerminate;
FThread.Resume;
end;

3、用对话框中按钮中止这个线程:
procedure TThreadDlg.btnStopClick(Sender:TObject);
begin
FThread.Suspend;
FThread.Terminate;
end;
4、设置Thread.OnTerminate为关闭这个对话框。
procedure TThreadDlg.ThreadTerminate;
begin
Close;
end;
5、主程序调用:
with TThreadDlg.Create(Self)do
begin
Timer1.Enabled := true;
ShowModal;
end;
这样,既可以启动长时间循环,又能显示ShowModal的窗口,
该窗口的btnStop可以控制循环中止。同时由于使用线程,
保证了主窗口不会接受不到消息。
 
请问DreamTiger:
在线程中能不能把程序中的TOleContainer,TWordDocument作为参数据传给线程,让
线程作OleContainer,WordDocument的一长时间操作处理,请问可以的话怎么做?
因为用非模态窗口可能用户还是可以在主窗口上乱动,我想采用你的办法。弹出模态
窗口。
能不能在程序中开一线程来作处理,然后弹一对话框,这个对话框对一个局变量起作用,
线程中检查这个变量,如果是TRUE就继续处理,不然中止自己。

 
Application.ProcessMessages();
放在循环中程序比较简单。
 
杨深:
重载TThread.Create;或者增加一个
Procedure TMyThread.SetParameter(OleContainer:TOleContainer;Word:TWordDocument);
begin
FOleContainer := OleContainer;
FWordDocument := Word;
end;
调用时:
FThread := TMyThread.Create(True);//FThread为一私有变量
FThread.OnTerminate := ThreadTerminate;
FThread.SetParameter(...);
FThread.Resume;
注意就是在进行实际操作Word时要使用synthornize。反正你也不准备让用户在这个
Thread运行中进行其他操作,用synthornize也不会有效率问题。
另一种方法就是:
不用Thread,在模态窗口的Timer事件中启动主窗口的循环。循环中
Application.Processmessages,同时检查某个变量。循环结束的话,关
闭模态窗口。模态窗口的btnStop就是设置这个变量。相对简单一些,不
过效率估计没有Thread好。
 
多谢各位
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
958
SUNSTONE的Delphi笔记
S
S
回复
0
查看
779
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
顶部