Maw*_*awg 4 delphi tstringgrid
我用Google搜索并找到了很多建议,但这一切似乎已经好几年了,但没有任何帮助.
我有一个8列的字符串网格,一旦我得到超过几百行,它需要超过2秒来填充(我使用GetTickCount进行比较).
我试过StringGrid.Perform(WM_SETREDRAW, 0, 0)(0, 1最后).我
Visible := False在更新时尝试过设置.两者都没用.
没有BeginUpdate()方法.
有什么建议?德尔福XE2启动器.如果经过试用和测试,我愿意使用FOSS第三方VCL字符串网格.
[更新]使用TDrawGrid ..."TDrawGrid没有属性"Cells",就像它的兄弟TStringGrid一样.你的代码必须计算显示数据的位置,然后它必须在"Canvas"上绘制数据的表示"电网."
这听起来像我很多工作:-(
使用VirtualTreeView - 如果足够快,听起来不错.我不会有任何子节点.(更新++我刚刚在主页上阅读了这篇文章"Virtual Treeview非常快.添加一百万个节点只需要700毫秒").那么速度没问题.但是只使用字符串网格会很好.特别是用户可以点击和排序的地方.
或者,stringgrid只有20行高.也许我只能处理滚动条点击并在用户滚动时清除并重新填充这20行?
[Furtehr更新]我从TStringGrid更改为TListView代码有Beginupdate()),但这可以忽略不计.Ops,我忘记了"viortual模式" - brb.
顺便说一句,数据是只读的,只是为了显示.
当然这是一个非常常见的探测器?
没有
BeginUpdate()方法.
TStringGrid确实有BeginUpdates:你需要通过Rows[]或者Cols[]数组来访问它TStrings,但是为了添加新数据,使用Cols[]数组最有意义:
for i := 0 to Grid.ColCount - 1 do
begin
Grid.Cols[i].BeginUpdate;
try
//Add row data
for j := 1 to Grid.RowCount - 1 do
Grid.Cols[i][j] := ...;
finally
Grid.Cols[i].EndUpdate;
end;
end;
Run Code Online (Sandbox Code Playgroud)
我确信我之前已经使用了这个速度来提高速度.
| 归档时间: |
|
| 查看次数: |
7057 次 |
| 最近记录: |