有什么方法可以在不使用 OnDrawCell 事件的情况下在 Delphi 的 TStringGrid 上绘制特定单元格,例如,如果我单击一个按钮,指定的单元格将根据其内容进行绘制。
问问题
2263 次
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 回答