在Delphi中绘制DrawGrid中的TBitmaps

时间:2014-04-10 22:21:35

标签: delphi gridview bitmap

我在Delphi XE5中有一个8 x 16的DrawGrid,我想随机填充九张我已经存储在 C:\ Users \ Sean Ewing \ Documents \ My Documents \ Delphi Tutorials \ Other中的图像\数学-O-球体\的Win32 \调试\ IMG 即可。我目前正在尝试加载一张图片以确保我正确地执行此操作。以下是我用来执行此操作的代码:

    procedure TForm1.grdPlayFieldDrawCell(Sender: TObject; ACol, ARow: Integer;
     Rect: TRect; State: TGridDrawState);
      var
        spherePlus: TBitmap;

      begin
        spherePlus.LoadFromFile(ExtractFilePath(Application.ExeName) + '\img\Sphere +1.bmp');
        grdPlayField.Canvas.Draw(0, 0, spherePlus);
      end;

代码编译得很好,根据我在Embarcadero wiki中读到的内容,这是正确的,但是在加载DrawGgrid的时候我在运行时遇到错误。我哪里出错了?

1 个答案:

答案 0 :(得分:2)

您需要先创建位图才能使用它:

procedure TForm1.grdPlayFieldDrawCell(Sender: TObject; ACol, ARow: Integer;
 Rect: TRect; State: TGridDrawState);
  var
    spherePlus: TBitmap;
  begin
    spherePlus := TBitmap.Create;
    try
      spherePlus.LoadFromFile(ExtractFilePath(Application.ExeName) + 
          '\img\Sphere +1.bmp');
      grdPlayField.Canvas.Draw(0, 0, spherePlus);
    finally
      spherePlus.Free;
    end;
  end;

您应该注意的另一件事是,您在活动中收到的Rect参数是需要绘制的区域,因此您希望使用Canvas.StretchDraw并通过那个矩形。它不会帮助解决当前问题,但是当您进入下一步时,您将需要它。您可以使用AColARow参数识别正在绘制的单元格,以便您可以使用该信息加载列的特定图像,或输出文本对于列或行。

// Load specific image for the cell passed in ACol and ARow,
// and then draw it to the appropriate area using the Rect provided.
grdPlayField.Canvas.StretchDraw(Rect, spherePlus);