从外部OnDrawCell事件中绘制TStringGrid单元格,是否可能?

时间:2010-12-20 06:31:04

标签: delphi tstringgrid

有没有办法在不使用OnDrawCell事件的情况下在Delphi的TStringGrid上绘制特定单元格,例如,如果我单击一个按钮,将根据其内容绘制指定的单元格。

3 个答案:

答案 0 :(得分:10)

为了保持绘画的持久性,您应该采用以下方式:

  • 在按钮OnClick事件处理程序中,设置一些区分这些单元格的数据
  • 在同一个事件处理程序中,使单元格的绘制区域无效
  • OnLrawCell事件处理程序中的
  • 对未区分的单元格执行常规绘制
  • 在同一个事件处理程序中,以不同的方式绘制不同的单元格

- 的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;