如何显示这样的窗体(100分)

  • 主题发起人 主题发起人 sunqi
  • 开始时间 开始时间
S

sunqi

Unregistered / Unconfirmed
GUEST, unregistred user!
当我的程序正在进行一次长时间的处理时,我想出现一个窗口提示用户
“请等待,正在处理数据''的提示,但窗口能出现,文字确不能出现,请问
如何解决
 
奇怪.
你吧文字放到窗体里了吗?你用的不会是不支持中文的吧?
能看一下你的程序吗?
 
不会吧?
用一个FORM加一个LABLE就可以搞定的,
刚才又试了一遍,如果你那儿不行,那一定是DELPHI的问题了!

 
可能你的长时间处理影响Label的显示, 使用Form的RePaint方法
 
呵呵,在你的耗时的操作前(如数据库操作)前加上application.processmessage
 
用Update方法应该能解决.
 

Form1.Show;
Form1.Refresh;

... {耗时操作}

Form1.Close;
 
agree with Pipi.
 
首先要刷新一下,例如:update,Refresh,等操作,然后可以适当使用
Application.ProcessMessages, 但如果是Delphi 1.0,或Windows3.1
则请小心,因为不是多任务系统,可以用连续敲键来测试。
 
这样调用试试
form2。canvas。texeout(x,y,‘hello’);
form2。show;
 
必须定期refresh.
 
是循环处理吗?
如是,在你的循环里面加一下 Application.ProcessMessages()
 
极同意pipi,因为我就是这样做的,效果很棒。
其实文字不能显示的原因就是系统太忙,来不及写字。
 
我曾经出现过这样的情况,应该是系统太忙,来不急处理任何东西,几乎要死机的感觉。得执行update操作
 
对不起,这么晚才回复。
 
同意Pipi
另外,ProcessMessage方法,也可以用于在一个很长时间的一个循环处理中
让用户可以有一个机会中断操作
例如要一千条记录,(假设你是一条一条来删除的,当然,这样的可能性不大啦)
如果你在删除每一条之后,执行一句ProcessMessage,则用户可以有机会中断此操作
var
InterruptFlag: Boolean;
procedure TForm1.Button1Click(Sender: TObject)
begin
InterruptFlag := Flase;
while (not Table1.EOF) and (not InterruptFlag) do
begin
Table1.Delete;
ProcessMessage;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
InterruptFlag := True;
end;
 
在你的耗时的操作前(如数据库操作)前加上
application.processmessage

label1.caption:='running';
application.processmessage;
..
..
 
同意Pipi,如果是循环的话。
 
一方面要让文字显示就用form.refresh
另一方面若你要想让处理时窗口可以响应用户的鼠标拖动等等
则加上Application.ProcessMessage
 
后退
顶部