Delphi TStringGrid Flicker

Я добавляю несколько строк в сетку строк из файла CSV @ runtime, однако StringGrid, похоже, много мигает, когда обновляется, я предполагал, что для этого будет команда beginupadate / Endupdate. Однако я не могу найти это. Есть ли другой способ остановить мерцание при обновлении идентификатора сетки.

Colin

4 ответа

Лучше поздно, чем никогда... Я пользуюсь WM_SETREDRAW, Например:

...
StringGrid1.Perform(WM_SETREDRAW, 0, 0);
try
  // StringGrid1 is populated with the data here 
finally
  StringGrid1.Perform(WM_SETREDRAW, 1, 0);
  StringGrid1.Invalidate; // important! to force repaint after all
end;
...

Да, в TStringgrid нет BeginUpdate/EndUpdate, но есть для каждой строки или для столбца:

StringGrid1.Rows[0].BeginUpdate;
StringGrid1.Cols[0].BeginUpdate;

Это методы объекта `TStrings`. Use StringGrid1.Rows[i]/Cols[i].BeginUpdate; ... StringGrid1.Rows[i]/Cols[i].EndUpdate;

Обновить

Вы пытались установить DoubleBuffered := true?

Вы можете использовать функцию Windows LockWindowUpdate(AHandle), чтобы предотвратить обновление элемента управления, а затем LockWindowUpdate(0), чтобы перекрасить его.

В качестве ручки передайте Grid.Handle.

Другие вопросы по тегам