老掉牙问题:怎样在做数据处理时显示一个"模态"的窗口,处理完成后又关闭它?(50分)

  • 主题发起人 主题发起人 wyjkmsc
  • 开始时间 开始时间
W

wyjkmsc

Unregistered / Unconfirmed
GUEST, unregistred user!
我的程序经常要做比较费时的数据处理,为了让界面友好些,我想在处理
前显示一个信息窗,告诉用户"正在干什么...",这个窗口显示时要像模
态窗口一样,等我处理完后自动把它关闭,怎样比较聪明的实现呢?
 
form.showmodel

然后你在数据处理过程中给它sendMessage提示它现在正在干什么

最后再让它关掉
 
问题是一旦发出SHOWMODAL命令,主线程就停止了呀?这样的话
我又如何处理数据呢?再指点一下吧...
 
难道这样写吗:?
procedure TForm1.Button1Click(Sender:Object);
var
i:Integer;
begin
Form2.ShowModal
//Form2用来显示信息
for i:=1 to 1000 do //开始处理
begin
Label1.Caption:=IntToSTr(i);
SendMessage(Form2.Handle,MyProgressMessage,0,0);//发处理消息
end
//处理完毕
sendMessage(Form2.Handle,MyQuitMessage,0,0)
//发结束消息
end;

我是初学者,麻烦再指点一下,谢谢了
 
我是这样处理的,另建一个窗体在主窗体中showmodel他,
TMyiofileform为你要showmodel的子窗体

procedure TMyIoFileForm.FormActivate(Sender: TObject);
var
SaveCursor: TCursor;
begin
SaveCursor:=Screen.Cursor;
Screen.Cursor:=crHourGlass;
NeatenDataFile;// 这里是你要处理的事物
PostMessage(Handle,WM_CLOSE,0,0)
//处理完后关闭他
Screen.Cursor:=SaveCursor;
end;
 
这样做:
设计一个SPLASHFORM,FORMSTYLE为fsStayOnTop;
然后设置一个全局变量SPLASH_CAN_CLOSE;
在你的程序中SHOW这个窗体,然后SPLASH_CAN_CLOSE:=FALSE;
在SPLASHFORM的ONCLOSE中判断SPLASH_CAN_CLOSE是否为FALSE;
为FALSE不能关闭...(防止用户按ALT+F4)
等到数据处理完毕,SPLASH_CAN_CLOSE:=TRUE;
在关闭SPLASH窗体
 
十分感谢各位兄台慷慨相助.

还有其他好的方法吗?
 
不少了,都试试,应该有合适的
Fudei的方法:
PostMessage(Handle,WM_CLOSE,0,0)
//处理完后关闭他
Screen.Cursor:=SaveCursor;

Screen.Cursor:=SaveCursor;
ModalResult:=100
//大于0的数
简单些
 
我用邪招,不要笑我。
用Tpanel画一个,放点Bevel等,挺象样的。
设计时panel1.visible:=false;
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
Panel1.Visible:=true;
refresh;
for i := 0 to 100 do
begin
sleep(20);
end;
panel1.Visible:=false;
end;
 
用一个timer空件呢
 
多人接受答案了。
 

Similar threads

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