一个如何做假进度条的问题,在线等待。。。。(50)

  • 主题发起人 主题发起人 新来的菜鸟
  • 开始时间 开始时间

新来的菜鸟

Unregistered / Unconfirmed
GUEST, unregistred user!
我用ADOQuery1,DBGrid1做了一个查询,我现在想在点查询按钮的时候先弹出一个进度条(当然这个进度条可以是假的,只要动就可以),当数据查询完后就进度条窗口关闭!如何实现??麻烦各位给我一个详细的例子谢谢!我已知道这个功能必须要多线程才能实现,但我不知道当点查询的时候如何创建一个新线程显示进度窗口,当数据查询完后如何销毁这个线程!!麻烦各位大哥帮我做个简单的例子,小弟谢谢了!!!
 
//滚动开始adoquery1.open;//滚动结束
 
try FrmFind := TFrmFind.Create(Application); FrmFind.Show; FrmFind.Animate1.Active := True; FrmFind.lbFind.Caption := '正在查询...'; FrmFind.lbFind.Update; {诊断} PatDiag; {基本信息} PatBase; finally FrmFind.Free; end;
 
呵,可能各位没明白我的意思!进度条我是可以自己弄,我现在的问题是在于当显示进度条的时候而后台的查询还在继续,当查询的数据返回完后就关闭掉进度窗口! 例如 form1是主窗体,form2是进度条 如果我要做个查询 Form2.ShowModal; ADOQuery1.close; ADOQuery1.SQL.Add('select * from test'); ADOQuery1.open; Form2.close; 如果按照上面的做法那就不能达到我的效果,我要的效果是当按查询按钮的时候先 显示Form2 但 ADOQuery1.close; ADOQuery1.SQL.Add('select * from test'); ADOQuery1.open; 会继续执行 当执行完上面的语句后就 Form2.close; 我大概知道做法但我不知道具体该如何实现 这里应该是生成一个新的线程,在这个线程里显示Form2 ADOQuery1.close; ADOQuery1.SQL.Add('select * from test'); ADOQuery1.open; 这里应该是关闭Form2然后销毁这个线程 以上两个地方具体我不懂该如何实现,麻烦各位帮我做个简单的例子,小弟谢谢了!!
 
必须调用另外一个程序显示,因为查询时你的京城其实已经"死了",呵呵!
 
把查询放到线程里,查询完成后把纪录集返回给主进程在线程启动前显示进度条,结束后关闭,OnTerminate是结束事件,在这里关闭进度条就好了
 
就这样 累加进度,完了,就结束或者开始创建 进度条 完了释放就可以了
 
delphi5开发人员指南看看呢,好像有介绍
 
我对数据库和多线程都不熟悉。ADOQuery1.open; 主要的操作都在这句话。要用一个进度条来模拟open操作的比较真实的进度,还是有点难度。在这句话没有执行完前,好像无法知道究竟满足条件的记录有多少。用进度条,总要知道ProgerssMAX吧。还是推荐2楼的方法,不用什么线程。用个动画,最简单。现在很多软件,包括杀毒软件都是这样。
 
整个竟成都等待,那里还能显示进度!
 
你在查詢的哪個線程那裡,當查詢結束的時候發送一個系統消息給主程序接收,再在相應消息的哪個函數那裡加上你的操作就可以了!
 
注意,在副線程裡面是不可以控制主線程的任何東西的,所以你只能通過消息處理來達到你的這種效果!
 
多人接受答案了。
 
后退
顶部