Tag: dbgrid

执行长时间运行的导出任务时如何获得响应式UI(表单)?

美好的一天人们。 首先,我不是以英语为母语的人,我可能会遇到一些语法错误。 我需要一些已经完成了一些东西或者应用程序的人的build议,好的,那就是我使用了delphiforms的TProgressBar,另外一个名为“TExcelApplication”的组件和一个TDBGrid。 当我导出DBGrid的内容时,应用程序“冻结”,所以我基本上把这个ProgressBar放到用户看到进程完成了多less。 我已经意识到,当TDBGrid检索每个行并将其导出到新的Excel工作簿时,您无法移动实际的表单,因此您必须等到该过程完成后才移动该表单。 那么,是否有可能做一些事情(我想过关于线程,但我不确定是否可以帮助),所以用户可以移动窗口,如果他想要的话? 非常感谢你花时间阅读并给我一个build议。 我正在使用Delphi XE。 以下是我用来导出行的代码: with ZQDetalles do begin First; while not EOF do begin i := i + 1; workSheet.Cells.Item[i,2] := DBGridDetalles.Fields[0].AsString; workSheet.Cells.Item[i,3] := DBGridDetalles.Fields[1].AsString; workSheet.Cells.Item[i,4] := DBGridDetalles.Fields[2].AsString; workSheet.Cells.Item[i,5] := DBGridDetalles.Fields[3].AsString; workSheet.Cells.Item[i,6] := DBGridDetalles.Fields[4].AsString; workSheet.Cells.Item[i,7] := DBGridDetalles.Fields[5].AsString; workSheet.Cells.Item[i,8] := DBGridDetalles.Fields[6].AsString; workSheet.Cells.Item[i,9] := DBGridDetalles.Fields[7].AsString; Next; barraProgreso.StepIt; end; end; 如果您想查看“导出”button的整个代码,请随时查看此链接: http […]