首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >保存StringGrid时的进度条进度

保存StringGrid时的进度条进度
EN

Stack Overflow用户
提问于 2013-05-25 02:28:50
回答 1查看 561关注 0票数 0

我正在开发一个程序,上面有一个StringGrid;当按下某个特定按钮时,我的程序会将字符串it保存到c:\myfolder\tab9.txt中。我想放一个进度条来表示在保存过程结束时还剩下多少时间,因为有时网格有很多行,这可能需要一些时间。我使用的是以下代码:

代码语言:javascript
复制
procedure SaveSG(StringGrid:TStringGrid; const FileName:TFileName);
var
  f:    TextFile;
  i,k: Integer;
begin
  AssignFile(f, FileName);
  Rewrite(f);
  with StringGrid do
  begin
    Writeln(f, ColCount); // Write number of Columns
    Writeln(f, RowCount); // Write number of Rows
    for i := 0 to ColCount - 1 do  // loop through cells of the StringGrid
      for k := 0 to RowCount - 1 do
         Writeln(F, Cells[i, k]);
        end;
  CloseFile(F);
end; 

我以这种方式调用这个过程:SaveSG(StringGrid1,'c:\myfolder\myfile.txt');。我的问题是,我不知道如何制作一个进度条来指示保存的进度。目前,我只声明了ProgressBar1.Position:=0ProgressBar1.Max:=FileSize。你有什么意见建议?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-25 03:08:53

我们说的是多少个细胞?您的主要瓶颈是为每个单元格写入文件,而不是进行缓冲写入。

我建议您用来自TStringGrid的数据填充TStringList,并使用TStringList.SaveToFile()方法。

我在具有10,000,000个单元格(10,000行x 1,000列)的StringGrid上测试了以下过程,它在不到一秒的时间内将数据保存到磁盘:

代码语言:javascript
复制
procedure SaveStringGrid(const AStringGrid: TStringGrid; const AFilename: TFileName);
var
  sl    : TStringList;
  C1, C2: Integer;
begin
  sl := TStringList.Create;
  try
    sl.Add(IntToStr(AStringGrid.ColCount));
    sl.Add(IntToStr(AStringGrid.RowCount));
    for C1 := 0 to AStringGrid.ColCount - 1 do
      for C2 := 0 to AStringGrid.RowCount - 1 do
        sl.Add(AStringGrid.Cells[C1, C2]);
    sl.SaveToFile(AFilename);
  finally
    sl.Free;
  end;
end;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16741420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档