我在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的时候我在运行时遇到错误。我哪里出错了?
答案 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
并通过那个矩形。它不会帮助解决当前问题,但是当您进入下一步时,您将需要它。您可以使用ACol
和ARow
参数识别正在绘制的单元格,以便您可以使用该信息加载列的特定图像,或输出文本对于列或行。
// 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);