我担心这可能是“一段字符串有多长”的问题,但是想知道是否有人有一些难以理解的数字或建议。
我有一个TStringGrid可能有3,600行,可能更多,我们还不确定。由于显示器显然没有空间,屏幕上只显示20或30行。不幸的是,这些是第一个写的,用户必须向下滚动才能看到添加的行。
反转行的顺序可能更加用户友好,m表示最新的最后一行。要做到这一点,我需要做这样的事情(代码可能不准确)
// slightly quicker if there are many rows & no flicker
myStringGrid.Visible := False;
rowCount := myStringGrid.RowCount;
for row := 1 to Pred(rowCount) do
myStringGrid.Rows[row + 1] := myStringGrid.Rows[row];
myStringGrid.RowCount := myStringGrid.RowCount + 1;
// now add new row...
myStringGrid.Cells[1, 0] := <somthing>;
myStringGrid.Cells[1, 1] := <somthing else>;
myStringGrid.Cells[1, 2] := <etc>;
TestRunDataStringGrid.Visible := True;
我关注表现。如果没有人有任何经验,我会编写测试代码。报告回来。
只是想知道是否有人有这方面的经验或意见......
答案 0 :(得分:3)
试试这个
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
---
---
private
{ Private declarations }
public
{ Public declarations }
end;
type
TStringGridHack = class(TStringGrid)
protected
procedure InsertRow(ARow: Longint);
end;
implementation
{$R *.dfm}
procedure TStringGridHack.InsertRow(ARow: Longint);
var
iRow: Integer;
begin
iRow := Row;
while ARow < FixedRows do Inc(ARow);
RowCount := RowCount + 1;
MoveRow(RowCount - 1, ARow);
Row := iRow;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
TStringGridHack(StringGrid1).InsertRow(1);
end;
答案 1 :(得分:1)
我建议使用虚拟网格控件而不是VirtualTreeView。我有一个,由Roman Mochalov(РоманМочалов)编写,我认为它是100%开源的,但在网上没有多少。我在这里[{3}} [在skydrive上]: