Delphi 在代码执行期间刷新DBGrid
我需要关于以下情况的建议。以下是我的设计设置:Delphi 在代码执行期间刷新DBGrid,delphi,delphi-5,Delphi,Delphi 5,我需要关于以下情况的建议。以下是我的设计设置: object cdsMonitor: TClientDataSet Active = True … object cdsMonitorSendReceive: TBooleanField FieldName = 'SendReceive' end object cdsMonitorMessage: TStringField FieldName = 'Message' end object cdsMonit
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;
到上面的代码块。但是,这会干扰正常的代码执行流程,因为不仅网格会更新,而且其他消息也会被处理,这是不可取的。所以这不是我想要的解决方案。还有其他想法吗?您可以执行
dbgMonitor.Repaint代码>
cdsMonitor.Append;
cdsMonitorSendReceive.Value := False;
cdsMonitorMessage.Value := Bytes;
cdsMonitorTime.Value := Now;
cdsMonitor.Post;
dbgMonitor.Repaint;
这将实现您想要实现的功能YourGrid.DataSource.DataSet.Refresh
不会有帮助吗?[只是猜测]您是否尝试过通过调用循环周围的cdsMonitor.DisableControls和cdsMonitor.EnableControls来替换Application.ProcessMessages?它不会显示中间更新,但应该比没有中间更新快得多。@TLama,不,Refresh
不起作用。@moskito-x是的,我看到了,但直到现在才有机会尝试它。谢谢这正是我要找的@瑞克77:很高兴知道它有用。Thx:-)