Можно ли рисовать ячейки TStringGrid снаружи события OnDrawCell? - PullRequest
2 голосов
/ 20 декабря 2010

Есть ли способ нарисовать определенные ячейки в TStringGrid Delphi без использования события OnDrawCell, например, если я нажму кнопку, указанные ячейки будут окрашены в зависимости от их содержимого.

Ответы [ 3 ]

10 голосов
/ 20 декабря 2010

Чтобы рисунок оставался постоянным, вы должны сделать следующее:

  • в кнопке обработчика события OnClick установите некоторые данные, которые различают эти ячейки
  • в том же обработчике событий, сделать недействительной область рисования ячеек
  • в обработчике событий OnDrawCell выполняет обычную отрисовку для ячеек, не выделенных
  • в одном и том же обработчике событий по-разному раскрасьте свои выделенные ячейки

- Йерун

3 голосов
/ 20 декабря 2010

Нет, это невозможно.В следующий раз, когда Windows решит перерисовать элемент управления (то, что вы не можете реально контролировать), все нарисованное будет перекрашено методом Paint элемента управления и всеми событиями, связанными с рисованием.

Вы должны использовать подход, основанный на событиях, чтобы сделать такую ​​раскраску, как указывает Джерун.

1 голос
/ 20 декабря 2010
procedure TForm1.Button1Click(Sender: TObject);
var aRect: TRect;
begin
  aRect := StringGrid1.CellRect(2,2);

  StringGrid1.Canvas.Brush.Color := clBlue; 
  StringGrid1.Canvas.FillRect(aRect);
  StringGrid1.Canvas.Font.Color := clBlack;
  StringGrid1.Canvas.TextOut(aRect.Left + 2 , aRect.Top + 2, StringGrid1.Cells[2, 2]);
end;
...