有没有办法在不使用OnDrawCell事件的情况下在Delphi的TStringGrid上绘制特定单元格,例如,如果我单击一个按钮,将根据其内容绘制指定的单元格。
答案 0 :(得分:10)
为了保持绘画的持久性,您应该采用以下方式:
- 的Jeroen
答案 1 :(得分:3)
不,那是不可能的。下一次Windows决定重绘控件(你无法控制的东西)时,你绘制的所有内容都将被Control的Paint
方法和所有与绘画相关的事件重新绘制。
您必须使用事件方法来执行自定义绘画,就像Jeroen指出的那样。
答案 2 :(得分:1)
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;