0

我试图这样做:

void __fastcall TTetrisGame::DrawGrid1DrawCell(TObject *Sender, int ACol, int ARow,
    TRect &Rect, TGridDrawState State)
{
    this->Canvas->Brush->Color=clBlue;
    this->Canvas->FillRect(Rect);
}

但这是一个非常奇怪的结果。我将 StringGrid 放在窗口中间,但看不到任何蓝色。相反,它是透明的。我在窗口的右上角看到一个彩色的蓝色网格。

我究竟做错了什么?

如何单独为每个单元格着色?

4

1 回答 1

2

你画错了Canvas

在您的OnDrawCell事件处理程序内部,this指的是父窗体,因为处理程序是TTetrisGame该类的成员。因此,您正在表单的Canvas. 您需要在 Grid 上进行绘制Canvas

void __fastcall TTetrisGame::DrawGrid1DrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect, TGridDrawState State)
{
    DrawGrid1->Canvas->Brush->Color=clBlue;
    DrawGrid1->Canvas->FillRect(Rect);
}
于 2018-11-21T22:36:52.470 回答