2

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

4

3 回答 3

10

为了保持绘画的持久性,你应该这样做的方式如下:

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

——杰伦

于 2010-12-20T08:03:06.053 回答
3

不,那是不可能的。下次 Windows 决定重新绘制控件(您无法真正控制的东西)时,您绘制的所有内容都将被控件的Paint方法和所有与绘制相关的事件重绘。

正如 Jeroen 指出的那样,您必须使用事件方法来进行自定义绘画。

于 2010-12-20T09:06:32.233 回答
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;
于 2010-12-20T07:29:31.783 回答