求教:如何实现程序运行中弹出进度条窗口,完成后关闭?(50分)

  • 主题发起人 主题发起人 duke2000
  • 开始时间 开始时间
自已做一个进度条窗口,就行了.
 
我没有表述清楚吗?我的问题是,在程序运行窗体调用并显示进度条窗体,并控制其中的进度条,完成后关闭进度条窗体。程序窗体如何进行控制?
 
~~这个进度条窗口不能用showmodal显示~~用 show~~就行了~访问这个进度条窗口上进度条的.positon属性就行了
为了达到显示进度条的时候不能有别的操作~可以先把主窗口的Enabled:=False;
~至于要引用进度条窗口的单元就不用说了吧
 
To xiaohongna:
这样处理后情况时,进度窗口显示出来了,但是里面的process控件以及其他控件都无法正常显示,类似该窗体未显示完全一样,直到关闭该窗体。
是不是要用到多线程?
 
刚才忘说了一句~~现在以后调用一次 进度条窗口的update一次就行了~~强制更新以下窗口
 
每调用一次,用Application.ProcessMessages让程序换气。
 
用多线程处理
 
用消息可以。
1 新建1个单元文件,在form上放置一个进度条。
自定义消息和消息拦截函数。
interface
const
ps_message=WM_USER+3456://

在form的
type
..
private
procedure getmysessage(var msg:Tmessage):message ps_message;
end;
procedure Tform1.getmysessage(var msg:Tmessage):message ps_message;
begin
//根据这2个信息传递过来的消息参数。
if (lparam>self.ps.position) and (lparam<=100) then
self.ps.position:=lparam;
if wparam=1 then
self.ps.position:=0;
end;
在formshow事件里写入
begin
self.ps.min:=0;//ps就是进度条
self.ps.max:=100;
end;

在其他单元里调用的时候
imp...
use unit1;

procedure xx;
var
const
ps_message=WM_User+3456;
begin
applicaton.createform(Tfomr1,form1);
form1.showmodal;
....
sendmessage(form1.handle,ps_message,0,1);//第一个lparam,第二个是Wparam
....
sendmessage(form1.handle.ps_message,32,0);//进度条到32%处
...
sendmessage(sendmessage(form1.handle.ps_message,100,0);//进度条到100%处
form1.free;
end;

//简单的思想就是用消息驱动form1上的进度条
 
不就创建一个窗口,窗口里有 进度条 啊
form1 里调用 form2
进度条完了再销毁 form2
 
我测试了一下,情况时这样:
使用Delphi2006自带的ProcessBar时,用show方法,进度窗体只有进度条可以显示进度情况,但是其他控件,连label都不能正常显示出来。我开始使用cxProcessBar(比较漂亮),就全都不能正常显示了。
我觉得用多线程应该是比较好的解决方案,但是找了一些多线程的资料,看了半天也不知如何能实现,怎么传递进度条的步进参数到线程里呢?谁知道请写个简单的代码。现在我在进度窗体上只放一个ProcessBar,初步实现这个功能。
还有就是cxProcessBar如何设置步长(ProcessBar的step)以及步进(ProcessBar的stepit)?难道只能position=position+1?请用过DevExpress.ExpressQuantumGrid控件包的指教一下。
 
To xiaohongna:
多谢!你的update方法可行,放分!
多谢其他朋友。
 

Similar threads

后退
顶部