您在错误的
我试过这样做:
void __fastcall TTetrisGame::DrawGrid1DrawCell(TObject *Sender, int ACol, int ARow,
TRect &Rect, TGridDrawState State)
{
this->Canvas->Brush->Color=clBlue;
this->Canvas->FillRect(Rect);
}
但这是一个非常奇怪的结果。我把我的StringGrid放在窗户中间,但我看不到任何蓝色。相反,它是透明的。我在窗户的右上角看到一个蓝色的格子。
我做错了什么?
如何单独为每个单元格着色?
您在错误的Canvas
上绘画
在OnDrawCell
事件处理程序中,this
引用父Form,因为该处理程序是TTetrisGame
类的成员。因此,您正在表单的Canvas
上进行绘制。您需要在网格的Canvas
上绘制:
void __fastcall TTetrisGame::DrawGrid1DrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect, TGridDrawState State)
{
DrawGrid1->Canvas->Brush->Color=clBlue;
DrawGrid1->Canvas->FillRect(Rect);
}