Можно ли рисовать ячейки TStringGrid снаружи события OnDrawCell?
Есть ли способ нарисовать определенные ячейки в TStringGrid Delphi без использования события OnDrawCell, например, если я нажму кнопку, указанные ячейки будут окрашены в зависимости от их содержимого.
3 ответа
Чтобы рисование было постоянным, вы должны сделать следующее:
- в кнопке обработчика события OnClick установите некоторые данные, которые различают эти ячейки
- в том же обработчике событий сделать недействительной область рисования ячеек
- в обработчике события OnDrawCell сделать обычную рисование для ячеек, не различимых
- в том же обработчике событий по-разному раскрасьте свои выделенные ячейки
--jeroen
Нет, это невозможно. В следующий раз, когда Windows решит перерисовать элемент управления (то, что вы не можете контролировать), все, что вы нарисовали, будет перекрашено элементом управления. Paint
метод и все связанные с живописью события.
Вы должны использовать подход, основанный на событиях, чтобы сделать такую раскраску, как указывает Йерун.
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;