在Delphi XE2中使用样式的字符串网格 - 滚动条不会更新

时间:2012-02-11 16:02:29

标签: delphi styles scrollbar delphi-xe2 tstringgrid

我在Delphi XE2中制作了一个简单的应用程序,它特别使用了“Carbon”风格。有一个庞大的字符串网格,有几千行。我有一个循环遍历此网格记录的过程,做一些工作,并在网格中进行一些更改。当流程循环时,当前正在处理的行会突出显示(通过设置TStringGrid.Row)。

问题在于,当我将样式应用于此网格时,滚动条不会在行更改时更改位置。循环在处理时正确地突出显示每一行,但是当它到达列表末尾时,右侧的滚动条仍然一直在顶部。

如何让网格的滚动条随之移动?

以下是我如何循环的示例:

procedure TForm1.Button1Click(Sender: TObject);
var
  X: Integer;
begin
  FStop:= False;
  for X:= 1 to Grid.RowCount - 1 do begin
    if FStop then Break; //Ability to stop loop
    Grid.Row:= X; //Highlight current row
    DoSomeLenghyWork;
    ChangeSomethingOnGrid;
    Application.ProcessMessages; //Keep program responding
  end;
end;

当我不使用任何样式时,一切正常。

2 个答案:

答案 0 :(得分:2)

  1. 如果invalidate和repaint不为您做任何事情,请尝试调整字符串网格的大小:

    Grid.Width:= Grid.Width - 1;    Grid.Width:= Grid.Width + 1;

  2. 尝试使用隐藏和显示滚动条的字符串网格选项。在更新之前隐藏它们并在之后显示它们。也许这将迫使他们重新粉刷。

  3. 尝试移动滚动位置并将其移回原始位置。

答案 1 :(得分:2)

这对我有用 - 它强制窗口重新绘制StringGrid的边框区域:

SetWindowPos(Grid.Handle, 0, 0, 0, Grid.Width, Grid.Height, SWP_DRAWFRAME);