在代码执行期间刷新DBGrid

时间:2014-06-10 14:07:35

标签: delphi delphi-5

我需要有关以下情况的建议。这些是我的设计设置:

object cdsMonitor: TClientDataSet
  Active = True
  …
  object cdsMonitorSendReceive: TBooleanField
    FieldName = 'SendReceive'
  end
  object cdsMonitorMessage: TStringField
    FieldName = 'Message'
  end
  object cdsMonitorTime: TTimeField
    FieldName = 'Time'
  end
end

object dsMonitor: TDataSource
  DataSet = cdsMonitor
  …
end

object dbgMonitor: TDBGrid
  …  
  DataSource = dsMonitor
  …
end

我使用以下代码向数据集添加数据:

cdsMonitor.Append;
cdsMonitorSendReceive.Value := False;
cdsMonitorMessage.Value := Bytes;
cdsMonitorTime.Value := Now;
cdsMonitor.Post;

在应用程序源中,有一个函数可以多次执行上面的代码块(在循环中)。问题是我没有看到附加的行逐个出现但是几秒钟我没有看到任何东西(函数很耗时),然后所有附加的行同时出现。我希望不仅在代码执行完成时看到结果,而且我希望在每个附加行之后刷新DBGrid,以便我可以实时观察进度。我可以通过添加

来实现这一目标
Application.ProcessMessages;

到上面的代码块。然而,这会干扰正常的代码执行流程,因为不仅网格被更新,而且其他消息也被处理,这是不可取的。所以这不是我要找的解决方案。还有其他想法吗?

1 个答案:

答案 0 :(得分:1)

您可以执行dbgMonitor.Repaint;

cdsMonitor.Append;
cdsMonitorSendReceive.Value := False;
cdsMonitorMessage.Value := Bytes;
cdsMonitorTime.Value := Now;
cdsMonitor.Post;
dbgMonitor.Repaint;

这将做你想要实现的目标