小编Cyc*_*var的帖子

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

美好的一天的人.首先,我不是英语母语,我可能会有一些语法错误.

我需要那些做过某事或类似我的应用程序的人的建议,好吧,我正在使用我的delphi形式的TProgressBar,另一个名为"TExcelApplication"和TDBGrid的组件.

当我导出DBGrid的内容时,应用程序"冻结",所以我基本上为用户放置了ProgressBar,以查看进程完成了多少.我已经意识到,当TDBGrid检索并将每行导出到新的Excel工作簿时,您无法移动实际的表单,因此您必须等到该过程完成才能移动该表单.

那么,是否有可能做某事(我考虑过线程,但我不确定它们是否可以帮助)所以用户可以移动窗口,如果他想要的话?

非常感谢你花时间阅读并给我一个建议.我正在使用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;
Run Code Online (Sandbox Code Playgroud)

如果您想查看"导出"按钮的完整代码,请随时查看此链接:http://pastebin.com/FFWAPdey

delphi excel dbgrid

6
推荐指数
2
解决办法
758
查看次数

标签 统计

dbgrid ×1

delphi ×1

excel ×1