在Delphi中,如果使用TCustomGrid或其派生类,如果要使它能够显示当前行的时候,我们可以这样来设置
AGrid.Row := ARow(指定行),Grid一般来说会自动滚动到指定的行,但如果这个Grid还从未被显示过出来,就是说这个Grid动态创建后就马上显示出来,它就不会自动滚动到当前行了。
不知道是我还没找到其内在的解决方法,还是TGrid本来就是这样的。请大家帮忙一下。

解决方案 »

  1.   

    刚才忘了说明,我已经自行解决了这个问题,只是我修改了VCL中的TCustomGrid,在其中加了个翻页的函数(TurnPageTo),但还有没有更好的方法呢?
      

  2.   

    谢谢咯!
    顺便把自己写的程序贴出来procedure TCustomGrid.TurnPageTo(const ARow: Integer);
    var
    NewTopLeft, MaxTopLeft: TGridCoord;
    DrawInfo: TGridDrawInfo;
    begin
    CalcDrawInfo(DrawInfo);
    MaxTopLeft.X := ColCount - 1;
    MaxTopLeft.Y := RowCount - 1;
    MaxTopLeft := CalcMaxTopLeft(MaxTopLeft, DrawInfo);
    NewTopLeft := FTopLeft;
    NewTopLeft.Y := ARow;
    NewTopLeft.X := Math.Max(FixedCols, Math.Min(MaxTopLeft.X, NewTopLeft.X));
    NewTopLeft.Y := Math.Max(FixedRows, Math.Min(MaxTopLeft.Y, NewTopLeft.Y));
    if (NewTopLeft.X <> FTopLeft.X) or (NewTopLeft.Y <> FTopLeft.Y) then
    MoveTopLeft(NewTopLeft.X, NewTopLeft.Y);
    end;
    -------
    以前写的。有点傻。
      

  3.   

    我看有一个CanEditShow函数是不是因为它在没有paint之前为假,所以设置Agrid.Row时无效,稍微看了一点,不知道对不对