String Grid с использованием стилей в Delphi XE2 - полоса прокрутки не обновляется - PullRequest
2 голосов
/ 11 февраля 2012

Я делаю простое приложение в 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 ]

2 голосов
/ 01 марта 2013

Это сработало для меня - оно заставляет окна перекрашивать граничную область StringGrid:

SetWindowPos(Grid.Handle, 0, 0, 0, Grid.Width, Grid.Height, SWP_DRAWFRAME);
2 голосов
/ 11 февраля 2012
  1. Если сделать недействительными и перекрасить ничего не сделаю для вас, попробуйте изменить размер сетки строк:

    Сетка. Ширина: = Сетка. Ширина - 1; Сетка. Ширина: = Сетка. Ширина + 1;

  2. Попробуйте поиграть с параметрами строки сетки, которые скрывают и показывают полосы прокрутки. Скрыть их перед обновлением и показать их после. Возможно, это заставит их перекрасить.

  3. Попробуйте переместить положение прокрутки и вернуть его в исходное положение.

...