怎样实现在作大量运算时显示一个模态的带有进度条的对话框dlg,运算完毕自动关闭(50分)

I

imstev

Unregistered / Unconfirmed
GUEST, unregistred user!
我的想法是开始计算前调用 dlg.ShowModal;
在dlg 的OnActive()中
begin
Cal();//计算函数
Close;
end;
可是在OnActive()中调用Close 没法关闭该对话框。
请问除了用计时外还有什么方法.
例如怎么用PostMessage()等?
 
用一个定时器来做
Result:=Cal();
if Result=100 then
Close
 
为什么要显示为模态???首先你的设计思路有问题。
 
用模态对话框是为了更直观显示计算的进度,同时避免用户在进行计算时
作多余的操作
 
什么叫模态,给讲讲。
 
计算放到Thread中,在OnTerminate中关闭模态窗口
 
同意,对话框模态窗口显示后,记时1毫秒,然后触发calc()
在calc()中完成时,关闭窗口
 
procedure dlg.FormPaint(Sender: TObject);
begin
OnPaint:=nil;
Cal();//计算函数
Close;
end;
 
建立dlg之后:
dlg.OnPaint:=dlg.FormPaint;
dlg.ShowModal;
 
int i=0;
RE->Lines->Add(DateTimeToStr(Now())+":琩тTemp??ゅン");
//Θネ羬?ゅン?
while(FileExists(ExtractFilePath(Application->ExeName) + "temp"+"//"+AnsiString(i)+".z")||FileExists(ExtractFilePath(Application->ExeName) + "temp"+"//"+AnsiString(i)))
{
Press->CGPress->AddProgress(5);//进度条前进
FMain->Cursor=crHourGlass;
i++;
}
Press->CGPress->Hide()//进度条关闭
 
我找到一个办法,用自定义消息,看下面的代码。
计算完成后,发送一个消息,在接收到该消息的事件中关闭窗口。
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
const
WM_MyClose = WM_User+100;


type
TForm2 = class(TForm)
procedure FormShow(Sender: TObject);
private
{ Private declarations }
procedure WMclose(var Message: TMessage);
message WM_MyClose;

public
{ Public declarations }
end;

var
Form2: TForm2;
implementation
{$R *.DFM}
procedure TForm2.FormShow(Sender: TObject);
begin
calc();
PostMessage(Form2.Handle, WM_Myclose, 0, 0);
end;

procedure TForm2.WMclose(var Message: TMessage);
begin
close;
end;

end.
 
还没看懂已经晕了 我不太明白如何在程序计算时 进度条可以正常运行不受影响
有必要用Thread吗?
 
如何实现在完成了任务后自动关闭当前进度提示窗口?
 
NND。你连邮件都不接收,呵呵,我删除!!!(解答方案已删除)
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
892
DelphiTeacher的专栏
D
顶部