2

我正在 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;

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

4

2 回答 2

2
  1. 如果无效和重绘对您没有任何帮助,请尝试调整字符串网格的大小:

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

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

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

于 2012-02-11T19:17:14.060 回答
2

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

SetWindowPos(Grid.Handle, 0, 0, 0, Grid.Width, Grid.Height, SWP_DRAWFRAME);
于 2013-02-28T20:50:25.500 回答